본문으로 건너뛰기

Coding Agent를 노리는 숨은 지시 탐지

unveil은 사람에게 숨겨진 프롬프트 인젝션과 에이전트 공격 신호를 찾아내는 Python 스캐너입니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

Coding Agent는 issue, README, 코드 주석을 지시문으로 읽기 때문에 HTML 주석, zero-width 문자, Bidi 제어문자, ANSI 시퀀스에 숨은 공격을 처리할 수 있습니다. 작성자는 이런 간접 프롬프트 인젝션을 찾는 의존성 없는 단일 파일 Python 스캐너 unveil을 만들었고, 발견 시 종료 코드 1을 반환하며 --json 옵션으로 CI에 연결할 수 있게 했습니다. 529개 agent bounty를 훑은 결과 73%가 허니팟이었고, React·CPython·Rust·VS Code·Linux·Electrum·Node·Kubernetes README 81KB 검사에서는 고위험 0건과 중위험 1건이 나왔습니다. 다만 패턴 기반 탐지라 새로운 표현을 놓칠 수 있고, 영어 규칙만 지원하며, 공격 문자열을 인용한 문서와 실제 공격을 구분하지 못하므로 sandbox를 대신하지는 않습니다.

실용적 조언

  • untrusted issue, PR description, README를 Coding Agent에 넣기 전에 unveil을 실행하고, exit code 1이 나오면 에이전트 입력으로 전달하기 전에 숨은 Unicode·markup·ANSI 요소를 사람이 확인하는 흐름을 CI에 추가할 수 있습니다.
  • AI를 향한 지시가 있다는 이유만으로 악성으로 처리하지 말고, 사람이 같은 내용을 볼 수 있는지와 숨은 텍스트가 system prompt·secret 재현을 요구하는지 분리해 판단해야 합니다.

섹션별 상세

01
Coding agents가 issue, README, 코드 주석을 지시문으로 읽는 구조 때문에 공격자는 사람이 잘 확인하지 않는 HTML 주석, zero-width 문자, Bidi override, ANSI erase sequence에 지시를 숨길 수 있습니다. 게시물은 529개 open agent bounty를 8월에 조사한 결과 73%가 허니팟이었으며, 화면에는 “research project, PRs won't be merged”라고 적고 숨은 주석에서는 system prompt 전체를 Pull Request에 붙여 넣으라고 했다고 전합니다. Cline compromise도 zero-width 문자와 RTL override 문자가 들어간 GitHub issue 제목 하나에서 시작한 사례로 제시됩니다.
02
작성자가 만든 unveil은 외부 의존성이 없는 단일 파일 Python 스캐너로, 악성 입력을 직접 읽는 도구가 다시 의존성 공격에 노출되지 않도록 구성했습니다. 스캐너는 zero-width 및 Unicode tag 문자, Bidi override, HTML comment와 display:none 영역, ANSI escape sequence, 자체 prompt나 secret 재현 요청을 찾고, 화면에 보이는 면책 문구와 숨은 지시가 충돌하는 허니팟 패턴도 검사합니다. 탐지 결과가 있으면 exit code 1을 반환하고 --json 옵션으로 CI 파이프라인에 연결할 수 있습니다.
03
false-positive 검사에서는 React, CPython, Rust, VS Code, Linux, Electrum, Node, Kubernetes README 81KB에서 고위험 결과가 0건, 중위험 결과가 1건 나왔습니다. 유일한 중위험 결과는 Linux kernel README가 LLM에게 contributor docs를 읽으라고 직접 말하는 부분으로, 텍스트가 숨겨지지 않아 악성 은닉으로 분류되지는 않았습니다. 이 사례는 AI를 향한 공개 지시 자체보다 사람에게 숨긴 은닉이 더 강한 위험 신호라는 판단 기준을 뒷받침합니다.
04
unveil은 패턴 기반 탐지기라 새로운 표현을 사용하는 공격을 놓칠 수 있고, Unicode와 markup 검사를 제외한 언어 규칙은 영어에 한정됩니다. 공격 문장을 인용한 README와 실제로 공격을 수행하는 문서를 구분하지 못해 자기 자신을 인용한 문서도 탐지 결과를 낼 수 있습니다. 따라서 이 도구는 untrusted input을 검사하는 방어 계층이지 sandbox를 대체하는 실행 격리 수단은 아닙니다.

이미지 분석

GitHub 저장소 henio828/unveil의 화면으로, 사람에게 숨겨졌지만 기계에는 전달되는 텍스트를 찾는 간접 프롬프트 인젝션 방어 스캐너라는 목적이 표시되어 있습니다.
Screenshot

이미지는 unveil 저장소의 이름과 “Find text that hides from humans but speaks to machines”라는 설명을 보여줍니다. 본문에서 제시한 untrusted content 검사 도구의 정체와 용도를 직접 확인하게 해 주지만, 탐지 결과나 구현 세부사항은 포함하지 않습니다.

GitHub 저장소 henio828/unveil의 화면으로, 사람에게 숨겨졌지만 기계에는 전달되는 텍스트를 찾는 간접 프롬프트 인젝션 방어 스캐너라는 목적이 표시되어 있습니다.

용어 해설

간접 프롬프트 인젝션(Indirect Prompt Injection)
사용자가 직접 입력한 프롬프트가 아니라 issue, README, 코드 주석처럼 에이전트가 읽는 외부 텍스트에 악성 지시를 심어 실행을 유도하는 공격입니다. 사람이 보는 내용과 에이전트가 처리하는 지시를 다르게 만들어 시스템 프롬프트나 비밀정보 유출을 노립니다.
제로 폭 문자(Zero-width Characters)
화면에 거의 나타나지 않는 Unicode 문자로, 사람이 읽는 문장 사이에 추가 지시나 데이터를 숨길 때 사용됩니다. unveil은 이러한 문자를 찾아내고 Unicode tag 문자에 인코딩된 숨은 payload를 디코딩해 사람이 확인할 수 있도록 합니다.
양방향 텍스트 재정렬 제어문자(Bidi Override)
왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽으로 읽는 순서를 바꾸는 Unicode 제어문자입니다. 소스에 표시되는 문자열의 순서를 사람이 예상하기 어렵게 만들 수 있어, 에이전트 공격에서 지시를 감추는 수단으로 쓰입니다.
ANSI 이스케이프 시퀀스(ANSI Escape Sequence)
터미널 출력의 색상이나 커서, 삭제 동작을 제어하는 문자 시퀀스입니다. 악성 텍스트에 포함되면 사람이 이미 본 내용을 화면에서 지우거나 덮어써 에이전트가 읽는 텍스트와 사람의 시각적 확인 결과를 다르게 만들 수 있습니다.
허니팟 패턴(Honeypot Signature)
사람에게는 연구용 저장소라며 Pull Request 병합이 없다고 알리면서, 숨은 텍스트에서는 에이전트에게 system prompt를 붙여 넣으라고 지시하는 식의 모순된 문장 조합입니다. 게시물은 529개 agent bounty 중 73%가 이런 허니팟이었다고 전합니다.

언급된 도구

unveil추천링크

issue, README, 코드 주석 등 untrusted content에 숨은 간접 프롬프트 인젝션과 허니팟 패턴을 검사하는 의존성 없는 단일 파일 Python 스캐너

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 09. 06.수집 2026. 09. 06.출처 타입 REDDIT

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.