AI 코딩 에이전트 보안 총정리 2026: 실제 침해 사례 6건과 방어 설정 7단계
AI 코딩 에이전트는 2026년 들어 ‘편집기 안의 자동완성’이 아니라, 터미널 명령을 실행하고 파일을 쓰고 외부 MCP 서버에 접속하는 실행 주체가 됐습니다. 공격자 입장에서 이만큼 매력적인 표적이 없습니다. 개발자 계정 권한으로, 자격증명이 잔뜩 들어 있는 홈 디렉터리에서, 사람의 승인 없이 셸을 쓸 수 있는 프로세스니까요. 실제로 2025년 하반기부터 이 표적을 정확히 노린 침해가 연달아 확인됐습니다.
실제로 뚫린 사례: 2025~2026 AI 코딩 에이전트 침해 6건
아래는 벤더 권고문 또는 보안업체 공개 보고서로 확인된 사례만 모은 것입니다. 추정 사례는 제외했습니다.
| 사례 | 시점 | 대상 | 핵심 수법 | 공개 CVSS |
|---|---|---|---|---|
| s1ngularity (Nx 패키지) | 2025-08 | Nx npm 패키지 | 악성 postinstall이 AI CLI를 권한 무시 플래그로 실행해 자격증명 수집·유출 | CVE 미부여 |
| CamoLeak | 2025-08 | GitHub Copilot Chat | 이슈에 숨긴 간접 인젝션 + 이미지 프록시로 비공개 저장소 내용 유출 | 9.6 |
| EchoLeak (CVE-2025-32711) | 2025-06 | Microsoft 365 Copilot | 클릭 없이 메일 한 통으로 컨텍스트 데이터 유출 | 9.3 |
| CVE-2025-53773 | 2025-08 | Copilot / Visual Studio | 인젝션으로 설정 파일을 고쳐 자동 승인(YOLO) 모드를 켠 뒤 원격 코드 실행 | 7.8 |
| MCPoison (CVE-2025-54136) | 2025-08 | Cursor | 한 번 승인된 MCP 설정을 사후에 바꿔 재확인 없이 명령 실행 | 7.2 |
| CVE-2025-52882 | 2025-06 | Claude Code IDE 확장 | 인증 없는 로컬 WebSocket에 악성 웹페이지가 접속 | 높음(패치 완료) |
가장 상징적인 건 s1ngularity입니다. 악성 버전 Nx 패키지가 설치 스크립트에서 로컬에 깔린 AI 코딩 CLI를 찾아, 권한 확인을 건너뛰는 플래그를 붙여 실행하고 “자격증명 파일을 찾아라”고 지시했습니다. 에이전트 자체 버그가 아니라 에이전트를 도구로 쓴 최초의 악성코드였다는 점이 중요합니다. 같은 해 7월 Amazon Q의 VS Code 확장에는 파괴적 지시문이 담긴 커밋이 정식 배포판에 실려 나갔고, 9월에는 이메일 발송용 MCP 서버가 몰래 BCC를 추가하는 백도어로 밝혀졌습니다.
공격은 어디로 들어오나 — 4가지 침투 경로
> 분류 기준: 인젝션 3건(CamoLeak·EchoLeak·CVE-2025-53773), 공급망 3건(s1ngularity·Amazon Q 확장·MCP BCC 백도어), 설정 신뢰 남용 1건(MCPoison), 클라이언트 취약점 1건(CVE-2025-52882). 외부 조사 통계가 아니라 이 글이 다룬 사례를 필자가 분류한 것입니다.
1) 간접 프롬프트 인젝션
에이전트가 읽는 모든 외부 텍스트가 명령이 될 수 있습니다. GitHub 이슈, PR 설명, 웹 문서, 로그, 심지어 `CLAUDE.md`나 `.cursor/rules` 같은 규칙 파일까지요. 2025년 3월 공개된 ‘Rules File Backdoor’ 기법은 규칙 파일에 눈에 보이지 않는 유니코드 문자로 지시를 숨겼습니다. OWASP는 이 문제를 GenAI Top 10의 첫 항목(LLM01)으로 올려두고 있습니다.
2) 공급망
패키지, IDE 확장, MCP 서버 세 곳 모두가 통로입니다. 에이전트가 자동 승인 상태로 돌고 있으면 `npm install` 한 번이 곧 자격증명 유출입니다.
3) 설정 신뢰 남용
“한 번 승인하면 계속 신뢰”라는 UX가 약점입니다. MCPoison은 승인 시점의 설정과 실행 시점의 설정이 다를 수 있다는 틈을 파고들었습니다.
4) 결과물 자체의 결함
Veracode의 2025 GenAI Code Security Report는 AI가 생성한 코드의 약 45%가 OWASP 기준 보안 테스트를 통과하지 못했고, 자바가 70%대로 가장 나빴다고 보고했습니다. 에이전트를 안전하게 굴리는 것과 에이전트가 쓴 코드를 검증하는 것은 별개의 숙제입니다. 이 부분은 바이브코딩 완벽 가이드 2026에서 정리한 검증 루프와 함께 보면 좋습니다.
도구별 기본 방어 수준: Claude Code vs Cursor vs Copilot
9
9
8
7
6
7
7
7
9
| 통제 수단 | Claude Code | Cursor | GitHub Copilot |
|---|---|---|---|
| 도구별 허용/차단 규칙 | `settings.json` allow/ask/deny | 명령 allowlist·denylist | 에이전트 도구 승인 |
| 자동 승인 모드 차단 | 관리 설정으로 조직 차원 비활성화 | 워크스페이스 신뢰 설정 | 조직 정책 |
| 실행 격리 | 네이티브 샌드박스 + devcontainer | 별도 컨테이너 구성 필요 | 클라우드 에이전트 격리 |
| MCP 자동 승인 | 기본 비활성 권장 | 1.3 이후 재승인 요구 | 레지스트리 기반 |
지금 바로 적용하는 방어 설정 7단계
> 위 점수는 아래 7단계를 모두 적용했을 때의 자체 평가 커버리지입니다. 절대 수치가 아니라 어디가 비어 있는지를 보는 용도로 읽으세요.
1. 자동 승인 플래그를 조직 차원에서 봉인합니다. `–dangerously-skip-permissions`류는 격리된 컨테이너·CI 안에서만 허용하고, 로컬에서는 관리 설정으로 막습니다.
{
"permissions": { "disableBypassPermissionsMode": "disable" }
}
2. 자격증명 경로를 읽기 단계에서 차단합니다. 에이전트가 못 읽으면 유출할 것도 없습니다.
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Bash(curl:*)",
"Bash(wget:*)"
],
"ask": ["Bash(rm:*)", "Bash(git push:*)"],
"defaultMode": "acceptEdits"
},
"enableAllProjectMcpServers": false
}
3. 네트워크 송신을 allowlist로 좁힙니다. 인젝션 성공의 마지막 단계는 항상 ‘외부로 보내기’입니다. devcontainer + 방화벽 allowlist, 또는 Anthropic이 오픈소스로 공개한 샌드박스 런타임(macOS `sandbox-exec` / Linux `bubblewrap` 기반)을 씁니다.
4. MCP 서버를 코드처럼 취급합니다. 버전 핀 고정, `.mcp.json` 변경은 반드시 코드리뷰, 자동 승인 끄기. MCPoison이 정확히 이 세 가지의 부재를 노렸습니다.
5. 규칙 파일도 리뷰 대상에 넣습니다. `CLAUDE.md`, `.cursor/rules`, `AGENTS.md`의 diff를 사람이 봅니다. 제로폭 문자·양방향 제어문자 탐지를 CI에 걸면 Rules File Backdoor 계열은 대부분 걸립니다.
6. PreToolUse 훅으로 실행 전 게이트를 둡니다. 모델의 판단에만 의존하지 말고, 위험 패턴(`base64 | sh`, 사설 IP 접근, 자격증명 파일 접근)은 훅에서 기계적으로 거부합니다.
7. 결과물에 SAST를 강제합니다. AI가 만든 PR에는 Semgrep·CodeQL 통과를 병합 조건으로 붙입니다. 앞서 본 45%라는 실패율은 ‘사람이 안 보면 절반은 새는 구조’라는 뜻입니다.
조직 단위로 굳히기 — 정책과 사고 대응
에이전트를 쓰는 조직이라면 세 가지는 문서화되어 있어야 합니다. 첫째, 장기 토큰 금지. 에이전트가 접근하는 자격증명은 수명 1시간 이하 단기 토큰으로 바꿉니다. s1ngularity 피해의 크기는 대부분 무기한 PAT에서 나왔습니다. 둘째, 감사 로그 보존. 어떤 도구가 어떤 명령을 실행했는지 남지 않으면 사고 범위 산정 자체가 불가능합니다. 셋째, 유출 가정 대응 절차. 에이전트 침해가 의심되면 코드 롤백보다 자격증명 전량 회전이 먼저입니다.
모델 성능이 올라가도 이 구조는 바뀌지 않습니다. 컨텍스트에 외부 텍스트가 들어오는 한 인젝션은 남고, 방어선은 결국 권한·격리·검증 세 겹뿐입니다. 컨텍스트 자체를 어떻게 설계할지는 Claude 5 컨텍스트 엔지니어링 실전 가이드에서 더 다뤘습니다.
참고 자료
– Claude Code 설정 및 권한 문서
– OWASP Top 10 for LLM Applications
– NVD — CVE-2025-53773 (Copilot 원격 코드 실행)
– NVD — CVE-2025-54136 (Cursor MCPoison)
—
자주 묻는 질문
권한 확인을 건너뛰는 플래그(–dangerously-skip-permissions)는 절대 쓰면 안 되나요?
로컬 개발 환경에서는 쓰지 않는 편이 안전합니다. 2025년 8월 Nx 패키지를 통한 s1ngularity 공격이 바로 이 계열 플래그를 악용해 AI CLI에 자격증명 수집을 지시했습니다. 네트워크가 제한된 컨테이너나 일회성 CI 잡처럼 유출 경로가 막힌 환경에서만 제한적으로 사용하세요.
모델이 더 똑똑해지면 프롬프트 인젝션은 해결되나요?
아니요. 신뢰할 수 없는 외부 텍스트와 사용자 지시가 같은 컨텍스트에 들어가는 구조적 문제이기 때문에 성능 향상만으로는 사라지지 않습니다. OWASP도 이를 LLM 애플리케이션 최상위 위험으로 분류하며, 권한 최소화·실행 격리·외부 송신 차단 같은 구조적 통제로 완화하는 것이 표준 접근입니다.
MCP 서버는 어떻게 검증해야 하나요?
버전을 핀으로 고정하고, `.mcp.json` 변경을 반드시 코드리뷰 대상에 포함시키고, 프로젝트 MCP 자동 승인 옵션을 끄는 것이 기본 3종입니다. Cursor의 MCPoison 사례는 한 번 승인된 설정이 나중에 바뀌어도 재확인하지 않는다는 점을 노렸고, 2025년 9월 확인된 이메일 MCP 백도어는 배포자 신원 확인의 필요성을 보여줍니다.
자주 묻는 질문
권한 확인을 건너뛰는 플래그(–dangerously-skip-permissions)는 절대 쓰면 안 되나요?
로컬 개발 환경에서는 쓰지 않는 편이 안전합니다. 2025년 8월 Nx 패키지를 통한 s1ngularity 공격이 바로 이 계열 플래그를 악용해 AI CLI에 자격증명 수집을 지시했습니다. 네트워크가 제한된 컨테이너나 일회성 CI 잡처럼 유출 경로가 막힌 환경에서만 제한적으로 사용하세요.
모델이 더 똑똑해지면 프롬프트 인젝션은 해결되나요?
아니요. 신뢰할 수 없는 외부 텍스트와 사용자 지시가 같은 컨텍스트에 들어가는 구조적 문제이기 때문에 성능 향상만으로는 사라지지 않습니다. OWASP도 이를 LLM 애플리케이션 최상위 위험으로 분류하며, 권한 최소화·실행 격리·외부 송신 차단 같은 구조적 통제로 완화하는 것이 표준 접근입니다.
MCP 서버는 어떻게 검증해야 하나요?
버전을 핀으로 고정하고, `.mcp.json` 변경을 반드시 코드리뷰 대상에 포함시키고, 프로젝트 MCP 자동 승인 옵션을 끄는 것이 기본 3종입니다. Cursor의 MCPoison 사례는 한 번 승인된 설정이 나중에 바뀌어도 재확인하지 않는다는 점을 노렸고, 2025년 9월 확인된 이메일 MCP 백도어는 배포자 신원 확인의 필요성을 보여줍니다.
