vibe-coded 앱, 혹은 솔직히 말해 어떤 앱이든 일반적인 보안 취약점 패턴으로부터 보호할 수 있도록 돕는 에이전트 스킬 (agent skill)입니다. Chris Raroque (@raroque)가 Aloa의 동료들과 협력하여 제작했습니다.
AI 어시스턴트 (AI assistants)는 기능을 빠르게 구축하는 데는 뛰어나지만, 보안 측면에서는 지속적으로 실수를 저지릅니다. 비밀값 하드코딩 (hardcoding secrets), 행 수준 보안 (row-level security, RLS) 누락, 클라이언트가 제출한 가격 신뢰, localStorage에 토큰 저장 등이 그 예입니다. 이 스킬은 이러한 패턴이 배포되기 전에 포착합니다.
AI 앱 구축, 커스텀 에이전트 (custom agents) 제작, 또는 기업 내 AI 도입에 도움이 필요하신가요? Chris 및 Aloa 팀과 함께 협업하세요.
이 스킬은 vibe-coded 애플리케이션에서 반복적으로 나타나는 보안 문제를 해결하기 위해 특별히 제작되었습니다. AI를 사용하여 빠르게 개발할 때 보안의 기본 원칙들이 생략되곤 하며, AI 어시스턴트 자체가 취약점을 유발하는 원인이 되기도 합니다. 이 스킬은 에이전트에게 이러한 패턴을 포착하고 방지할 수 있는 지식을 제공합니다.
이 스킬은 에이전트 스킬 (Agent Skills) 형식을 사용하므로 Claude Code, OpenAI Codex 및 기타 호환 가능한 에이전트와 함께 작동합니다.
보안 규칙은 프로젝트에서 사용하는 기술에 따라 에이전트가 로드하는 참조 파일 (reference files) 형태로 구성되어 있습니다. Supabase를 사용 중이라면 RLS 정책을 확인하고, Stripe를 사용 중이라면 결제 흐름을 확인하며, React Native를 사용 중이라면 JS 번들 내의 비밀값을 확인합니다. 관련 없는 체크로 인해 컨텍스트 (context)를 낭비하지 않습니다.
npx skills add https://github.com/raroque/vibe-security-skill --skill vibe-security
npx를 사용할 수 없는 경우, 먼저 Node.js를 설치하세요: brew install node (macOS) 또는 nodejs.org에서 다운로드하십시오.
npx skills add https://github.com/raroque/vibe-security-skill --skill vibe-security
에이전트 플랫폼을 묻는 프롬프트가 나타나면 "Codex"를 선택하세요.
이 리포지토리 (repo)를 클론(Clone)하고 vibe-security/ 폴더를 프로젝트 또는 글로벌 스킬 디렉토리로 복사하세요:
# 프로젝트 레벨 (하나의 프로젝트에 적용)
cp -r vibe-security/ .claude/skills/vibe-security/
# 글로벌 (모든 프로젝트에 적용)
...
Claude Code: /vibe-security를 사용하세요.
전체 보안 감사 (security audit)를 실행하려면 /vibe-security를 사용하거나, "내 코드의 보안 문제를 확인해줘", "이게 안전할까?", "이 프로젝트를 감사해줘"와 같이 자연스럽게 요청하세요.
Codex: $vibe-security를 사용하세요.
또는 필요한 내용을 설명하세요 - "취약점이 있는지 검토해줘", "내 Supabase RLS를 확인해줘".
이 스킬은 인증 (authentication), 결제 (payments), 데이터베이스 액세스 (database access), API 키 (API keys) 또는 사용자 데이터 (user data)를 처리하는 코드를 작성하거나 검토할 때 자동으로 활성화됩니다.
| 카테고리 | 탐지 항목 |
|---|
| 비밀 정보 및 환경 변수 (Secrets & Env Vars) | 하드코딩된 API 키, NEXT_PUBLIC_ / VITE_ / EXPO_PUBLIC_ 변수에 포함된 비밀 정보, .gitignore 누락 |
| 데이터베이스 보안 (Database Security) | 비활성화된 Supabase RLS, USING (true) 정책, WITH CHECK 누락, 노출된 민감한 필드, Firebase의 allow: if true 규칙, 인증이 누락된 Convex |
| 인증 및 인가 (Auth & Authorization) | 검증 없는 jwt.decode(), 미들웨어 전용 인증, 보호되지 않은 Server Actions, localStorage의 토큰 |
| 속도 제한 (Rate Limiting) | 인증/AI/이메일 엔드포인트의 제한 누락, 클라이언트에서 조작 가능한 속도 제한 카운터, 결제 한도(billing caps) 부재 |
| 결제 (Payments) | 클라이언트가 제출한 가격, 웹훅 서명 검증 (webhook signature verification) 누락, 만료된 구독 확인 |
| 모바일 (Mobile) | JS 번들에 포함된 API 키, 토큰 저장용 AsyncStorage, 안전하지 않은 딥 링크 (deep links), 취약한 생체 인증 (biometric auth) |
| AI / LLM | 노출된 AI API 키, 사용량 제한 부재, 프롬프트 인젝션 (prompt injection), 안전하지 않은 출력 렌더링 |
| 배포 (Deployment) | 프로덕션 환경의 디버그 모드, 노출된 소스 맵 (source maps), 보안 헤더 (security headers) 누락, .git 접근 가능 |
| 데이터 액세스 (Data Access) | SQL 인젝션 (SQL injection), Prisma 연산자 인젝션 (Prisma operator injection), $queryRawUnsafe, 대량 할당 (mass assignment) |
기여, 수정 및 개선 제안을 적극 환영합니다! 이것은 커뮤니티 리소스로 만들어졌습니다. AI 어시스턴트가 계속해서 도입하는 보안 안티 패턴 (security anti-pattern)을 발견했다면 추가해 주세요.
가이드라인은 CONTRIBUTING.md를 참조하세요.
Vibe Security는 MIT 라이선스 하에 제공됩니다. 자세한 내용은 LICENSE를 참조하세요.
Chris Raroque (@raroque) 및 Aloa 팀이 제작하였습니다.