에이전트 승인 스스로 누른 포스트맨, README는 어떻게 명령이 됐나

클로드코드·코덱스의 승인 장치는 설정 파일 한 줄이었고, 악성 저장소는 검색 결과 맨 위에 있었다

GitHub README 파일 속 숨겨진 프롬프트 인젝션 명령문과 클로드코드 자동 승인 실행 화면
AI 생성 이미지
핵심 요약 AI 요약
1
README 원격 실행:가짜 솔라나 스타터 키트의 README는 원격 파워셸 스크립트를 메모리에서 실행해 공격자 설정이 담긴 원격 지원 프로그램을 설치하도록 안내했다.
2
에이전트 감염 미확인:AIR는 에이전트가 해당 명령을 실행했다는 시험 결과나 실제 감염·지갑 탈취 사례를 제시하지 않았다.
3
포스트맨 훅 자동 설치:포스트맨 데스크톱 업데이트는 코덱스 훅을 자동 승인하고 플러그인을 설치했으며, 포스트맨은 11월 5일 이 변경을 되돌린다고 밝혔다.
4
설정 파일 승인 한계:코덱스의 훅 신뢰 기록은 쓰기 권한이 있는 프로그램이 설정 파일에 적을 수 있어, 승인 화면을 거치지 않고도 훅이 실행될 수 있음이 실험에서 확인됐다.
5
인젝션 성공률 격차:README에 숨긴 지시로 비밀 파일 유출이 최대 85% 성공한 실험이 있는 반면, 실제 웹페이지의 숨은 지시를 에이전트가 따른 비율은 입력 조건에 따라 0.2~1.1%로 측정됐다.
기사 목차 펼치기 / 접기

개발자가 AI에게 솔라나 프로젝트를 하나 만들어 달라고 시킨다. AI는 검색 결과 맨 위에 뜬 ‘솔라나 스타터 키트’ 저장소를 골라 설치 명령 한 줄을 실행한다. 그 한 줄이 원격 조종 프로그램을 깐다.

보안업체 AIR가 10월 29일 공개한 보고서가 그린 시나리오다. 같은 주에는 정상 기업의 설치 프로그램이 AI의 승인 단계를 스스로 건너뛴 사실이 드러났다. API 개발 도구 회사 포스트맨(Postman)이다.

코딩 에이전트의 3대 입력 경로와 실행 구조

명령 창에서 직접 명령을 실행하는 AI 코딩 도구를 코딩 에이전트라고 부른다. 채팅으로 답만 하지 않고, 컴퓨터에 글자로 명령을 내리는 창인 터미널(terminal)에서 파일을 만들고 프로그램을 깐다. 앤트로픽의 클로드코드(Claude Code)와 오픈AI의 코덱스(Codex)가 대표적이다.

에이전트가 읽는 글은 세 갈래다. 첫째는 일하다 찾아 읽는 웹 검색 결과와 저장소 첫 화면에 뜨는 사용 설명서인 README다. 둘째는 세션을 열 때마다 자동으로 들어오는 상시 지시다. 여기에는 정해진 순간마다 자동으로 실행되는 명령인 훅(hook), 에이전트에 기능과 지시를 덧붙이는 확장 묶음인 플러그인·스킬이 든다. 셋째가 사용자가 직접 준 지시다.

사람이 눈으로 확인하는 것은 대개 셋째뿐이다. README는 조립 설명서인데, 사람은 훑어보지만 에이전트는 한 줄씩 따라 조립한다. 세션 시작 훅은 출근할 때마다 책상에 놓이는 공지문과 같다.

이번 두 사건은 이 통로를 지났다. 에이전트가 읽는 글은 명령이 됐고, 그 명령을 거르는 장치는 설정 파일 몇 줄이었다.

가짜 솔라나 스타터 키트의 메모리 실행 구조

AIR 연구진 엘리아드 무알렘(Eliad Mualem)과 도르 그라낫(Dor Granat)은 ‘SolanaUpdateTools/solana-starter-kit’ 저장소를 추적했다. 2025년 11월에 만들어졌고, 별 286개를 받았다. 소개 문구는 솔라나 앱을 바로 만들 수 있는 오픈소스 템플릿이었지만, 코드는 없고 README만 있었다.

설치 단계는 윈도의 명령 실행 도구인 파워셸(PowerShell) 명령 한 줄이다. 단어 조각 넷을 이어 붙여 내려받을 주소를 만들고, 받은 스크립트는 파일을 디스크에 남기지 않고 메모리에서 바로 돌린다. 아래는 구조만 옮기고 주소를 무력화한 것이다.

# 구조만 옮겼다. 주소는 실행되지 않도록 무력화했다
$update='developer'; $mode='-upd'; $key='ate'; $file='indicator'
# 조각을 이으면 developer-update[.]app/update/indicator
# 이 주소의 스크립트를 내려받아(iwr) 저장 없이 바로 실행한다(iex)

AIR에 따르면 이 주소가 내려주는 파일은 21MB짜리 파워셸 스크립트다. AIR가 확인했을 때 주소는 이미 닫혀 있었고, 연구진은 웹 아카이브(Web Archive) 보관본으로 파일을 되살렸다. 스크립트는 숨김 폴더에 파일 14개를 푼다. 13개는 정품 원격 지원 프로그램 넷서포트 매니저(NetSupport Manager) 12.10의 구성 파일이고, 나머지 하나가 공격자의 설정 파일이다.

설정 파일은 감염 기기에 명령을 내리는 공격자 서버(C2)로 maxwintodaybtc[.]com을 지정한다. 화면의 채팅·연결 해제 버튼을 끄고, 아무 주소에서나 접속을 받으며 60초마다 서버에 신호를 보낸다. 로그인할 때마다 켜지도록 ‘SecureModule’이라는 실행 키를 심고, 실행 기록과 설치 스크립트는 지운다.

정품 원격 지원 프로그램을 깔되 조종 권한만 공격자 손에 넘겨준 구조다.

배후 단서도 나왔다. AIR는 설정 파일의 비밀값이, 보안업체 eSentire가 추적하는 넷서포트 유포 조직 EVALUSION의 식별값과 같다고 밝혔다. 보안업체 Fortian이 2025년 10월 보고한 캠페인과도 명령 구조가 변수 이름까지 같았다. 가짜 트레이딩뷰(TradingView) ‘AI 시그널’ 영상으로 트레이더를 노린 캠페인이다. 주소는 2025년 10월 20일 등록됐고, 페이로드 보관본은 11월 22일 날짜다.

지갑이 깔린 개발자 PC라면 기기 전체가 원격으로 넘어가지만, AIR 보고서에 실제로 지갑을 털린 사례는 없다.

에이전트 표적 공격 여부와 검색 결과의 맹점

해외 보안 매체 핵리드(Hackread)는 가짜 저장소가 AI 코딩 에이전트를 속였다는 제목으로 이 사건을 전했다. 하지만 AIR 원문의 README 내용에는 에이전트를 부르는 문구가 없다. 사람이 따라 해도 똑같이 감염되는 평범한 설치 한 줄이다.

시점도 맞지 않는다. 내려받을 주소는 AIR가 확인할 때 이미 닫혀 있었고, 본지가 6일 확인한 저장소도 열리지 않았다. AIR는 실제 에이전트로 돌려 본 결과나 감염 피해를 내놓지 않았고, ‘검색 결과 맨 위’라는 조건의 검색어와 시점도 원문에 적지 않았다. AIR가 AI 에이전트 보안 제품을 파는 회사라는 점도 함께 볼 대목이다. 오래된 미끼를 새 낚시터에 다시 던진 쪽에 가깝다.

그래도 AIR가 짚은 구조는 남는다. AIR는 10월 23일 공개한 측정 「웹 홀(Web Hole)」에서 검색어 약 2000개로 사이트 약 6500곳을 훑었다. 주인이 사라져 누구나 새로 등록할 수 있는 도메인인데도, 검색 결과에 그대로 남은 곳이 36개였다. 에이전트가 맨 위 결과를 믿는 한, 그 자리의 주인은 언제든 바뀔 수 있다.

확인된 것은 에이전트가 걸릴 수 있는 구조까지다.

포스트맨 설치기의 코덱스 훅 자체 승인 경과

두 번째 사건은 기록이 훨씬 두껍다.

10월 21일 포스트맨 플러그인 저장소에 코덱스 훅을 자동 승인하는 커밋이 들어갔다. 제목은 “포스트맨 코덱스 훅 자동 승인(auto-approve Postman’s Codex hook)”이다. 같은 작업 묶음 안에는 “코덱스 훅 사용 동의 묻기(ask for Codex hook consent)” 커밋이 먼저 있다. 자동 승인 커밋은 그 뒤에 이어진다. 여러 하위 커밋에는 클로드가 함께 작성했다는 표기가 붙어 있다.

이유는 커밋 설명에 적혀 있다. 코덱스는 0.164부터 플러그인 파일이 바뀔 때마다 사용자에게 승인을 다시 묻는다. 매번 신분증을 내미는 게 번거로워 출입 명부에 이름을 미리 적어 둔 방문객이다.

10월 24일 한 개발자의 맥에서 포스트맨 데스크톱 12.33.4가 업데이트되자, 클로드코드·코덱스용 포스트맨 플러그인과 명령줄 도구가 묻지 않고 함께 깔렸다. 에이전트가 외부 서비스를 부르게 해 주는 연결 창구인 원격 MCP 서버도 등록됐다. 설치 기록에는 기존 사용자에게 자동으로 깔았다는 뜻의 ‘auto-existing-upgrade’가 찍혔다.

깔린 훅은 세션이 열릴 때마다 에이전트에게 같은 문장을 건넨다. 플러그인 저장소의 훅 원문은 ‘EXTREMELY_IMPORTANT’라는 표시로 시작한다. 훅은 에이전트에게 사소하지 않은 API 작업이면 “postman:api-engineer 스킬부터 불러 따르라(load the postman:api-engineer skill and follow it)”고 지시한다.

이 일을 처음 알린 이슈 #14370은 10월 25일 올라왔다. 포스트맨 제품 책임자는 11월 3일 기술 매체 런타임와이어(RuntimeWire)에 사용자 동의 절차를 더 분명히 하겠다고 말했다. 포스트맨은 5일 이슈 댓글에서 “그동안 이 변경을 되돌린다(In the meantime, we are reverting this change)”고 밝혔다. 이어 창업자 아비나브 아스타나(Abhinav Asthana)의 계정이 이슈를 닫고 잠갔고, 그때까지 댓글 69개와 반응 623개가 붙었다.

남은 일도 있다. 이미 깔린 기계를 정리하겠다는 말은 없었다. 다만 데이터를 빼 갔다는 증거는 나오지 않았고, 다른 기계에서는 신뢰 기록이 생기지 않았다는 댓글도 있다.

선례도 있다. 깃크라켄(GitKraken) 데스크톱 12.0도 4월 클로드코드 훅을 고지나 거부 선택지 없이 설치했다가, 4월 18일 12.0.1에서 고쳤다. 이삿짐센터가 짐을 풀어 주며 열쇠 복사본까지 서랍에 넣어 둔 격이다.

신뢰 파일(config.toml)에 놓인 승인 장치의 한계

포스트맨 설치기가 이렇게 할 수 있었던 이유는 승인 기록이 놓인 자리다. 코덱스는 훅마다 신뢰 기록을 설정 파일(config.toml)에 남기는데, 이 기록을 계산하는 방법이 공개 소스에 있다. 파일을 쓸 권한만 있으면 어떤 프로그램이든 같은 기록을 계산해 적어 넣을 수 있다.

소프트웨어 엔지니어링 블로그 보코논(bokonon.ai)은 11월 3일 직접 시험한 분석 기록을 공개했다. 코덱스 0.162.1에서 텍스트 편집기로 신뢰 기록을 쓰자, 훅이 실행됐다. 클로드코드 2.1.302에서는 별도 신뢰 기록 없이, 설정 파일(settings.json)에 훅을 적는 것만으로 실행됐다. 개인 실험이고, 버전마다 동작이 다를 수 있다. 도장 대신 서명란에 이름만 적어도 통과되는 결재 서류다. 승인 화면은 사람에게 묻는 질문이지만, 그 답은 누구나 쓸 수 있는 파일에 적힌다.

“승인 화면은 사람에게 묻는 질문이지만, 그 답은 누구나 쓸 수 있는 파일에 적힌다.”

README 프롬프트 인젝션의 공격 성공률과 실증 데이터

위험의 크기는 연구마다 다르게 나온다. 독일 프라운호퍼 AISEC 등 여러 대학 연구진은 3월 동료 심사 전 사전 공개 논문(프리프린트) 「You Told Me to Do It」을 냈다. 연구진은 실제 README에 문서 속에 숨겨 AI에게 몰래 지시를 넣는 수법인 프롬프트 인젝션을 심었다. 클로드 3.7 소넷 기반 컴퓨터 유즈 에이전트에서는, 비밀 파일 유출이 최대 85% 성공했다. 조건마다 7회씩 돌린 결과다. 유럽 한 대학의 검토자 15명이 3건씩 본 45건에서, 숨은 지시를 찾아낸 경우는 한 건도 없었다.

반대 방향의 측정도 있다. 4월 공개된 웹 인젝션 실측 논문(「Indirect Prompt Injection in the Wild」)은 실제 웹 페이지 1만1700개에서 숨은 지시 1만5300건을 모았고, 약 70%는 화면에 보이지 않는 HTML 속에 있었다. 에이전트가 이 지시를 따른 비율은 최대 8%였고, 구조를 살린 입력에서는 0.2~1.1%였다.

두 결과가 갈린 지점은 에이전트가 그 글을 할 일로 받느냐다. 설치 안내문은 처음부터 할 일 목록이다. 길가의 전단은 지나쳐도, 상사가 준 업무 지시서는 따른다.

크립토 개발자를 노린 시도도 있었다. 보안업체 소켓(Socket)은 5월 TrapDoor 캠페인에서 악성 패키지 34개 이상이 지시 파일(CLAUDE.md·.cursorrules)에 보이지 않는 글자로 지시를 심으려 했다고 보고했다. 소켓도 이 방식은 아직 실험 단계로 봤다.

개발자 작업 환경의 4대 점검 경로

포스트맨 데스크톱을 쓰고 있다면 이슈 본문이 짚은 아래 네 곳을 본다.

~/.codex/config.toml # 포스트맨 훅의 신뢰 기록(hooks.state)
~/.claude/settings.json # 포스트맨 훅 항목
~/.claude/plugins/installed_plugins.json # 포스트맨 플러그인 항목
~/.local/bin/postman # 묻지 않고 깔린 명령줄 도구

에이전트를 쓴다면 원격 스크립트를 받아 바로 실행하는 명령(iwr·iex, curl | sh)은 자동 승인에서 빼고, 처음 보는 저장소의 설치 명령은 사람이 먼저 읽는다. 낯선 설명서의 첫 줄만큼은 사람 눈을 거쳐야 한다.

윈도에서는 AIR가 공개한 흔적인 %LOCALAPPDATA% 아래 ‘y2inwRnI6G’ 폴더와 ‘SecureModule’ 실행 키를 찾아본다.

원상 복구 조치 이후 남겨진 보안 과제

포스트맨은 자동 설치를 되돌린다고 했지만, 이미 플러그인과 훅이 깔린 기계를 어떻게 할지는 아직 말하지 않았다. 문을 지키는 장치가 문 옆 게시판에 붙어 있던 셈이다.

커밋 기록에는 동의를 묻는 단계가 먼저 들어갔다가 빠진 순서가 그대로 남아 있다.

자주 묻는 질문 (FAQ)
Q. 가짜 솔라나 키트로 실제 피해가 있었나
A.확인된 감염이나 지갑 탈취 보고는 없다. AIR가 확인했을 때 내려받을 주소는 이미 작동하지 않았고, 저장소도 지금은 열리지 않는다. 다만 같은 조직이 다른 미끼로 같은 수법을 써 왔다.
Q. 포스트맨 플러그인은 지금도 자동으로 깔리나
A.포스트맨은 11월 5일 자동 설치 변경을 되돌린다고 밝혔다. 이미 설치된 플러그인과 훅은 사용자가 직접 확인해 지워야 한다.
Q. 에이전트가 README 지시를 따르지 않게 할 수 있나
A.완전히 막는 설정은 아직 없다. 원격 스크립트를 내려받아 실행하는 명령을 자동 승인에서 빼고, 처음 쓰는 저장소의 설치 단계를 사람이 먼저 읽는 것이 지금 할 수 있는 방어다.

RELATED ARTICLES

RECOMMENDED STORIES