React/Vercel 바이브코딩 프로젝트 — 보안 점검 결과

감사 대상: AI D2C 서비스 (예시) 스택: React + Vercel + RAG API 감사일: 2026-08

취약점 요약

3
Critical
5
High
7
Medium
4
Low
11
Pass
이 보고서는 바이브코딩(Cursor AI 활용) 방식으로 개발된 React/Vercel 서비스에서 실제로 자주 발견되는 보안 취약점 패턴을 기반으로 작성된 샘플입니다. 실제 감사 시에는 GitHub 레포 접근 권한 부여 후 소스코드 전수 점검을 수행합니다.

Critical 취약점

CRITICAL

API 키 클라이언트 번들 노출

Cursor AI가 생성한 코드에서 process.env.OPENAI_API_KEY를 클라이언트 컴포넌트(use client)에서 직접 참조. 빌드 결과물 JS 번들에 키가 평문 노출됨.

발견 패턴
// ❌ 클라이언트 컴포넌트에서 직접 참조
"use client"
const response = await fetch('/api/rag', {
  headers: { 'Authorization': process.env.OPENAI_API_KEY }
})
CVSS Score
9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N)
조치 방법
모든 외부 API 호출을 Next.js Route Handler(서버 전용)로 이전. NEXT_PUBLIC_ 접두어 없는 환경변수는 서버에서만 접근 가능.
CRITICAL

인증 없는 RAG API 엔드포인트

개인 서사 처리 API(/api/analyze-story)에 인증 미들웨어 누락. 누구든 직접 요청 가능하여 LLM 비용 무제한 소모 및 개인정보 처리 가능.

재현 방법
curl -X POST https://your-app.vercel.app/api/analyze-story \
  -H "Content-Type: application/json" \
  -d '{"story": "임의 텍스트"}'
# → 200 OK (인증 없이 LLM 호출됨)
조치 방법
NextAuth.js 세션 검증 또는 API 키 기반 인증 추가. Rate limiting(upstash/ratelimit 등) 적용 필수.
CRITICAL

개인정보 로그 평문 기록

console.log(userData) 패턴이 개인 서사(성명, 기념일, 연락처)를 Vercel 함수 로그에 평문으로 기록. Vercel 대시보드 접근 권한자 전원에게 노출.

관련 법규
개인정보보호법 제29조 (안전조치의무) — 개인정보 처리 기록 최소화 의무
조치 방법
프로덕션 환경에서 개인정보 필드 마스킹 후 로깅. NODE_ENV === 'production' 조건부 처리.

High 취약점

HIGH

CORS 와일드카드 설정

API 응답 헤더에 Access-Control-Allow-Origin: * 설정으로 모든 도메인에서 인증된 요청 허용. 9월 론칭 후 고객 세션 탈취 공격 가능.

조치 방법
next.config.jsheaders() 설정을 프로덕션 도메인만 허용하도록 화이트리스트 적용.
HIGH

미검증 파일 업로드 처리

주얼리 레퍼런스 이미지 업로드 시 파일 타입·크기 검증 없음. MIME 타입 위조 공격 및 서버 부하 유발 가능.

조치 방법
sharp 라이브러리로 이미지 재처리 (서버 사이드 변환 시 악성 페이로드 제거). Vercel Blob 업로드 전 magic bytes 검증 추가.
HIGH

Vercel 환경변수 운영/개발 미분리

Preview 배포에서 Production DB URL이 그대로 사용됨. PR 미리보기 링크를 통한 운영 데이터 접근 가능.

조치 방법
Vercel 프로젝트 설정 → Environment Variables에서 각 변수의 적용 환경(Production/Preview/Development)을 명시적으로 분리. Preview는 별도 스테이징 DB 지정.

감사 체크리스트 (30개 항목)

A. 인증 및 인가 2 Critical
  • A-01. API 엔드포인트 인증 미들웨어 전수 점검
  • A-02. JWT/세션 토큰 만료 및 갱신 로직
  • A-03. 소셜 로그인 OAuth redirect_uri 검증
  • ! A-04. 관리자 경로(/admin) 역할 기반 접근 제어
  • A-05. CSRF 토큰 (Next.js App Router 기본 보호)
B. 환경변수 및 시크릿 관리 1 Critical · 1 High
  • B-01. NEXT_PUBLIC_ 접두어 변수 중 민감정보 포함 여부
  • B-02. .env 파일 .gitignore 포함 확인
  • ! B-03. Vercel 환경변수 운영/스테이징/개발 분리
  • B-04. GitHub Actions Secret 안전 보관
C. 개인정보 처리 1 Critical
  • C-01. 개인정보 로깅 최소화 (console.log 전수 검색)
  • ! C-02. 개인정보 처리방침 및 수집 동의 UI
  • C-03. 전송 구간 TLS 암호화 (Vercel 기본 제공)
  • ! C-04. 저장 데이터 암호화 (민감 필드 at-rest 암호화)
D. API 보안 2 High
  • D-01. Rate Limiting 적용 (LLM API 비용 폭증 방지)
  • ! D-02. CORS 허용 도메인 화이트리스트
  • D-03. Content-Type 검증
  • D-04. SQL Injection 불가 (Supabase ORM 기본 보호)
  • ! D-05. 입력값 검증 (zod 등 schema validation)
E. Vercel 배포 환경 1 High
  • ! E-01. Preview 배포 Password Protection 활성화
  • E-02. Vercel Edge Network CDN 활성화
  • E-03. 운영/스테이징 환경변수 분리
  • E-04. Git 브랜치 보호 규칙 (main 직접 push 차단)
  • E-05. Vercel Analytics + Sentry 에러 모니터링

감사 방법론

🔍

정적 분석 (SAST)

소스코드 전수 탐색. 위험 패턴 grep, 의존성 취약점 npm audit, ESLint security ruleset 적용.

🌐

동적 분석 (DAST)

실행 중인 Vercel Preview 환경 대상 Burp Suite 프록시 검사. API 엔드포인트 퍼징 및 인증 우회 시도.

📋

컴플라이언스 검토

개인정보보호법 제29조(안전조치) 준수 여부. 개인정보처리방침 항목 전수 검토. GDPR 대비 점검.

제안 작업 범위 및 산출물

주차 작업 범위 산출물
1주차 레포 접근 권한 수령 → SAST 전수 점검 → 취약점 1차 목록 작성 취약점 목록 초안 (CRITICAL/HIGH 즉시 공유)
2주차 DAST (Vercel Preview 환경) → CORS/인증/Rate Limiting 점검 → 개인정보 처리 흐름도 검토 DAST 보고서 + 개인정보 흐름도
3주차 Vercel 환경변수 분리 설정 작업 → CRITICAL/HIGH 취약점 직접 수정 (PR 제출) 수정 PR 3~5건 + 수정 전/후 비교 보고서
4주차 재점검 (수정 후 검증) → 최종 보안 감사 보고서 + 운영 가이드 작성 최종 보안 감사 보고서 (PDF) + 운영 가이드

견적 안내

기본 감사 + 보고서: 100만원
기본 감사 + CRITICAL/HIGH 직접 수정 + 보고서: 150만원
전 항목 감사 + 전체 수정 + Vercel 환경 최적화 + 운영 가이드: 200만원

세금계산서 발행 가능 (사업자등록번호 보유). 정부지원사업 집행 처리 경험 다수.