CanisterWorm: Trivy 공격 이후 npm 공급망 자가 전파 웜
공격자들은 Trivy 침해에 이어 CanisterWorm 웜을 배포해 수십 개의 npm 패키지를 감염시켰습니다. 이 맬웨어는 Internet Computer 블록체인의 ICP canister를 이용해 탄력적인 C2 서버를 구축합니다. 이는 페이로드 수신을 위한 ICP의 첫 번째 문서화된 악용 사례로, 분산화된 구조 덕분에 takedown이 어렵습니다.
감염 및 전파 메커니즘
공격 체인은 손상된 패키지의 postinstall 훅에서 시작됩니다. 이 훅은 Python 백도어를 설치하는 로더를 실행합니다. 백도어는 ICP canister에 연결해 다음 페이로드의 URL을 가져옵니다.
ICP canister는 get_latest_link, http_request, update_link 메서드를 구현합니다. 후자는 컨트롤러가 실시간으로 URL을 변경할 수 있게 해 모든 감염 호스트의 실행 파일을 중단 없이 업데이트합니다.
백도어는 가짜 User-Agent를 사용해 50분마다 canister를 폴링합니다. URL에 youtube.com이 포함되면 임플란트가 휴면 상태로 전환됩니다. 활성화는 실제 페이로드로 전환하며, 기존 프로세스는 병렬로 계속 실행됩니다.
시스템d 서비스 "pgmon"으로 지속성을 확보하며, PostgreSQL 모니터링으로 위장합니다. Restart=always 지시어로 종료 후 5초 만에 백도어를 재시작합니다.
영향 받은 패키지:
- @EmilGroup 스코프 내 28개;
- @opengov 스코프 내 16개;
- @teale.io/eslint-config;
- @airtm/uuid-base32;
- @pypestream/floating-ui-dom.
Socket은 66개 이상의 고유 패키지에서 141개의 악성 아티팩트를 탐지했습니다.
CanisterWorm의 완전 자동화 진화
@teale.io/eslint-config 1.8.11~1.8.12 버전에서 변종이 등장해 index.js에 npm 토큰 탈취를 통합했습니다. findNpmTokens() 함수는 postinstall 중 환경을 스캔하고 self-propagation을 위해 deploy.js를 백그라운드 프로세스로 실행합니다.
Deploy.js는 훔친 토큰으로 접근 가능한 모든 패키지에 악성 버전을 게시합니다. Vibe 기술을 사용한 AI 생성으로 추정되는 이 웜은 코드를 난독화하지 않습니다.
ICP의 현재 페이로드는 테스트 문자열 "hello123"로, 전체 공격 전 체인 검증 단계로 보입니다.
유사한 youtube.com 체크 메커니즘은 sysmon.py를 통해 trojanized된 Trivy 0.69.4에서도 발견되었으며, 동일한 ICP canister를 참조합니다.
이전 캠페인과의 비교
CanisterWorm은 Shai-Hulud(9월) 패턴을 따릅니다: tinycolor 침해가 40개 이상 패키지로 확산된 후, 웜이 NpmModule.updatePackage와 TruffleHog(자격 증명 검증)을 통해 300개 이상을 감염시켰습니다.
Sha1-Hulud(11월)는 25,000개 이상 저장소를 영향: preinstall 스크립트 setup_bun.js가 Bun 환경을 감지해 bun_environment.js로 데이터 탈취를 실행했습니다.
| Campaign | Affected Packages | Propagation Mechanism | Theft Tools |
|-------------|-------------------|-----------------------------------|------------------|
| Shai-Hulud | 300+ | NpmModule.updatePackage | TruffleHog |
| Sha1-Hulud | 25,000+ | preinstall/setup_bun.js | bun_environment |
| CanisterWorm| 66+ | postinstall/deploy.js + ICP C2 | findNpmTokens |
핵심 요점
- ICP canister의 최초 C2 활용: 분산화로 takedown이 어렵습니다.
- 자동 전파: 토큰 탈취 + deploy.js로 설치가 CI/CD 및 개발 머신 감염 벡터로 전환됩니다.
- 탄력성: Restart=always가 적용된 systemd + 병렬 프로세스 + 동적 update_link.
- 위장: pgmon으로 위장된 서비스, youtube.com 시 휴면 모드.
- 규모: Trivy에서 141개 아티팩트로 확대; 수동 배포 없이 완전 자동화로 진화.
Aikido Security, Endor Labs, JFrog, Wiz 등의 기업이 확인: npm 생태계에서 단일 침해에서 지수적 웜 행태로의 전환을 나타냅니다.
— Editorial Team
아직 댓글이 없습니다.