Shai-Hulud 악성코드 공격: Tinycolor 및 40개 이상의 NPM 패키지 감염

5 hours ago 2

  • NPM 생태계에서 인기있는 @ctrl/tinycolor를 포함한 40개 이상 패키지에 자기 전파형 악성코드가 주입되어, 개발 환경의 비밀정보와 CI/CD 자격증명까지 연쇄 감염될 수 있는 공급망 공격이 발생. 감염 버전은 npm에서 제거되었음
  • 공격 페이로드는 npm 설치 과정에 Webpack 번들(bundle.js, ~3.6MB) 을 비동기로 실행하고, 환경변수·파일시스템·클라우드 SDK를 통해 광범위한 크리덴셜 수집을 수행함
  • 악성 로직은 NpmModule.updatePackage로 다른 패키지를 강제 패치·배포해 캐스케이딩 전파, GitHub Actions에 shai-hulud 워크플로를 주입해 조직 시크릿을 toJSON(secrets) 로 탈취함
  • 수집 데이터는 공개 GitHub 저장소 ‘Shai-Hulud’ 생성으로 수행되어 유출되며, 정상 개발 활동으로 위장되며 탐지 회피성이 높음
  • AWS/GCP/Azure/NPM/GitHub 토큰 및 메타데이터 엔드포인트 접근, TruffleHog 기반 비밀 탐색 등으로 은밀히 수행됨
  • 즉시 패키지 제거·리포지토리 정리·전 크리덴셜 교체와 함께 CloudTrail/GCP Audit 로그 점검, 웹훅 차단, 브랜치 보호/Secret Scanning/쿨다운 정책 도입이 요구됨

Affected Packages

  • 총 195개 패키지/버전이 보고됨, 대표적으로 @ctrl/tinycolor(4.1.1, 4.1.2), @ctrl/ 네임스페이스 다수, @crowdstrike/ 모듈군, ngx-bootstrap/ngx-toastr/ng2-file-upload/ngx-colorAngular/웹 UI 생태계 전반, @nativescript-community/@nstudio/ 모바일 스택, teselagen/ 생명과학 툴체인, ember-*, koa2-swagger-ui, pm2-gelf-json, wdio-web-reporter 등이 포함됨
  • 각 패키지별 정확한 버전은 원문 표를 참고해 해당 버전 사용 여부를 정밀 교차 확인 필요
    • 예시: @ctrl/ngx-emoji-mart 9.2.1, 9.2.2, @ctrl/qbittorrent 9.7.1, 9.7.2, ngx-bootstrap 18.1.4, 19.0.3–20.0.5, ng2-file-upload 7.0.2–9.0.1 등 광범위

Immediate Actions Required

Identify and Remove Compromised Packages

  • 프로젝트에서 감염 패키지 존재 여부 확인: npm ls @ctrl/tinycolor 등으로 점검
  • 감염 패키지 즉시 제거: npm uninstall @ctrl/tinycolor 등 수행
  • 알려진 bundle.js 해시 검색으로 로컬 흔적 점검: sha256sum | grep 46faab8a... 사용

Clean Infected Repositories

  • malicious GitHub Actions 워크플로 삭제: .github/workflows/shai-hulud-workflow.yml 제거함
  • 원격에 생성된 shai-hulud 브랜치 탐지·삭제: git ls-remote ... | grep shai-hulud 후 git push origin --delete shai-hulud 수행함

Rotate All Credentials Immediately

  • NPM 토큰, GitHub PAT/Actions 시크릿, SSH 키, AWS/GCP/Azure 자격증명, DB 연결 문자열, 서드파티 토큰, CI/CD 시크릿전면 교체 필요
  • AWS Secrets Manager/GCP Secret Manager에 저장된 항목 포함 전체 회전 필요

Audit Cloud Infrastructure for Compromise

  • AWS: CloudTrail에서 BatchGetSecretValue, ListSecrets, GetSecretValue 호출 시점과 패턴 점검, IAM Credential Report로 비정상 키 생성·사용 확인
  • GCP: Audit LogsSecret Manager 접근 기록 점검, CreateServiceAccountKey 이벤트 존재 여부 확인

Read Entire Article