피드로 돌아가기
Your AI-Generated API Is Probably Leaking Credentials via CORS
Dev.toDev.to
Security

Your AI-Generated API Is Probably Leaking Credentials via CORS

AI 어시스턴트가 생성한 CORS 설정에서 와일드카드 origin과 credentials 플래그 조합으로 인한 자격증명 유출 취약점 발견 및 수정

Chandan Karn2026년 3월 25일8intermediate

Context

AI 코드 생성 도구(Cursor, Claude)가 Stack Overflow의 2016~2019년 레거시 패턴을 학습하여 origin: '*'credentials: true를 동시에 생성하는 문제가 발생했다. 이 조합은 CWE-942(신뢰할 수 없는 도메인에 대한 허용 정책)에 해당하며, 공격자가 제어하는 웹사이트에서 사용자의 JWT 쿠키를 통해 인증된 API 응답을 탈취할 수 있다.

Technical Solution

  • CORS origin을 명시적 화이트리스트로 변경: origin: '*' 제거 및 allowedOrigins 배열에 정확한 도메인만 등록
  • 조건부 콜백 함수 도입: origin이 없거나 화이트리스트에 포함된 경우에만 허용, 그 외는 에러 반환
  • Express 구현: cors() 미들웨어에서 origin 파라미터에 함수 전달하여 allowedOrigins.includes(origin) 검증
  • FastAPI 구현: allow_origins 리스트에 정확한 URL 지정 및 allow_credentials=True 함께 설정(와일드카드 사용 금지)
  • 사전 검사 도구 적용: grep으로 credentials.*true 또는 allow_credentials.*True 패턴 탐색 후 origin 핸들링이 명시적인지 확인

Key Takeaway

AI 생성 코드의 보안 취약점은 훈련 데이터의 레거시 패턴 재현에서 비롯되며, 패턴 간의 상호작용을 이해하지 못한 결과다. CORS 설정처럼 보안 결정이 필요한 부분은 자동 생성보다 명시적 화이트리스트 기반 설계 원칙을 강제하고, pre-commit hook이나 semgrep 같은 정적 검사 도구로 조합 위험(wildcard + credentials)을 조기에 차단해야 한다.


Express 또는 FastAPI를 사용하는 JWT 기반 인증 API에서 CORS를 설정할 때, origin 파라미터에 `'*'` 또는 요청 header를 그대로 반영하는 대신 명시적 도메인 화이트리스트를 배열로 정의하고 `credentials: true` 플래그와 함께 사용하면, 사용자가 악의적 웹사이트 방문 시에도 자격증명이 포함된 응답이 탈취되는 것을 차단할 수 있다.

원문 읽기