AI 코딩 SaaS의 보안 결함은 80% 이상이 7가지 패턴 안에서 반복된다.
AI 도구는 동작 가능한 코드를 우선 출력하기 때문에 보안 분기·권한 검사·입력 검증을 빠뜨리는 경향이 강하다.
이 글은 1~3년차 개발자가 자기 서비스에서 이 7가지를 30초 안에 1차 점검하고, 발견 시 즉시 처리하는 순서를 정리한 가이드다.
한눈에 보는 AI 코딩 7취약점
Q. 왜 AI가 짠 코드는 보안에 약한가요? A. LLM은 학습 데이터의 평균을 따라가는데, 평균 코드는 보안 분기를 생략한 빠른 예제가 많습니다. 동작은 하지만 권한·입력·시크릿 분리가 누락된 채로 배포되는 경우가 흔합니다. Q. 7가지를 동시에 점검할 수 있는 방법이 있나요? A. URL 단위 자동 스캐너로 시크릿·헤더·SSL·CORS·서브도메인·인증서 만료를 한 번에 진단 가능합니다. 권한·IDOR·비즈니스 로직은 수동 점검 또는 SAST가 필요합니다. Q. 발견 즉시 조치 순서는 어떻게 되나요? A. 시크릿 노출 → 인증 우회 → 권한 누락 순으로 트래픽·재무 피해가 큽니다. 발견 시 24시간 안에 회전·패치하고, 나머지는 우선순위에 따라 처리합니다.7가지 취약점 요약표
| # | 패턴 | 대표 사례 | 위험도 |
|---|---|---|---|
| 1 | 시크릿 노출 | .env·API 키 GitHub 공개, 클라이언트 JS 박힘 | 치명 |
| 2 | 인증 우회 | JWT 서명 미검증, none 알고리즘 허용 | 치명 |
| 3 | IDOR (권한 누락) | /api/orders/123 ID 바꾸면 남 데이터 노출 | 치명 |
| 4 | SSRF | 외부 URL fetch 시 내부망 169.254.169.254 호출 | 높음 |
| 5 | 입력 검증 누락 | XSS, SQL Injection, 경로 우회 | 높음 |
| 6 | CORS 오설정 | Origin: * + credentials true 조합 | 높음 |
| 7 | 보안 헤더 누락 | CSP·HSTS·X-Frame-Options 미설정 | 중간 |
① 시크릿 노출 — 가장 자주 새는 곳
GitHub 토큰 스캐너는 분 단위로 신규 commit을 훑는다. 한 번 push된 키는 회전 전까지 자동 봇이 자원을 소진한다.
대표 패턴은 (a) `.env` 가 `.gitignore` 누락 (b) 클라이언트 JS에 API 키 하드코딩 (c) Dockerfile `ARG`로 빌드타임 주입 후 이미지 레이어 잔존.
점검: git log -p | grep -iE "api[_-]?key|secret|token" + GitHub 시크릿 스캐닝 알람 확인. 통합 점검은 AI 코딩 SaaS API 키 유출 가이드 참고.
② 인증 우회 — JWT 서명 미검증
AI 도구가 빠르게 만든 인증 코드는 `jwt.decode(token)` 만 호출하고 `verify=True`를 빠뜨리는 경우가 많다. `alg: none` 토큰을 허용하면 누구나 임의 페이로드로 로그인된다.
점검: 자기 서비스 로그인 후 토큰 페이로드를 디코드 → 알고리즘 헤더를 `none`으로 바꾸고 서명 빈 문자열로 재전송. 200 OK가 떨어지면 우회된다.
③ IDOR — 권한 검사 누락
가장 흔한 비즈니스 로직 결함. `/api/orders/123` 같은 endpoint에서 본인 주문인지 검증을 안 하면 ID만 바꿔도 남의 데이터가 보인다.
AI 코드는 Django ORM `Order.objects.get(pk=id)` 한 줄로 끝나는 경우가 많은데, 운영에서는 `Order.objects.get(pk=id, user=request.user)` 가 필수다.
무료 등급 결과 + 발견된 항목별 패치 우선순위 표 제공.
④ SSRF — 외부 URL fetch가 내부망을 친다
이미지 미리보기·웹훅·OG 메타 추출 기능이 SSRF의 단골 진입점. 사용자가 `http://169.254.169.254/latest/meta-data/` 같은 AWS 메타데이터 URL을 넣으면 IAM 자격증명이 새어 나간다.
방어는 `is_internal_url()` 화이트리스트와 DNS rebinding 차단. OWASP A10 SSRF 권고 참조.
⑤ 입력 검증 누락 — XSS·SQLi·경로 우회
AI 코드는 입력값을 그대로 템플릿이나 쿼리에 박는 경우가 많다. Django는 ORM·autoescape로 기본 방어가 되지만, raw SQL·`mark_safe`·`f-string` 으로 작성하면 즉시 깨진다.
점검: 검색·댓글·프로필 필드에 `<script>alert(1)</script>` 입력. 화면에 실행되면 XSS, DB 오류 메시지가 노출되면 SQLi.
⑥ CORS 오설정 — 신용카드 정보가 새는 조합
`Access-Control-Allow-Origin: *` 와 `Access-Control-Allow-Credentials: true` 가 동시에 켜져 있으면 브라우저는 쿠키를 동봉해 임의 사이트로 데이터를 보낸다. AI 도구가 "CORS 에러 안 나게" 라는 프롬프트에 응답하면 자주 만들어내는 패턴이다.
방어는 Origin 화이트리스트 명시 + credentials 사용 시 와일드카드 금지.
⑦ 보안 헤더 누락 — 무료 자동화로 잡히는 마지막 7할
CSP·HSTS·X-Frame-Options·Referrer-Policy 등 6~8종 보안 헤더는 무료 자동 스캐너가 30초로 잡아낸다. 누락 시 클릭재킹·MITM·정보 유출 경로가 열린다.
점검: curl -I https://yourdomain.com 또는 보안 헤더 8가지 가이드 참고.
발견 시 24시간 조치 순서
| 순위 | 조치 | 이유 |
|---|---|---|
| 1 | 시크릿 회전 + git history 정리 | 분 단위 자동 봇 차단 |
| 2 | JWT 서명 검증 활성화 + alg 화이트리스트 | 전체 계정 탈취 차단 |
| 3 | 모든 endpoint에 `user=request.user` 필터 추가 | 데이터 유출 차단 |
| 4 | 외부 URL fetch에 SSRF 가드 | IAM 자격증명 보호 |
| 5 | raw SQL·mark_safe 제거 | XSS/SQLi 차단 |
| 6 | CORS Origin 화이트리스트 | 크로스사이트 데이터 유출 차단 |
| 7 | 보안 헤더 6종 추가 | 클라이언트 측 공격 차단 |
지금 해야 할 것 — 30초 자가진단 + 1:1 상담
실무자라면: 자기 서비스 URL을 CodeScan 무료 스캔에 입력 → 17개 스캐너가 ①④⑥⑦ 자동 점검 → 등급/점수/패치 가이드 무료 확인.
CISO·임원이라면: AI 코딩 SaaS 보안 전체 점검은 자동 스캔만으로 부족하다. ②③⑤는 수동 침투 점검이 필요하다. SENTRIX 30분 1:1 보안 상담 신청 → 레드팀 출신 컨설턴트가 자기 서비스의 7가지를 함께 점검한다.