Shai-Hulud 2.0: 796개 패키지를 감염시킨 자가 복제 npm 웜

November 30, 202510 min read

긴급 보안 경고 2025년 11월 24일, 보안 연구자들은 주간 2,000만 건 이상의

다운로드를 기록하는 796개의 npm 패키지를 침해한 고도화된 자가 증식 웜을 확인했습니다. 개발 워크플로에서 npm 패키지를

사용하고 있다면 지금 바로 읽어야 합니다.

npm 생태계는 지금까지 경험한 가장 정교한 공급망 공격 중 하나를 겪었습니다. 보안 커뮤니티에서 'Shai-Hulud 2.0'이라 부르는 이 자가 증식 웜은 수백 개의 정상 패키지에 침투해 자격 증명을 탈취하고 백도어를 설치하며, 중앙 집중식 명령·제어(C&C) 인프라 없이 스스로 확산합니다.

이 공격이 특히 위험한 이유는 자율적이라는 점입니다. 한 번 감염되면 멀웨어가 자동으로 다른 패키지로 퍼져 npm 생태계 전체에 연쇄 효과를 일으킬 수 있습니다. 개발자와 보안 팀이 이 위협에 대해 알아야 할 내용을 모두 정리했습니다.


Shai-Hulud 2.0이란?

Shai-Hulud 2.0은 2025년 9월에 처음 발견된 자가 증식 npm 웜의 두 번째 버전입니다. 공격자가 제어하는 서버와 지속적으로 통신해야 하는 기존 멀웨어와 달리, 이 웜은 시스템에 감염된 뒤 자율적으로 동작하도록 설계되었습니다.

공격은 정상 npm 패키지에 두 개의 악성 파일을 주입하는 방식으로 이루어집니다:

  • setup_bun.js - 초기 감염 벡터
  • bun_environment.js - 난독화된 페이로드

이 파일들은 감염된 패키지를 누군가 설치할 때마다 실행되는 악성 preinstall 스크립트에 의해 자동으로 트리거됩니다. 이상 징후를 눈치챘을 때쯤이면 이미 피해가 발생했을 수 있습니다.


공격 규모

이 공격의 숫자는 놀랍습니다:

796

감염된 npm 패키지

20M+

영향받은 주간 다운로드 수

500+

침해된 GitHub 사용자

이 수치는 공개된 데이터를 바탕으로 한 하한선입니다. 실제 피해 규모는 훨씬 클 가능성이 있으며, 아직 발견되지 않은 침해된 자격 증명이 많을 수 있습니다. 이 공격은 150개 이상의 독립 GitHub 조직에 걸친 개발자에게 영향을 미쳐 광범위한 기업 노출을 보여 줍니다.


공격 메커니즘: 기술적 분석

공격 메커니즘을 이해하는 것은 탐지와 예방 모두에 매우 중요합니다. 멀웨어는 다섯 단계로 동작합니다:

단계: Bun 런타임을 이용한 회피

멀웨어가 사용하는 첫 번째 교묘한 수법은 Node.js 대신 Bun JavaScript 런타임을 설치해 사용하는 것입니다. 이는 두 가지 목적을 가집니다:

  • Node.js 프로세스를 모니터링하도록 특별히 설정된 보안 모니터링 도구를 우회
  • 샌드박싱·컨테이너화 대책을 우회할 수 있는 새로운 실행 환경 제공

Bun이 설치되면 멀웨어는 이를 이용해 정적 분석이 어려운 대량의 난독화된 페이로드를 실행합니다.

단계: 포괄적 자격 증명 수집

멀웨어의 정교함이 드러나는 지점입니다. 뻔한 자격 증명 파일만 찾는 것이 아니라, 가능한 한 많은 비밀 정보를 훔치기 위한 다면적 접근을 구현합니다:

노리는 자격 증명 소스:

  • 로컬 파일 시스템:.config/gcloud/application_default_credentials.json,.aws/credentials 등 알려진 자격 증명 파일 스캔
  • 능동적 비밀 탐색: Trufflehog를 다운로드해 실행하며 파일 시스템 전체에서 비밀 정보를 적극적으로 탐색 -클라우드 메타데이터 서비스: AWS, Azure, Google Cloud 인스턴스 메타데이터 엔드포인트에 쿼리해 임시 워크로드 자격 증명 탈취 -클라우드 비밀 저장소: AWS Secrets Manager, Azure Key Vault, Google Cloud Secret Manager에 접근해 저장된 비밀 정보 획득 -환경 변수: API 키와 토큰을 자주 포함하는 모든 환경 변수 수집

이 포괄적 접근은 개발자 노트북, CI/CD 파이프라인, 클라우드 기반 서버리스 함수 어디에서 실행되든 멀웨어가 자격 증명을 찾아내 탈취할 가능성이 높다는 뜻입니다.

단계: GitHub 기반 유출(한 수 더)

유출 메커니즘은 특히 흥미롭습니다. 멀웨어의 주요 수법은 피해자로부터 훔친 GitHub 자격 증명으로 새 공개 GitHub 저장소를 만드는 것입니다. 이 저장소에는 특징적인 표식이 있습니다 — 'Sha1-Hulud: The Second Coming'이라는 설명입니다.

그러나 여기서 교묘한 점이 있습니다. 감염된 머신에서 GitHub 자격 증명을 찾지 못해도 멀웨어는 포기하지 않습니다. 대신 GitHub에서 같은 특징적인 설명을 가진 다른 저장소를 검색해, 그 저장소에서 자격 증명을 훔쳐 자신의 유출에 활용합니다.

중요한 함의: 탈취된 자격 증명이 전혀 다른 GitHub 계정 아래에서 유출될 수 있어 탐지가 크게 어려워집니다.

단일 GitHub 사용자 계정에 여러 무관한 피해자의 데이터가 섞여 있을 수 있습니다.

단계: 지속적 접근을 위한 셀프 호스트 GitHub 러너

침해된 머신에 대한 지속적 접근을 유지하기 위해 멀웨어는 셀프 호스트 GitHub Actions 러너를 설정합니다. 특히 악랄한 이유는 다음과 같습니다:

  • 정상 GitHub 인프라를 사용하므로 악성 트래픽으로 탐지하기 어려움
  • 공격자가 GitHub의 정상 워크플로 기능으로 피해자 머신에서 임의 코드 실행 가능
  • 인바운드 방화벽 포트를 열거나 리버스 셸을 수립할 필요 없음
  • 보안 팀이 이를 정상 DevOps 자동화로 간과할 수 있음

단계: 자율적 자가 확산

Shai-Hulud 2.0을 단순 멀웨어가 아닌 진정한 웜으로 만드는 요인입니다. 개발자 머신을 침해하고 npm 자격 증명을 훔친 뒤 자동으로:

  1. 해당 개발자가 공개한 최대 100개 패키지 식별
  2. 감염된 패키지에서 자신의 악성 코드 읽기(C&C 서버 불필요!)
  3. 그 코드를 피해자의 다른 패키지에 주입
  4. 이 패키지들의 새 버전을 npm에 게시

이 자가 증식은 공격자 개입 없이 자동으로 일어나 웜이 npm 생태계 전체에서 기하급수적으로 확산할 수 있게 합니다.

최후 수단: 데이터 파괴 멀웨어가 자가 증식과 유출 모두에 실패하면 초토화 전술의 폴백이

있습니다: 사용자 홈 디렉터리 전체 삭제를 시도합니다. 이 파괴적 행동은 공격자가 접근 유지보다 자신의 흔적을 지우는 것을

우선한다는 점을 시사합니다.


피해 여부 확인 방법

조기 발견이 매우 중요합니다. 즉시 확인해야 할 주요 침해 지표(IOC)는 다음과 같습니다:

즉시 취할 조치:

  1. node_modules 내 악성 파일 확인: 특히 의심스러운 preinstall 스크립트와 함께 있는 setup_bun.js 또는 bun_environment.js를 포함한 패키지 검색. 2.GitHub에서 유출용 저장소 검색: 조직 GitHub 계정 아래 'Sha1-Hulud: The Second Coming' 설명을 가진 저장소를 찾으세요. 여기에 탈취된 자격 증명이 포함되어 있을 수 있습니다. 3.예상치 못한 GitHub 러너 확인: 조직의 셀프 호스트 러너를 점검하고 의도하지 않게 설정된 것이 없는지 확인. 4.최근 패키지 업데이트 확인: npm 패키지를 유지보수 중이라면, 특히 2025년 11월 24일 전후에 모르는 사이에 업데이트된 것이 없는지 확인. 5.클라우드 액세스 로그 확인: AWS CloudTrail, Azure 활동 로그, Google Cloud 감사 로그에서 비밀 관리 서비스나 메타데이터 서비스로의 비정상 API 호출 여부 확인.

침해 확인 시 즉시 대응 절차

피해가 확인되면 시간과의 싸움입니다. 다음 단계를 순서대로 실행하세요:

긴급 대응 체크리스트:

  1. 모든 자격 증명 즉시 로테이션: GitHub 토큰, npm 토큰, AWS 키, Azure 자격 증명, GCP 서비스 계정, 노출 가능성이 있는 기타 비밀 정보 모두 포함.

2.침해된 npm 토큰 폐기: npmjs.com에 로그인해 모든 인증 토큰을 폐기한 뒤 새 토큰 생성. 3.** 감염된 패키지 비공개 처리 또는 사용 중단 표시: **자신의 패키지에 백도어가 심어졌다면 최근 버전을 즉시 비공개로 전환하거나 보안 경고와 함께 사용 중단(deprecated)으로 표시.

4.셀프 호스트 GitHub 러너 삭제: 조직 GitHub에서 허가되지 않은 셀프 호스트 러너를 모두 제거. 5.유출용 저장소 삭제:'Sha1-Hulud: The Second Coming' 설명을 가진 GitHub 저장소 모두 삭제.

6.모든 시스템 스캔: 감염된 패키지를 설치했을 가능성이 있는 머신에서 포괄적 멀웨어 스캔 실행. 7.이해관계자에게 통지: 다른 사람이 사용하는 패키지를 유지보수 중이라면 침해를 공개하고 사용자에게 업데이트를 권고.


장기 예방 전략

향후 공급망 공격을 막으려면 다층 보안 접근이 필요합니다:

의존성 관리

  • 락 파일 사용 및 패키지 무결성 검증
  • CI/CD 파이프라인에 의존성 스캔 구현
  • 의존성 정기 감사 및 최소화
  • 범위 지정 대신 특정 버전 고정(pinning)

런타임 보안

  • 예상치 못한 프로세스 실행(Bun 등) 모니터링
  • 네트워크 아웃바운드 필터링 구현
  • 패키지 설치에 샌드박스 환경 사용
  • 모든 패키지 작업에 대한 감사 로그 활성화

자격 증명 관리

  • 자격 증명을 평문 파일에 저장하지 않기
  • 최소 권한의 단기 토큰 사용
  • 비밀 로테이션 정책 구현
  • 비밀 저장소 무단 접근 모니터링

모니터링 및 탐지

  • 비정상 GitHub 활동에 대한 알림 설정
  • 자신의 패키지 npm 게시 이벤트 모니터링
  • 클라우드 환경에서 메타데이터 서비스 접근 추적
  • 이상 탐지를 위한 행동 분석 구현

큰 그림:

2025년 공급망 보안

Shai-Hulud 2.0 공격은 공급망 위협의 큰 진화를 보여 줍니다. 타이포스쿼팅과 사회공학으로 악성 패키지를 게시하던 이전 공격과 달리, 이 웜은 개발자가 이미 사용 중인 정상적이고 신뢰받는 패키지를 침해합니다.

특히 우려되는 것은 이 공격의 자율적 성격입니다. 기존 멀웨어 캠페인은 공격자의 지속적 개입이 필요하지만, 자가 증식 웜은 사람 개입 없이 기하급수적으로 확산할 수 있습니다. 한 번 풀리면 완전히 억제하기는 거의 불가능합니다.

npm 생태계의 대응은 신속했습니다 — 증거에 따르면 npm은 2025년 11월 24일 UTC 오후 6시경 추가 패키지 감염을 막기 위한 대책을 시행했습니다. 그러나 이미 감염된 패키지로 인한 피해 복구에는 개발자가 의존성을 업데이트하고 침해된 자격 증명을 로테이션하는 데 수개월이 걸릴 수 있습니다.

개발 팀을 위한 핵심 교훈:

-신뢰는 이분법적이지 않다: 신뢰받는 메인테이너의 패키지도 침해될 수 있습니다. 심층 방어 전략을 구현하세요. -설치는 실행이다: 패키지 설치 스크립트는 임의 코드를 실행할 수 있습니다. npm install을 보안 관련 작업으로 취급하세요. -자격 증명이 가장 중요한 자산: 적절한 자격 증명 관리는 선택이 아닙니다 — 억제된 사고와 치명적 침해를 가르는 차이입니다. -모니터링이 생명을 구한다: 이 공격을 조기에 탐지한 조직은 견고한 모니터링 체계를 갖추고 있었습니다. 관측 가능성에 투자하세요.


결론: 진화하는 위협에 경계를 유지하라

Shai-Hulud 2.0 웜은 JavaScript 생태계 전체에 울리는 경종입니다. 796개 패키지가 침해되고 주간 2,000만 건 이상의 다운로드가 영향을 받았다는 사실은 공급망 보안을 더 이상 미룰 수 없음을 보여 줍니다.

다행히 보안 커뮤니티가 신속히 대응했고 npm도 확산 억제 조치를 취했습니다. 불행한 점은 이것이 이런 유형의 마지막 공격이 아니라는 것입니다. 패키지 생태계가 성장하고 상호 연결될수록 정교한 공격자에게 점점 더 매력적인 표적이 됩니다.

회복력의 핵심은 모든 공격을 막는 것이 아닙니다 — 그것은 불가능합니다. 대신 침해를 빠르게 탐지하고 피해를 효과적으로 억제하며 신속히 복구할 수 있는 시스템을 구축하는 것입니다. 오늘 공급망 보안에 투자하는 조직이 내일 피할 수 없는 공격에서 살아남을 조직이 됩니다.

최신 정보 확인

이 사건은 진행 중입니다. 보안 연구자들은 새로 영향받은 패키지와 침해 지표를 계속 발견하고 있습니다. npm 보안 권고를

확인하고 SNS에서 보안 연구자를 팔로우해 최신 정보를 받으세요.

최신 소식을 받아보세요

뉴스와 업데이트를 가장 먼저 확인하세요