- Shai Hulud 2.0이 npm 생태계를 다시 공격하며 Zapier, ENS Domains, AsyncAPI, PostHog, Postman 등 주요 프로젝트의 패키지를 감염
- 악성코드는 설치 과정 중 자동 실행되어 개발자 시스템과 클라우드 환경의 비밀정보 탈취
- 감염된 시스템에서 TruffleHog를 이용해 API 키, 토큰, 비밀번호 등을 찾아 공개 GitHub 저장소에 업로드
- 이번 공격은 이전보다 확장되어 최대 100개 패키지 감염, 인증 실패 시 홈 디렉터리 파일 삭제 기능 포함
- npm 생태계의 신뢰 체계를 위협하는 대규모 공급망 공격으로, 모든 개발팀의 비밀정보 점검 및 교체 필요성 부각
Shai-Hulud 캠페인 개요
- Shai-Hulud는 npm 생태계에서 자가 복제되는 웜 형태의 악성코드로, 감염된 개발 환경을 통해 빠르게 확산
- 감염 시 TruffleHog를 사용해 API 키, 토큰 등 노출된 비밀정보를 검색
- 수집된 정보는 공개 GitHub 저장소로 전송되며, 이후 새로운 악성 패키지를 npm에 게시해 확산
- 공격자는 이번 공격을 “Second Coming” 이라 명명
- npm이 12월 9일 구형 토큰 폐기를 예고한 시점에 맞춰 공격이 재개됨
공격 타임라인
- 8월 27일: S1ngularity 캠페인 보고서 공개
- 9월 16일: 첫 번째 Shai-Hulud 공격 발생
- 9월 18일: 기술 분석 및 페이로드 동작 보고
- 11월 24일: npm 토큰 폐기 직전 두 번째 공격(Second Coming) 발생
공격 방식의 변화
- 이번 공격은
setup_bun.js파일을 통해 Bun 런타임을 설치하고, 이후bun_environment.js를 실행 - 무작위 이름의 GitHub 저장소를 생성해 탈취 데이터를 업로드
- 감염 대상 패키지 수가 20개에서 100개로 증가
- GitHub 또는 npm 인증 실패 시 사용자 홈 디렉터리 전체 삭제 기능 포함
감염된 패키지
- 총 492개 npm 패키지가 감염되었으며, 월간 다운로드 수는 1억 3,200만 회에 달함
- 주요 피해 프로젝트: Zapier, ENS Domains, AsyncAPI, PostHog, Postman, Browserbase
- 예시 패키지:
@zapier/zapier-sdk,@ensdomains/ensjs,@asyncapi/cli,posthog-js,@postman/pm-bin-linux-x64등
비밀정보 유출
- 악성코드는 “Sha1-Hulud: The Second Coming” 설명이 포함된 GitHub 저장소에 비밀정보를 업로드
- 현재까지 26,300개 이상의 저장소가 노출된 것으로 확인
공격자의 실수
- 일부 패키지에는
setup_bun.js만 포함되고bun_environment.js가 누락되어 웜이 완전 실행되지 않음 - 이로 인해 공격 확산 범위가 제한됨
감염 경로 및 최초 감염 지점
- 최초 감염은 2025년 11월 24일 03:16:26 GMT+0에
go-template및 AsyncAPI 관련 36개 패키지에서 시작 - 이후 PostHog(04:11:55) , Postman(05:09:25) 순으로 확산
- AsyncAPI CLI 저장소에서 악성 브랜치 생성 후 배포된 코드가 확인됨
잠재적 영향
- 설치 시 자동 실행되어 개발자 로컬 환경, 빌드 시스템, 클라우드 자격증명에 접근 가능
- 탈취된 비밀정보를 통해 추가 계정 침해 및 악성 패키지 게시 가능성
- npm 생태계의 신뢰 기반 공급망 보안에 심각한 위협
보안 대응 권고
- Zapier 및 ENS 관련 npm 의존성 전수 점검
- GitHub, npm, 클라우드, CI/CD 비밀정보 전면 교체
- GitHub에서 “Sha1-Hulud: The Second Coming” 설명이 있는 저장소 탐색
- CI 환경에서 npm
postinstall스크립트 비활성화 - 패키지 버전 고정 및 MFA 활성화, Safe-Chain 등 도구로 악성 패키지 차단
결론
- Shai-Hulud 2.0은 npm 공급망을 겨냥한 대규모 재공격으로,
수백 개의 인기 패키지와 수천 개의 GitHub 저장소가 영향을 받음 - 모든 개발팀은 의존성 검증, 비밀정보 교체, 자동 설치 스크립트 차단을 즉시 수행해야 함