가장 많은 악성 패키지가 npm에서 발견되었습니다. postinstall 훅을 악용해 패키지 설치 시점에 곧바로 크리덴셜 탈취 스크립트를 실행합니다. 핵심 페이로드는 약 1,149줄 규모의 trap-core.js 스크립트로, 감염된 환경을 체계적으로 스캔하여 인증 정보를 공격자 제어 서버로 유출합니다 .
러스트 생태계의 메인 레지스트리에서 악성 패키지는 build.rs 스크립트를 남용해 빌드 프로세스 중에 크리덴셜 유출 코드를 실행했습니다. 패키지 본래 기능이 사용되기도 전에 공격이 발생합니다 .
이 패키지들은 token-usage-tracker, prompt-engineering-toolkit, eth-wallet-security-auditor 같은 이름으로 위장해 해당 분야 개발자라면 충분히 쓸 만한 도구처럼 보이도록 꾸며져 있었습니다 .
TrapDoor 페이로드는 광범위한 고가치 정보를 수집합니다. Socket의 분석에 따르면, 멀웨어는 지갑 파일 및 키 저장소, SSH 프라이빗 키, GitHub 개인 접근 토큰(Personal Access Token), AWS 크리덴셜, API 키가 저장된 환경 변수, 브라우저 저장 크리덴셜 등을 수집 대상으로 삼습니다 .
보고서에서 구체적으로 언급된 지갑 대상으로는 MetaMask 및 Phantom 브라우저 확장 데이터가 포함됩니다 . 특히 GitHub 토큰 탈취는 공격자가 프라이빗 소스 코드 저장소에 접근하거나, CI/CD 파이프라인에 악성 코드를 주입하거나, 탈취한 개발자 계정을 통해 내부 시스템으로 측면 이동할 수 있는 통로가 될 수 있어 더욱 위험합니다
.
Socket의 조사에 따르면, 암호화폐, DeFi, 솔라나(Solana), 수이(Sui) 블록체인, AI 분야 개발자들이 1차 목표입니다 . 지갑 보안 감사, 트랜잭션 모니터링, 스마트 컨트랙트 개발, AI 컨텍스트 도구 등 해당 커뮤니티에서 자주 찾을 법한 주제로 패키지명이 작명되었습니다.
공격자는 이 생태계에서 활동하는 개발자들이 상당한 자산 규모의 지갑 키를 보유하고 있고, 클라우드 인프라 접근 권한을 가지며, 개발 도구 전반에 걸쳐 높은 권한을 갖고 있다는 사실을 잘 알고 있었습니다. 한 대의 개발자 워크스테이션만 감염되면 막대한 금전적·운영적 피해로 이어질 수 있습니다 .
TrapDoor에서 기술적으로 가장 참신한 부분은 AI 코딩 도우미의 신뢰 경계를 악용한 지점입니다. 멀웨어는 .cursorrules 및 CLAUDE.md 파일을 변조하거나 새로 심습니다. 이 파일들은 개발자가 Cursor나 Claude Code 같은 AI 코딩 도구에 프로젝트별 지시 사항을 전달하는 용도로 흔히 사용됩니다 .
공격자는 이 파일들 안에 제로 폭 유니코드 문자(U+200B, U+200C, U+FEFF) 를 이용해 사람 눈에 보이지 않는 숨겨진 명령을 삽입합니다. 일반 텍스트 편집기나 코드 리뷰 과정에서는 이 문자가 전혀 보이지 않기 때문에 개발자는 이상한 점을 알아차리지 못합니다 . 그러나 AI 도구들은 유니코드 전체를 파싱하여 이 숨겨진 지시 사항을 읽고 정상적인 명령으로 받아들여, 개발자도 모르는 사이에 크리덴셜 탈취 워크플로우를 실행하거나 소스 코드를 유출하는 등 심각한 작업을 수행할 수 있습니다
.
이는 2단계 침해를 의미합니다. 패키지가 1차로 개발 환경을 오염시키고, 감염된 AI 설정 파일이 2차로 개발자의 AI 도구를 무기화하여 추가 피해를 발생시키는 구조입니다. 관련 연구에서도 Claude Code와 GitHub Copilot을 비롯한 프로덕션 AI 에이전트가 에이전트 스킬 파일에 숨겨진 유니코드 지시 사항을 그대로 실행할 수 있다는 사실이 확인된 바 있습니다 .
Socket의 탐지 인프라는 TrapDoor의 새 릴리즈를 중간값 5분 27초 만에 식별했으며, 가장 빨리 탐지한 사례는 58초에 불과했습니다 . 이러한 빠른 식별 덕분에 연구원들은 산발적으로 보이던 악성 패키지 업로드를 불과 48시간 만에 하나의 조직적인 캠페인으로 연결 지을 수 있었습니다
.
만약 여러분이나 팀이 이 패키지를 설치한 적이 있다면, 즉시 다음 조치를 취하시기 바랍니다.
암호화폐 지갑 시드 구문을 재생성하고 자금을 새 지갑으로 옮기세요. AWS IAM 키, GitHub 개인 접근 토큰, SSH 키 페어, 환경 변수에 저장된 API 토큰을 전면 교체해야 합니다 . CI/CD 통합용 OAuth 토큰도 폐기하세요.
npm auditpip listCargo.lock 파일을 확인해 보고서에 언급된 34개 악성 패키지명이 포함되어 있는지 살펴보세요 . Git 히스토리 내 잠금 파일에서 해당 패키지명을 검색하고, 발견 즉시 제거한 뒤 클린 설치를 진행하세요.
~/.bashrc, ~/.zshrc, ~/.profile, ~/.config/fish/config.fish 파일에 의심스러운 앨리어스나 주석 처리되지 않은 curl 및 wget 명령이 없는지 검사하세요. 영구적 접근 통로를 만드는 악성 명령이 숨어 있을 수 있습니다 .
모든 저장소의 .git/hooks/ 디렉터리에서 무단으로 등록된 pre-commit, post-commit, pre-push 훅을 확인하세요. GitHub 토큰이 탈취되면 사용자 계정 수준에서 저장소가 손상될 가능성이 높습니다 .
.github/workflows/ 아래에 예상치 못한 워크플로우 파일, 의심스러운 curl/wget 스텝, 무단 써드파티 액션이 없는지 확인하세요. Actions 실행 로그에서 비정상적인 외부 네트워크 요청 기록도 살펴보세요.
모든 프로젝트에 대해 .cursorrules 및 CLAUDE.md 파일에 제로 폭 유니코드 문자가 있는지 검색하세요. 보이지 않는 문자를 찾는 grep 명령어는 다음과 같습니다.
grep -P '[\x{200B}-\x{200F}\x{2028}-\x{202F}\x{FEFF}]' .cursorrules CLAUDE.md크론 잡(crontab -l~/.config/systemd/user/), macOS의 LaunchAgents(~/Library/LaunchAgents/) 등에서 악의적인 등록 항목이 있는지 확인하세요 .
Comments
0 comments