
TrapDoor는 npm, PyPI, Crates.io에서 발견된 공급망 공격 캠페인이다. 확인된 악성 패키지는 34개, 영향 버전과 아티팩트는 384개 이상이다.1 표적은 암호화폐, DeFi, AI, 보안 개발자처럼 로컬 환경에 지갑 키, 클라우드 자격 증명, GitHub 토큰을 보관할 가능성이 큰 개발자들이다.
이 공격의 핵심은 단순히 “악성 패키지가 있었다”가 아니다. TrapDoor는 개발자가 평소 신뢰하는 자동 실행 지점과 AI 코딩 도구의 설정 파일을 함께 노렸다. 따라서 방어도 패키지 이름 확인을 넘어, 설치·빌드·import·AI 설정 파일까지 포함해야 한다.
TrapDoor는 정상 개발 흐름을 실행 경로로 썼다
TrapDoor는 각 패키지 생태계의 정상 기능을 악성 코드 실행 경로로 사용했다. 그래서 겉으로는 일반적인 설치나 빌드처럼 보이지만, 실제로는 그 순간 자격 증명 수집이 시작될 수 있다.
npm 변종은 설치 시 자동 실행되는 postinstall 훅으로 trap-core.js를 실행한다. 이 파일은 1,149줄짜리 자격 증명 수집기이며, AWS와 GitHub 토큰을 실제 API 호출로 검증해 만료된 키를 걸러낸다.1 단순히 파일을 훑는 수준이 아니라, 공격자가 바로 쓸 수 있는 자격 증명을 선별하는 구조다.
Crates.io 변종은 Rust 빌드 과정에서 자동 실행되는 build.rs를 악용했다. 로컬 키스토어를 찾은 뒤 cargo-build-helper-2026이라는 하드코딩된 XOR 키로 데이터를 암호화하고, 훔친 정보를 GitHub Gist로 전송한다.1
PyPI 변종은 import 시점에 node -e로 원격 JavaScript 페이로드를 가져와 실행한다.1 이 방식은 공격자에게 더 큰 유연성을 준다. 이미 게시된 패키지를 수정하지 않아도, 서버 쪽 페이로드만 바꾸면 동작을 바꿀 수 있기 때문이다.
더 중요한 변화는 AI 설정 파일이다
TrapDoor에서 특히 주목해야 할 부분은 CLAUDE.md와 .cursorrules다. Claude Code와 Cursor 같은 AI 코딩 도구는 저장소 안의 이런 파일을 읽고 프로젝트 작업 지침으로 사용한다.2 원래 목적은 빌드 명령, 코딩 규칙, 프로젝트 구조를 AI에게 알려주는 것이다.
문제는 이 파일들이 조작되면 AI 에이전트가 악성 지시를 “프로젝트 규칙”으로 받아들일 수 있다는 점이다. 보도된 사례에서는 공격자가 오픈소스 저장소에 조작된 CLAUDE.md와 .cursorrules를 포함한 풀 리퀘스트를 제출한 정황도 확인됐다.1
즉, 위험은 패키지를 설치할 때만 생기지 않는다. 저장소를 클론하고 AI 코딩 도구를 켜는 순간, 저장소 안의 지시문이 새로운 공격면이 될 수 있다. 개발 환경에서 “문서처럼 보이는 파일”도 실행 흐름에 영향을 줄 수 있게 된 것이다.
방어 기준은 의존성에서 개발 환경 전체로 넓어져야 한다
TrapDoor 이후에는 의존성만 검토해서는 부족하다. 새로 추가된 패키지뿐 아니라, 개발 도구가 자동으로 읽거나 실행하는 파일을 함께 봐야 한다.
특히 다음 항목은 코드 리뷰 대상처럼 다루는 편이 안전하다.
CLAUDE.md,.cursorrules같은 AI 코딩 도구 설정 파일postinstall등 패키지 설치 훅Rust의
build.rsGit hook, shell hook
cron, systemd 항목
최근 추가된 원격 페이로드 로딩 코드
의존성 관리에서는 lockfile을 고정하고, 새 패키지를 도입할 때는 이름만 보지 말고 게시자 이력과 릴리스 패턴을 확인해야 한다. 감염 가능성이 있다면 GitHub 토큰, AWS 키, SSH 키 같은 자격 증명은 회전하는 것이 안전하다.
TrapDoor가 보여준 결론은 분명하다. 공급망 공격은 더 이상 코드 라이브러리만 노리지 않는다. 개발자가 신뢰하는 자동 실행 지점과 AI 도구의 지시문까지 공격면이 됐다. 이제 저장소 안의 설정 파일도 코드와 같은 수준으로 검토해야 한다.
1Malicious Packages on npm, PyPI, and Crates.io Steal Crypto Wallets, SSH Keys, and Cloud Credentials
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.
