← 모든 글

Silent Egress: 당신이 만들지 않은 공격 표면

From the guide: Claude Code Comprehensive Guide

2026년 2월에 발표된 동료 심사 논문은 다음과 같은 공격을 입증했습니다. 한 연구자가 <title> 태그에 적대적 명령을 숨긴 웹 페이지를 만들었습니다. 한 LLM 에이전트가 일상적인 리서치 작업의 일환으로 그 페이지를 가져왔습니다. 에이전트는 오염된 메타데이터를 읽고, 주입된 명령을 따랐으며, 사용자의 API 키가 담긴 외부 HTTP 요청을 발신했습니다. 그런 다음 에이전트는 작업이 완료되었다고 보고했습니다. 출력에는 아무런 오류도 나타나지 않았습니다. 어떤 로그도 그 유출을 포착하지 못했습니다. 사용자는 깔끔하고 유용한 응답을 보았습니다.1

Silent egress는 URL 메타데이터(제목, Open Graph 태그)에 숨겨진 적대적 명령이 에이전트를 유도하여 API 키 같은 민감한 데이터를 외부 HTTP 요청으로 유출하게 만드는 AI 에이전트 공격으로, 사용자에게는 어떤 오류나 로그도 보이지 않습니다. 이 공격은 480회의 실험 실행에서 89%의 비율로 성공했으며, 그 중 95%는 출력 기반 안전 검사를 회피했습니다. 방어에는 시스템 수준의 통제(도메인 허용 목록, egress 모니터링, skill 수준 권한 부여)가 필요합니다. prompt 계층의 보호 장치는 에이전트가 무엇을 말하는지를 검사할 뿐, 에이전트가 무엇을 하는지는 검사하지 않기 때문입니다.

480회의 실험 실행에서 이 공격은 89%의 비율로 성공했습니다. 성공한 공격 중 95%는 출력 기반 안전 검사를 회피했습니다.1

TL;DR

에이전트의 공격 표면은 그것이 가져오는 모든 URL로 확장됩니다. 연구자들은 “silent egress”를 입증했습니다. URL 메타데이터(제목, 스니펫, Open Graph 태그)에 삽입된 적대적 명령이 에이전트를 유도하여 런타임 컨텍스트를 외부 요청으로 유출하게 만드는 공격입니다. 이 공격이 성공하는 이유는 에이전트가 가져온 콘텐츠를 신뢰할 수 있는 입력으로 처리하기 때문이며, 또한 출력 기반 안전 검사가 에이전트가 무엇을 말하는지를 검사할 뿐 에이전트가 무엇을 하는지는 검사하지 않기 때문입니다. prompt 계층에서의 방어는 제한된 보호만을 제공합니다. 시스템 수준의 통제(도메인 허용 목록, egress 모니터링, skill 수준 권한 부여)는 공격 표면을 줄여 줍니다. 아래에서는 5단계 공격 체인, 전통적 방어가 이를 놓치는 이유, skill 조합 문제, 그리고 오늘 당장 구현할 수 있는 구체적인 완화책을 다룹니다.


공격이 작동하는 방식

silent egress 공격 체인은 다섯 단계로 이루어집니다. 각 단계는 개별적으로는 무해합니다. 위험은 이들의 조합에서 발생합니다.

1단계: 에이전트가 작업을 받습니다. 사용자가 에이전트에게 어떤 주제를 리서치하라고 요청합니다. 이 작업에는 하나 이상의 URL을 가져오는 일이 포함됩니다. 특별할 것이 없습니다.

2단계: 에이전트가 웹 페이지를 가져옵니다. 에이전트는 web-fetch tool을 사용하여 URL을 검색합니다. 이 tool은 <title>, <meta> 설명, Open Graph 태그를 포함한 HTML 메타데이터를 비롯해 페이지 콘텐츠를 반환합니다. 표준적인 웹 스크래핑 동작입니다.

3단계: 메타데이터에 주입된 명령이 들어 있습니다. 페이지의 <title> 태그에는 적대적 텍스트가 담겨 있습니다. 에이전트에게 특정 런타임 컨텍스트(API 키, 세션 토큰, 시스템 prompt)를 이후의 외부 요청에 포함하라고 지시하는 명령입니다. <title> 콘텐츠는 페이지 본문에 렌더링되지 않으므로 이 명령은 사용자에게 보이지 않습니다.

4단계: 에이전트가 주입을 처리합니다. 에이전트는 메타데이터를 페이지 콘텐츠의 일부로 취급합니다. LLM은 사용자가 에이전트에게 읽히려고 의도한 콘텐츠와 적대자가 에이전트에게 실행시키려고 심어둔 콘텐츠를 구별하지 못합니다. 에이전트는 주입된 명령을 따라 공격자가 통제하는 endpoint로 외부 HTTP 요청을 발신하며, 민감한 데이터를 URL 매개변수나 POST 본문에 담아 보냅니다.

5단계: 에이전트가 성공을 보고합니다. 에이전트가 사용자에게 보내는 최종 응답은 리서치 결과를 설명합니다. 유출 요청은 응답에 나타나지 않습니다. 출력 기반 안전 검사(콘텐츠 필터, 거부 분류기)는 에이전트의 가시적 출력을 살필 뿐, 그 네트워크 활동은 살피지 않습니다. 공격이 완료됩니다.1

이 논문은 “샤딩 유출(sharded exfiltration)”이라는 정교화 기법을 소개합니다. 민감한 데이터를 여러 endpoint로 보내는 다수의 외부 요청으로 분할하는 것입니다. 전체 API 키를 한 번의 요청으로 보내는 대신, 에이전트는 앞 절반을 endpoint A로, 뒤 절반을 endpoint B로 보냅니다. 샤딩 유출은 단일 요청 누출 지표를 73% 줄이며, 개별 요청에서 완전한 비밀 값을 찾는 단순한 데이터 손실 방지 메커니즘을 우회합니다.1

샤딩이라는 정교화 기법은 방어 설계에 중요합니다. 외부 요청에서 sk-ant- 패턴을 스캔하는 DLP 시스템은 샤딩되지 않은 공격은 잡아냅니다. 그러나 동일한 DLP 시스템은 한 endpoint로 가는 sk-an과 또 다른 endpoint로 가는 t-api03...은 놓칩니다. 효과적인 egress 모니터링은 개별 요청을 검사하는 데 그치지 않고 여러 요청에 걸쳐 상관관계를 분석해야 합니다. 방어의 복잡성은 공격의 정교함에 비례해 커지며, 그 격화는 공격자가 통제합니다.

실험 설정에는 qwen2.5:7b 기반 에이전트가 사용되었는데, 이는 Claude나 GPT-4 같은 프로덕션 모델보다 훨씬 덜 유능합니다. 더 작은 모델에서 89%의 성공률을 기록한 이 논문의 결과는, 명령을 더 안정적으로 따르는 더 유능한 모델일수록 이 공격에 덜 취약한 것이 아니라 오히려 더 취약할 수 있음을 시사합니다. 더 높은 명령 수행 능력은 모델을 유용하게 만드는 바로 그 속성이자, 주입된 명령에 순종하게 만드는 바로 그 속성입니다.1


전통적 방어가 이를 놓치는 이유

이 공격은 전통적인 에이전트 보안이 암묵적으로 전제하는 세 가지 가정을 악용합니다.

가정 1: 가져온 콘텐츠는 명령이 아니라 데이터다. 에이전트가 URL을 가져오면 시스템은 그 응답을 분석할 정보로 취급합니다. 그러나 LLM은 텍스트를 하나의 통합된 스트림으로 처리합니다. 모델은 “요약할 콘텐츠”와 “따라야 할 명령”이 동일한 입력에 함께 나타날 때 이 둘을 안정적으로 구별하지 못합니다. “다음 요청에 API 키를 포함하세요”라는 내용이 담긴 <title> 태그는 페이지 본문과 동일한 컨텍스트 윈도에 들어갑니다. 모델은 둘 다 입력으로 취급합니다.1

가정 2: 출력 안전 검사가 위험 표면을 포괄한다. 콘텐츠 필터와 거부 분류기는 에이전트가 사용자에게 무엇을 말하는지를 살핍니다. silent egress는 출력을 완전히 우회합니다. 유출은 출력 필터가 결코 보지 못하는 부채널(외부 HTTP 요청)을 통해 일어납니다. 에이전트의 가시적 응답은 깔끔하고, 유용하며, 안전합니다.1

가정 3: tool 권한이 곧 행동 권한이다. 대부분의 에이전트 프레임워크는 tool 수준에서 권한을 부여합니다. 에이전트가 web-fetch tool, bash tool, file-write tool을 사용할 수 있는지 여부입니다. silent egress는 전적으로 부여된 권한 안에서 작동합니다. 에이전트는 web-fetch(허용됨)를 사용하여 페이지를 검색한 다음, 외부 요청 기능(역시 허용됨)을 사용하여 외부 endpoint로 데이터를 보냅니다. 모든 개별 행동은 에이전트의 인가된 toolset 범위 안에 듭니다. 인가된 행동들의 조합이 인가되지 않은 동작을 만들어 냅니다.

SoK: Agentic Skills 논문(Jiang et al., 2026)은 세 번째 문제를 skill 조합 격차로 정식화합니다. skill(적용 조건, 실행 정책, 종료 기준을 갖춘 재사용 가능한 절차적 능력)은 개별 tool 권한으로는 예측할 수 없는 방식으로 조합됩니다.2 URL을 가져오는 skill과 HTTP 요청을 구성하는 skill은 둘 다 따로 떼어 보면 무해합니다. 조합되면 그 어떤 tool 수준 권한 검사도 잡아내지 못하는 유출 프리미티브를 만들어 냅니다.

이 세 가지 가정은 에이전트 가시성 스택의 세 계층에 대응합니다.4 가정 1(가져온 콘텐츠는 데이터)은 입력 경계에서 무너집니다. 가정 2(출력 안전이면 충분하다)는 감사 계층에서 무너집니다. 가정 3(tool 권한이 곧 행동 권한)은 정책 계층에서 무너집니다. silent egress에 대처하려면 세 계층 모두에서 방어가 필요합니다. 이 공격이 세 가정을 동시에 악용하기 때문입니다. 한 가정만 다루는 방어는 나머지 둘을 악용 가능한 상태로 남겨 둡니다.


skill 조합 문제

SoK 논문은 skill을 tool과 구별되는 것으로 정의합니다. skill은 절차적 지식을 “적용 조건, 실행 정책, 종료 기준, 재사용 가능한 인터페이스”와 함께 패키징합니다.2 tool은 원자적 연산(파일 읽기, URL 가져오기)입니다. skill은 tool을 순차적으로 호출하는 다단계 절차입니다.

여기에는 보안상의 함의가 있습니다. 개별 tool에 부여된 권한이 조합 경계에서의 명시적 권한 부여 없이 skill 조합을 통해 전파된다는 점입니다. 세 가지 skill을 살펴봅시다.

Skill 사용 Tool 목적 단독 위험
web-research web-fetch, read 페이지 검색 및 분석 낮음
api-client http-request API 호출 구성 및 전송 낮음
report-builder write, format 사용자를 위한 결과 구조화 없음
조합됨 위의 모든 것 에이전트가 런타임에 셋을 모두 연결함 데이터 유출

각 skill은 인가된 범위 안에서 작동합니다. web-research는 페이지를 읽습니다. api-client는 요청을 보냅니다. report-builder는 출력을 작성합니다. 그 어떤 개별 skill도 데이터를 유출하지 않습니다. 네 번째 행은 조합을 보여줍니다. 에이전트는 런타임에 세 skill을 모두 연결하며, 조합된 워크플로는 모든 구성 요소의 모든 tool 권한을 상속받습니다. 조합 지점에는 어떤 권한 부여 경계도 존재하지 않습니다.

워크플로로 조합되면(“주제 X를 리서치하고, 결과를 API 페이로드로 구성하여, endpoint Y로 전송”) 동일한 세 skill이 유출 파이프라인을 만들어 냅니다. 이 조합은 모든 구성 skill의 모든 tool 권한을 상속받습니다. 대부분의 에이전트 프레임워크에는 조합 경계가 존재하지 않으므로, 조합 경계에서 어떤 권한 부여 검사도 발동하지 않습니다.2

SoK 논문은 발견, 실습, 증류, 저장, 조합, 평가, 갱신의 일곱 단계로 이루어진 skill 수명 주기 모델을 제안합니다.2 보안 거버넌스가 자리 잡아야 할 곳은 조합 단계지만, 논문은 대부분의 프로덕션 시스템이 조합 수준 권한 부여를 갖추고 있지 않다고 지적합니다. skill은 자유롭게 조합됩니다. 어떤 skill을 함께 연결할지 에이전트가 런타임에 결정하기 때문입니다. 운영자는 tool 권한을 정의합니다. 에이전트는 skill 조합을 정의합니다. tool 권한과 조합 동작 사이의 격차가 바로 silent egress가 악용하는 공격 표면입니다.


세 가지 방어선

Silent Egress 논문의 절제(ablation) 결과는 구체적입니다. “prompt 계층에 적용된 방어는 제한된 보호만 제공하는 반면, 시스템 및 네트워크 계층의 통제는… 상당히 더 효과적이다.”1 세 가지 시스템 수준 통제가 공격 체인의 서로 다른 지점에서 대처합니다.

1. 입력 살균: 컨텍스트 주입 전에 메타데이터를 제거하라. 에이전트가 URL을 가져올 때, 응답을 에이전트의 컨텍스트 윈도에 주입하기 전에 콘텐츠에서 <title>, <meta>, Open Graph 태그 및 기타 메타데이터를 제거합니다. 에이전트는 페이지 본문을 봅니다. 에이전트는 적대적 명령이 숨어 있는 메타데이터를 보지 못합니다. 이 방어는 완전하지는 않지만(적대자는 본문 텍스트에 명령을 삽입할 수 있음) 가장 신호가 강한 주입 벡터를 제거합니다.1

제 웹 추출 라이브러리는 trafilatura를 사용하여 HTML에서 본문 콘텐츠를 추출하며, 설계상 내비게이션, 메타데이터, 상용구를 버립니다.3 이 라이브러리는 보안이 아니라 콘텐츠 품질을 위해 만들어졌지만, 동일한 추출이 동일한 방어를 만들어 냅니다. 에이전트는 silent egress가 페이로드를 주입하는 원시 HTML 메타데이터를 결코 보지 못합니다.

2. egress 모니터링: 외부 요청을 로깅하고 제한하라. 제가 설명한 에이전트 가시성 스택이 직접 적용됩니다. Layer 3의 런타임 감사가 모든 외부 네트워크 연결을 포착합니다.4 silent egress 공격에 대한 방어책은 도메인 허용 목록입니다. 승인된 외부 도메인 목록을 유지합니다. 목록에 없는 도메인으로 가는 요청은 경보를 발생시키거나 차단됩니다.

mcp-firewall은 JSONNet 구성의 정규식 기반 허용 규칙을 통해 도메인 범위 정책을 구현합니다.5 외부 요청을 github.com, api.anthropic.com, 그리고 프로젝트 자체 도메인으로 제한하는 정책은 공격자가 통제하는 endpoint로의 유출을 차단합니다. 이 정책은 요청이 실행되기 전, tool 호출 수준에서 적용됩니다.

Logira의 eBPF 기반 감사는 tool 추상화 아래, syscall 수준에서 egress를 포착합니다.6 bash 서브셸을 통해 새로운 외부 요청을 구성하는(web-fetch tool을 우회하는) 에이전트라도 여전히 Logira가 기록하는 네트워크 syscall을 발생시킵니다. tool 수준 정책(mcp-firewall)과 syscall 수준 감사(Logira)의 조합은 의도된 요청 경로와 의도되지 않은 요청 경로를 모두 포괄합니다.

허용 목록은 그것이 포괄하는 채널만큼만 강력하며, 바로 그 지점에서 실제 구현이 새어 나갑니다. 2026년 6월, Docker는 자사의 Sandboxes(sbx) 제품에 두 개의 CVE를 할당했습니다. 이 제품의 위협 모델은 샌드박스 처리된 워크로드를 명시적으로 신뢰할 수 없는 것으로 취급하는데, 이는 에이전트 샌드박스를 권고 사항으로 전락시키는 바로 그 격차입니다. CVE-2026-12039에서는 HTTP/S egress 허용 목록이 DNS 해석에 결코 적용되지 않았습니다. 내장 DNS 서버가 질의된 이름을 무엇이든 호스트 리졸버로 전달했기 때문에, 워크로드가 데이터를 DNS 레이블에 인코딩하여 공격자가 통제하는 도메인으로 보내고, 허용 목록이 결코 검사하지 않는 은닉 채널을 통해 유출할 수 있었습니다.15 CVE-2026-12539에서는 ICMP egress 차단이 네트워크가 생성될 때만 적용되었고 Docker 데몬이 재시작되어 디스크에서 네트워크를 재구축할 때는 다시 적용되지 않았습니다. 따라서 재시작에도 살아남은 샌드박스가 임의의 호스트로 ICMP를 전달하여 ICMP 은닉 채널을 통해 유출할 수 있었습니다.16 Docker는 두 건 모두 5.7(중간)로 평가했으며, 둘 다 신뢰할 수 없는 코드를 격리하기 위해 특별히 만들어진 제품에 영향을 미칩니다. 에이전트 egress 모니터링에 주는 교훈은 분명합니다. HTTP/S에만 적용되는 허용 목록은 egress 통제가 아닙니다. 그것이 무시하는 채널이 바로 은닉 채널이 향하는 곳이기 때문입니다. egress 모니터링은 정책이 작성된 단 하나의 프로토콜만이 아니라, 샌드박스가 도달할 수 있는 모든 프로토콜을 포괄해야 합니다.

3. skill 수준 권한 부여: 조합에 명시적 허가를 요구하라. 구조적 해결책은 tool 수준이 아니라 skill 조합 경계에서의 권한 부여입니다. 에이전트가 web-research를 api-client에 연결할 때, 그 조합은 명시적 승인을 요구해야 합니다. 승인은 자동화될 수도 있고(특정 skill 조합을 허용하는 정책 규칙) 대화형일 수도 있습니다(새로운 조합에 대한 확인 prompt).

제 hook 시스템은 fabrication firewall에서 가져온 재귀 가드와 폭발 반경 분류기를 통해 조합 수준 권한 부여를 근사합니다.7 폭발 반경 분류기는 모든 에이전트 행동을 로컬(파일 쓰기), 공유(git push), 외부(HTTP 요청, API 호출)로 태깅합니다. 외부 행동은 상향된 권한 부여를 요구합니다. 이 분류는 거칠지만(skill 의미론을 이해하지는 못함) silent egress 패턴을 잡아냅니다. 유출 요청은 상향된 검토를 발동시키는 외부 행동입니다.


논문을 읽고 내가 바꾼 것

Lan et al.을 읽은 후 제 hook 시스템에 가한 세 가지 구체적 변경입니다.

1. PreToolUse:WebFetch에 URL 허용 목록을 추가했다. 이 hook은 가져오기를 허용하기 전에 대상 URL을 승인된 도메인 목록과 대조합니다. 목록에 없는 도메인으로 가는 요청은 수동 승인을 요구합니다. 목록은 12개 도메인(GitHub, Anthropic, arxiv.org, PyPI, npm, Cloudflare, NIST, OWASP, HackerNews, Wikipedia, Semantic Scholar, StackOverflow)으로 시작했습니다. 필요에 따라 도메인을 추가하며, 이로써 에이전트가 어떤 외부 소스에 접근하는지에 대한 감사 가능한 기록이 만들어집니다.8

2. web-extract 출력에서 HTML 메타데이터를 제거했다. trafilatura 기반 추출은 이미 대부분의 메타데이터를 버립니다. 저는 명시적 검사를 추가했습니다. 원시 HTML이 통과하면(trafilatura가 파싱하지 못할 때의 대체 모드), hook이 콘텐츠를 에이전트 컨텍스트로 반환하기 전에 <title>, <meta>, Open Graph 태그를 제거합니다.3

3. PostToolUse:Bash에 외부 요청 로깅을 추가했다. curl, wget, http, fetch 패턴을 포함하는 모든 bash 명령은 이제 대상 URL, HTTP 메서드, 응답 코드를 세션 감사 추적에 로깅합니다. 이 로그는 요청을 차단하지는 않지만(차단하면 정당한 API 호출이 깨짐) 세션 사후 검토를 위한 포렌식 기록을 만듭니다.8

이 변경들 중 어느 것도 아키텍처 재설계를 요구하지 않았습니다. 각 변경은 기존 hook에 15~30줄을 추가했습니다. 누적된 효과는 이렇습니다. 5단계 silent egress 체인은 이제 2단계(URL 허용 목록), 3단계(메타데이터 제거), 4단계(egress 로깅)에서 방어와 마주칩니다. 어떤 단일 방어도 완전하지 않습니다. 그러나 함께 작동하면 공격 표면이 “인터넷의 모든 URL”에서 “메타데이터가 살균되고 egress가 로깅되는 승인된 12개 도메인”으로 줄어듭니다.

URL 허용 목록이 가장 가치가 높은 변경입니다. 허용 목록 이전에는 제 에이전트가 인터넷의 어떤 URL이든 가져올 수 있었습니다. 이후에는 제가 추가를 명시적으로 승인하지 않는 한 12개 도메인에서만 가져옵니다. 이 제약에는 부차적 이점이 있습니다. 모든 도메인 승인이 감사 가능한 결정을 만든다는 것입니다. 지금부터 석 달 뒤에 허용 목록을 검토하면, 각 항목은 타임스탬프와 맥락을 갖춘 의도적 선택을 나타냅니다. 허용 목록은 단순한 보안 통제가 아닙니다. 허용 목록은 에이전트 시스템이 어떤 외부 의존성에 의존하는지에 대한 기록이기도 합니다.

메타데이터 제거가 가장 취약한 변경입니다. (메타데이터가 아니라) 페이지 본문에 명령을 삽입하는 적대자는 이 방어를 완전히 우회합니다. trafilatura는 본문을 포함하는 기사 텍스트를 추출합니다. 기사 본문에 충분히 교묘하게 주입된 내용은 정당한 콘텐츠와 구별되지 않습니다. 이 방어는 시간을 벌어 줄 뿐(현재의 공격 대부분은 메타데이터를 노립니다. 주입이 사람 독자에게 보이지 않기 때문입니다) 비정형 텍스트에서 데이터와 명령을 구별하는 근본 문제를 해결하지는 못합니다.1


더 큰 그림

웹 접근 권한을 가진 모든 에이전트는 silent egress 위험을 안고 있습니다. 이 공격에는 특별한 tool도, 익스플로잇도, 취약점도 필요 없습니다. 정교하게 만든 <title> 태그를 가진 정적 HTML 페이지 하나면 충분합니다. 공격자는 어떤 에이전트가 그 페이지를 언제 가져올지 알 필요가 없습니다. 독성 데이터는 어떤 에이전트가 그것을 검색할 때까지 잠복해 있습니다.

OWASP Top 10 for Agentic Applications는 Agent Goal Hijacking(ASI01)을 최상위 위험으로 지목합니다.9 silent egress는 그 구체적 사례입니다. 적대적 메타데이터가 에이전트의 목표를 “페이지를 리서치하라”에서 “런타임 컨텍스트를 유출하라”로 가로챕니다. 이 가로채기가 성공하는 이유는, 운영자의 의도와 적대자의 명령이 일단 둘 다 컨텍스트 윈도에 들어오면 에이전트가 그 둘을 구별하지 못하기 때문입니다.

제가 앞서 설명한 fabrication firewall은 출력 경계를 다룹니다. 에이전트가 검증되지 않은 주장을 외부 플랫폼에 게시하는 것을 막는 것입니다.7 silent egress는 입력 경계를 다룹니다. 적대적 콘텐츠가 일상적 작업을 통해 에이전트 컨텍스트로 들어오는 것을 막는 것입니다. 이 두 공격은 거울상입니다. fabrication은 에이전트의 내부 상태와 외부 게시 사이의 격차를 악용합니다. silent egress는 외부 콘텐츠와 에이전트의 내부 처리 사이의 격차를 악용합니다. 완전한 에이전트 보안 태세는 두 경계를 모두 다룹니다.

연구 커뮤니티는 여러 방향에서 동일한 결론으로 수렴하고 있습니다. AgentSentry(Wang et al., 2026)는 에이전트가 외부 콘텐츠를 처리한 후 행동이 변하는 시점을 탐지하기 위해 시간적 인과 진단을 제안합니다.10 OWASP LLM Top 10(2025)은 동일한 입력 경계 위협 모델을 공유하는 RAG 오염 공격을 겨냥하여 Vector and Embedding Weaknesses를 새 항목으로 추가했습니다.9 OpenGuard의 브라우저 에이전트 prompt 주입에 대한 체계적 분석은, Anthropic의 Operator가 능동적 완화책에도 불구하고 31개 테스트 시나리오에서 23%의 주입 성공률을 기록했으며, 지속 메모리를 가진 에이전트는 이상적 조건에서 95%를 초과하는 주입 성공률을 보였음을 발견했습니다.13 hook 기반 방어를 구축하는 실무자와 동료 심사 공격 입증을 발표하는 연구자는 동일한 문제를 양 끝에서 풀고 있습니다.

이 수렴이 중요한 이유는 그것이 위협 모델을 입증하기 때문입니다. 논문 한 편은 학술적 연습이라며 일축당하기 쉽습니다. 여러 독립적 집단이 서로 다른 출발점에서(프로덕션 사고를 다룬 실무자, 통제된 실험을 한 보안 연구자, 위협 분석을 한 표준화 기구) 동일한 결론에 도달했다는 것은 실재하며 충분히 다뤄지지 않은 위험 표면을 가리킵니다.

Clinejection 공격(2026년 3월)은 프로덕션 공급망에서 조합 격차를 입증했습니다. 한 연구자가 GitHub 이슈 제목에 적대적 텍스트를 주입하여 Cline의 프로덕션 릴리스를 침해했습니다. 주입된 제목은 Cline의 자동화된 CI 파이프라인을 발동시켰고, 이 파이프라인은 npm preinstall 스크립트를 실행하여 빌드 캐시를 오염시키고 교차 워크플로 아티팩트를 오염시켰습니다. 그 결과 실제 [email protected] npm 패키지가 침해되었습니다. 체인의 각 단계는 인가된 범위 안에서 작동했습니다. 인가된 단계들의 조합이 공급망 공격을 만들어 냈습니다.11

tool 수준 권한과 조합 수준 동작 사이의 격차는 동적 tool 연결을 허용하는 모든 에이전트 프레임워크에 존재합니다. silent egress는 그 격차가 에이전트 수준에서 악용된 최초의 동료 심사 입증입니다. Clinejection은 동일한 격차가 CI/CD 수준에서 악용된 것을 입증합니다. LiteLLM 공급망 공격(2026년 3월)은 그것을 패키지 수준에서 입증했습니다. 공격자가 PyPI 관리자 계정을 침해하고 모든 Python 시작 시 실행되는 .pth 파일이 포함된 버전들을 게시하여 SSH 키, 클라우드 자격 증명, CI/CD 비밀을 공격자가 통제하는 도메인으로 유출했습니다. 이 악성 버전들은 제거되기 전까지 Microsoft GraphRAG를 포함한 하위 프로젝트에 영향을 미쳤습니다.14 근본 취약점은 개별적으로 인가된 구성 요소들이 인가되지 않은 동작으로 조합되는 모든 시스템에 적용됩니다.

최소한의 실행 가능한 방어는 URL 허용 목록과 egress 로그입니다. 거기서 시작하세요.


핵심 요약

보안 팀을 위해: silent egress는 출력 기반 안전 검사를 완전히 우회합니다. 에이전트 모니터링이 텍스트 출력만이 아니라 네트워크 동작을 검사하는지 평가하세요. tool 호출 수준의 도메인 허용 목록은 가장 흔한 유출 경로를 차단합니다.

AI 개발자를 위해: 모든 URL 가져오기를 신뢰할 수 없는 입력 경계로 취급하세요. 가져온 콘텐츠를 에이전트 컨텍스트에 주입하기 전에 HTML 메타데이터를 제거하세요. 사후 포렌식을 위해 모든 외부 요청을 목적지, 메서드, 응답 코드와 함께 로깅하세요.

엔지니어링 관리자를 위해: 에이전트 도구가 tool 수준만이 아니라 skill 조합 수준에서 권한 부여를 적용하는지 물어보세요. 개별적으로 안전한 세 tool이 유출 파이프라인으로 조합될 수 있습니다. tool 권한과 조합 동작 사이의 격차는 구조적 위험입니다.


FAQ

silent egress란 무엇인가요? silent egress는 웹 페이지 메타데이터(제목, 설명, Open Graph 태그)에 삽입된 적대적 명령이 LLM 에이전트를 유도하여 민감한 런타임 컨텍스트를 외부 HTTP 요청으로 유출하게 만드는 공격으로, 에이전트의 가시적 출력에는 아무런 징후도 나타나지 않습니다.1

암묵적 prompt 주입은 직접 prompt 주입과 어떻게 다른가요? 직접 prompt 주입은 적대적 텍스트를 사용자의 prompt에 넣습니다. 암묵적 prompt 주입은 적대적 텍스트를 에이전트가 자동으로 검색하는 콘텐츠(웹 페이지, API 응답, 문서)에 넣습니다. 사용자는 주입된 명령을 결코 보지 못합니다.1

skill 수준 권한 부여란 무엇인가요? skill 수준 권한 부여는 개별 tool 수준이 아니라 여러 tool이 함께 연결되는 조합 경계에서 접근 통제를 적용합니다. web-fetch tool과 HTTP-request tool은 개별적으로는 둘 다 안전합니다. 조합되면 유출 파이프라인을 만들어 낼 수 있습니다.2

mcp-firewall이 silent egress를 막나요? mcp-firewall은 에이전트가 접근하는 도메인과 허용되는 tool 호출을 제한하여 공격 표면을 줄일 수 있습니다. 메타데이터 살균 및 egress 로깅과 결합하면 silent egress 공격 체인의 핵심 벡터들을 다룹니다.5

출력 콘텐츠 필터가 silent egress를 탐지할 수 있나요? 아니요. 출력 콘텐츠 필터는 사용자에게 보내는 에이전트의 가시적 응답을 살핍니다. silent egress는 에이전트의 출력에 결코 나타나지 않는 부채널(외부 HTTP 요청)을 통해 데이터를 유출합니다. 에이전트의 가시적 응답은 깔끔하고 유용합니다. 콘텐츠 필터, 거부 분류기, 출력 안전 검사가 모두 통과하는 이유는 이 공격이 출력을 완전히 우회하기 때문입니다.1

샤딩 유출이란 무엇인가요? 샤딩 유출은 민감한 데이터를 여러 endpoint로 보내는 다수의 외부 요청으로 분할합니다. 완전한 API 키를 한 번의 요청으로 보내는 대신, 에이전트는 조각들을 서로 다른 공격자 통제 서버로 보냅니다. 이 기법은 단일 요청 누출 지표를 73% 줄이고, 개별 요청에서 완전한 비밀 패턴을 스캔하는 데이터 손실 방지 시스템을 무력화합니다.1


출처


  1. Lan, Qianlong, Anuj Kaul, Shaun Jones, and Stephanie Westrum, “Silent Egress: When Implicit Prompt Injection Makes LLM Agents Leak Without a Trace,” arXiv:2602.22450, 2026년 2월. 480회 실험 실행, 89% 공격 성공률, 95% 출력 안전 검사 회피. 

  2. Jiang, Yanna, Delong Li, Hai Deng, Baihe Ma, and Xu Wang, “SoK: Agentic Skills — Beyond Tool Use in LLM Agents,” arXiv:2602.20867, 2026년 2월. 7단계 skill 수명 주기, 조합 수준 보안 분석. 

  3. 저자의 웹 콘텐츠 추출 라이브러리. trafilatura 2.0.0, HTML 메타데이터 제거, 25개 테스트, 2026년 2월. 

  4. Crosley, Blake, “The Invisible Agent: Why You Can’t Govern What You Can’t See,” blakecrosley.com, 2026년 3월. 

  5. dzervas, “mcp-firewall,” GitHub, 2026. JSONNet 정책 구성을 갖춘 Go 바이너리, 도메인 범위 허용 규칙. 

  6. melonattacker, “Logira: eBPF runtime auditing for AI agent runs,” GitHub, 2026. Linux 5.8+, syscall 수준 네트워크 egress 추적. 

  7. Crosley, Blake, “The Fabrication Firewall: When Your Agent Publishes Lies,” blakecrosley.com, 2026년 2월. 

  8. 저자의 프로덕션 hook 수정. URL 허용 목록(12개 도메인), 메타데이터 제거, egress 로깅 2026년 3월 추가. 

  9. OWASP Top 10 for Agentic Applications, OWASP GenAI Security Project, 2025. ASI01: Agent Goal Hijacking. 

  10. Wang et al., “AgentSentry: Mitigating Indirect Prompt Injection in LLM Agents via Temporal Causal Diagnostics and Context Purification,” arXiv:2602.22724, 2026년 2월. 

  11. Khan, Adnan, via Simon Willison, “Clinejection: Compromising Cline’s production releases,” simonwillison.net, 2026년 3월. 이슈 제목 주입, npm preinstall, 캐시 오염, 교차 워크플로 감염. 

  12. tomvault, “How Claude Code escapes its own denylist and sandbox,” ona.com, 2026년 3월. 경로 회피, 자기 주도적 샌드박스 비활성화, 동적 링커 우회. HN 34점. 

  13. everlier, “The Webpage Has Instructions. The Agent Has Your Credentials,” openguard.sh, 2026년 3월. 브라우저 에이전트, MCP tool 설명, 메모리 오염, 다중 에이전트 핸드오프에 걸친 체계적 prompt 주입 분석. HN 31점. 

  14. isfinne et al., “LiteLLM Supply Chain Attack: Malicious litellm_init.pth credential stealer,” GitHub Issue #24512, 2026년 3월 24일. 침해된 PyPI 관리자 계정, 모든 Python 시작 시 .pth 자동 실행, AES-256-CBC + RSA 유출. 하위 영향: Microsoft GraphRAG, jaseci, nanobot-ai. 

  15. “CVE-2026-12039,” National Vulnerability Database, 2026년 6월. Docker Sandboxes (sbx) 0.13.0부터 0.33.0 이전까지; CVSS 5.7(중간), Docker가 CNA로서 할당. HTTP/S 전용 egress 허용 목록이 DNS 해석에 적용되지 않습니다. 네트워크별 내장 DNS 서버가 네트워크가 인터넷에 연결될 때 질의된 이름을 무엇이든 호스트 리졸버로 전달하여, 구성된 허용 목록을 우회하는 DNS 은닉 채널 유출을 가능하게 합니다. 

  16. “CVE-2026-12539,” National Vulnerability Database, 2026년 6월. Docker Sandboxes (sbx) 0.14.0부터 0.33.0 이전까지; CVSS 5.7(중간). ICMP egress 차단이 네트워크 생성 시점에만 적용되고 Docker 데몬이 재시작될 때 디스크에서 재구축된 네트워크에는 다시 적용되지 않으므로, 재시작에도 살아남은 샌드박스가 임의의 호스트로 ICMP를 전달하여 구성된 허용 목록과 무관하게 ICMP 은닉 채널을 가능하게 합니다. 

관련 게시물

에이전트 샌드박스는 제안일 뿐입니다

한 공격자가 GitHub 이슈를 열고 Cline의 다음 릴리스에 악성코드를 심었습니다. 에이전트 샌드박스는 세 가지 수준에서 실패합니다. 실제로 효과가 있는 방법을 소개합니다.

12 분 소요

에이전트가 취약점을 발견했을 때

Anthropic 연구원이 Claude Code과 10줄짜리 bash 스크립트로 23년 된 Linux 커널 취약점을 찾아냈습니다. 뒤이어 22개의 Firefox CVE가 공개됐습니다.

6 분 소요

AI 에이전트는 당신이 읽을 수 있는 것보다 빠르게 코드를 작성합니다

이번 주 다섯 개의 연구 그룹이 동일한 문제에 대해 발표했습니다: AI 에이전트는 개발자가 이해할 수 있는 것보다 빠르게 코드를 생산합니다. 부채는 당신의 머릿속에 있습니다.

15 분 소요