2026년 정보 유출 실 피해 사례로 보는 Claude Code / Devin의 보안 핵심
요약
본 기사는 2026년 정보 유출 사례를 분석하며, AI 에이전트가 침입 경로가 되는 새로운 보안 위협을 경고합니다. 핵심은 '기밀 접근', '신뢰할 수 없는 입력 읽기', '외부 전송'이라는 세 가지 조건(lethal trifecta)이 동시에 충족될 때 발생한다는 것입니다. Claude Code와 Devin 같은 에이전트의 방어는 이 중 어느 한 단계를 차단하는 데 초점을 맞춥니다.
핵심 포인트
- AI 에이전트는 이제 침입 경로가 될 수 있습니다.
- 정보 유출은 '기밀 접근', '신뢰할 수 없는 입력', '외부 전송' 3가지 조건이 모두 필요합니다.
- 방어의 핵심은 이 세 가지 중 하나를 확실히 끊는 것입니다.
- Claude Code와 Devin 등 도구들은 각 단계에 대한 방어 메커니즘을 갖추고 있습니다.
2026년에 공개된 정보 유출 사례들을 수법별로 살펴보면서, 무시할 수 없는 변화를 감지했습니다. VPN 취약점이나 정규 계정 악용과 더불어, AI 에이전트 자체가 침입 경로가 된 사례들이 늘어나고 있습니다. 쉘(shell) 도구 실행을 거쳐 JWT(인증 토큰)를 탈취한 경우, 웹 입력에 심어진 지시로 정보를 DNS를 통해 유출시킨 경우(통칭 Salesbleed), MCP 서버의 인증 정보가 부정하게 재사용된 경우 등이 그렇습니다.
이는 남의 일이 아닙니다. Claude Code도 Devin도, 말 그대로 '도구를 실행하고, 외부 정보를 읽고, 네트워크에 나가는' 에이전트입니다. 본 기사에서는 트렌드가 되고 있는 실 피해 유형을 분해하여, 그것이 Claude Code와 Devin에서 어떻게 발생할 수 있는지, 그리고 각 도구가 무엇으로 방어하고 있는지를 공식 문서를 기반으로 정리합니다.
결론부터 말씀드리자면, 핵심은 'lethal trifecta(치명적인 3가지 조건)'라는 하나의 생각입니다. 이것을 파악하면 어떤 대책이 실제로 효과가 있는지 알 수 있습니다.
먼저 3줄로 요약하자면
- 위험한 것은 ①기밀 접근 ②신뢰할 수 없는 입력 ③외부 전송 채널, 이 세 가지가 갖춰졌을 때(lethal trifecta)입니다. AI 코딩 에이전트는 이 세 가지를 동시에 가지기 쉽습니다.
- 2026년 실 피해 사례(AgentCore shell→JWT 탈취, Salesbleed, MCP 인증 재사용)도, Devin에서 보고된 .env 유출도 모두 이 틀로 설명할 수 있습니다.
- 방어의 본질은 세 다리 중 어느 하나를 확실히 끊는 것입니다. Claude Code(권한 모드・sandbox・WebFetch 요약・네트워크 제한)와 Devin(Autonomous의 sandbox・Vault・조직 정책)은 이를 위한 도구를 가지고 있습니다.
| 용어 | 대략적인 의미 |
|---|---|
| 프롬프트 인젝션 | AI에게 내리는 지시를, 데이터에 섞인 악의적인 문장으로 가로채는 공격 |
| ... | |
| 개별 기능 자체가 위험한 것이 아닙니다. 위험한 것은 다음 세 가지가 동시에 성립할 때입니다. |
- 기밀에 접근 가능:
.env파일이나 토큰, 리포지토리, DB, 사내 API 등 - - 신뢰할 수 없는 입력 읽기: Issue・PR・웹 페이지・MCP 도구의 출력・리포지토리 내 파일 -
- 외부로 전송 가능: shell(curl)・브라우징・MCP 전송・DNS・이미지 URL
이 세 가지가 겹치면, ②에 심어진 지시로 에이전트가 ①을 읽고 ③으로 외부로 흘려보내는 일련의 과정이 성립합니다. 반대로 말하면, 어느 하나라도 확실히 끊으면 이 유출은 성립하지 않습니다. 이것이 보안 커뮤니티에서 'lethal trifecta'라고 불리는 정리입니다.
실제로 서두에 나온 사례들도 이 세 다리로 설명할 수 있습니다. AgentCore 건은 shell 실행(③)으로 인증 토큰(①)을 탈취한 이야기이고, Salesbleed는 외부에서 투입된 웹 입력(②)의 지시로 DNS(③)에 흘린 이야기이며, MCP 인증 재사용은 ① 경로가 느슨했던 이야기입니다.
같은 유형이 Claude Code와 Devin에서도 발생할 수 있습니다. 실제로 Devin은 간접 프롬프트 인젝션으로 environment 변수나 시크릿을 유출당할 수 있다는 보고가 있습니다. 공격자가 GitHub에 악의적인 지시를 올려 Devin에게 그것을 건드리게 하면, Devin이 shell 도구나 브라우즈 도구를 사용해서, curl로 공격자의 서버에 보내거나・URL에 포함시키거나・markdown 이미지로 그려내는 등의 경로로 데이터를 빼돌릴 수 있다는 논리입니다. 이는 '최소 권한'과 '안전한 정보 흐름'이 깨졌을 때의 전형적인 사례입니다.
| 실 피해 유형 | 갖춰진 다리 | Claude Code / Devin에서 같은 일이 일어나는 면 |
|---|---|
| shell 실행→인증 토큰 탈취 (AgentCore) | ①+③ | bash/shell 도구에 권한을 너무 많이 주면, 주입된 지시로 키를 읽어 외부로 전송할 수 있음 |
| ... |
여기서부터가 본론입니다. 양자 모두 세 다리를 끊기 위한 기능을 가지고 있습니다.
가장 효과적인 것은 애초에 에이전트에게 기밀을 넘겨주지 않는 것입니다.
- Claude Code: 클라우드 실행 시, GitHub의 인증 정보를 세션 VM에 넣지 않고 Anthropic 측 프록시가 전송 시 부여합니다(VM에는 단명하는 제한적 자격 증명만). 사용자의 API 키나 토큰은 Keychain이나 모드
0600파일에 보관됩니다..env
이러한 기밀 파일은 permissions.deny로 읽지 못하도록 설정할 수 있으며, Manual 모드는 읽기 전용으로 시작됩니다. - Devin: Vault에 보관된 비밀 정보는 샌드박스 내부가 아닌, 전송 시점(egress)에 삽입되므로, 샌드박스 내의 코드(에이전트가 작성한 것을 포함)로는 읽어낼 수 없습니다. .env 파일은 원칙적으로 default-deny로 설정하여 읽지 못하게 운영하는 것이 권장됩니다.
읽는 모든 것에 대해 '지시가 심어져 있을지도 모른다'고 의심하는 것이 기본 자세입니다.
- Claude Code: WebFetch는 대부분의 경우, 원본 페이지를 그대로 전달하지 않고, 다른 모델 호출을 통해 페이지를 요약한 결과를 Claude에 전달합니다. 주입문이 본체에 그대로 도달하기 어렵게 설계되어 있습니다. 신뢰할 수 없는 폴더에서 실행하면 workspace trust 확인 절차가 나옵니다. 다만 주의할 점은, 리포지토리의
claude -p(헤드리스)에서는 trust 다이얼로그도 MCP 승인도 나오지 않기 때문에.claude배하 또는 hooks,.mcp.json등이 무방비하게 실행될 수 있으므로, CI나 자동화 환경에서는--bare로 자동 로드를 막는 것이 안전합니다. MCP 서버는 Anthropic이 보안 감사를 수행하지 않은 부분이므로, 직접 제작하거나 신뢰할 수 있는 제공업체로 한정해야 합니다. - Devin: 앞서 언급했듯이 외부 콘텐츠 접촉 시 유출 사례가 보고되고 있으므로, 위험한 입력원은 태스크에서 제외하고, MCP는 신뢰하는 곳으로 제한하는 것이 기본입니다.
이것이 마지막 방어선입니다. ①②를 돌파당하더라도, 밖으로 나갈 길이 없으면 유출되지 않습니다.
- Claude Code:
curl이나wget은 기본적으로 자동 승인되지 않습니다 (Manual 모드에서는 확인 절차가 있습니다)./sandbox로 파일 시스템과 네트워크를 격리할 수 있으며, 명령어 문자열에 의존하지 않는 네트워크 강제가 가능합니다. 클라우드 실행은 네트워크가 기본적으로 제한되며, 허용된 도메인으로만 좁힐 수 있습니다. - Devin: Autonomous 모드는 OS 레벨의 샌드박스 (macOS의 seatbelt, Linux의 bwrap+seccomp에 해당)로 shell을 격리한 후 자동 승인합니다. 'curl이 임의 서버에 도달하지 못하도록 샌드박싱하는 것'이 바로 권장되는 방어입니다.
마지막으로 강조하고 싶은 것은, 사람의 승인을 거치지 않는 순간 위험도가 급상승한다는 점입니다. 간접 프롬프트 인젝션의 마지막 제동 장치는 종종 '사람이 실행 전에 멈추는 것'이기 때문입니다.
- Claude Code의
--dangerously-skip-permissions, Devin의 Bypass와 같은 '모두 자동 승인'은 trifecta의 ③을 열어둡니다. -claude -p는 앞서 언급했듯이 trust 확인을 하지 않으므로, 신뢰할 수 없는 리포지토리를 그대로 실행하면 위험합니다. - Kafka나 cron으로 이벤트 기반에 무인으로 구동하는 구성(별도 기사에서 다루었습니다)은 편리하지만, 여기에 주입 방지 설계가 필요합니다.
무인으로 구동하려면, 샌드박스 필수・네트워크 허용제・기밀 정보는 원칙적으로 전달하지 않기・부작용 조작만 사람의 승인을 남기기를 초기값으로 하는 것이 현실적입니다. 조직 차원에서는 Devin의 경우 관리자가 Team Settings에서 deny/ask를 설정하면 개인 설정으로 덮어쓸 수 없으므로, 가드레일을 중앙에서 단단히 할 수 있습니다. Claude Code 역시 managed settings로 조직 표준을 강제할 수 있습니다.
마지막으로, trifecta의 세 기둥으로 정리한 실무 초기값입니다.
| 기둥 | 해야 할 일 |
|---|---|
| ① 기밀 정보 제한 | 비밀은 Vault/프록시를 거쳐 에이전트가 손댈 수 없는 곳에. .env는 deny. 키를 환경 변수로 직접 전달하지 않기 |
| ... |
특히, 에이전트를 자동/무인으로 구동하기 시작할 때는 사람의 승인이라는 마지막 안전장치가 사라집니다. 이때 '어떤 부분을, 무엇으로 끊고 있는지'를 한 번 종이에 적어두면 사고의 씨앗을 상당히 줄일 수 있습니다. 다음으로는 이 관점에서 Claude Code와 Devin을 실제로 악의적인 프롬프트로 테스트하여 어디까지 버틸 수 있는지 확인해 보고 싶습니다.
- Claude Code Security (공식 문서) (권한 모드/프롬프트 인젝션 방지책/MCP/클라우드 실행 자격 증명 보호)
- Claude Code - Sandboxing / Permissions (공식) (FS/네트워크 격리, 워크스페이스 신뢰)
- Devin CLI - Permissions (공식 문서) (자율적/OS 레벨 샌드박스, 거부/질문)
- CISO's guide to agentic AI (Anthropic) (에이전트 도입의 보안 평가 프레임워크)
- The lethal trifecta for AI agents (Simon Willison) (3가지 조건의 원형적 정리)
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기