미니 샤이훌루드 웜
TeamPCP라는 이름의 공격자가 TanStack, UiPath, Mistral AI, OpenSearch, Guardrails AI 등 여러 생태계에서 널리 사용되는 npm 및 PyPI 패키지를 표적으로 삼는 정교한 공급망 공격 캠페인에 연루된 것으로 밝혀졌습니다. 진화하는 Mini Shai-Hulud 멀웨어 캠페인과 연관된 이번 공격은 소프트웨어 공급망 악용 및 신원 기반 침해 기법이 크게 증가했음을 보여줍니다.
연구원들은 악성 npm 패키지가 router_init.js라는 난독화된 JavaScript 구성 요소를 포함하도록 수정되었음을 확인했습니다. 이 페이로드는 감염된 환경을 프로파일링하고 클라우드 제공업체, 암호화폐 지갑, AI 개발 도구, 메시징 플랫폼, CI/CD 시스템 및 GitHub Actions 환경을 대상으로 하는 고급 자격 증명 탈취 프로그램을 배포합니다. 유출된 데이터는 주로 filev2.getsession.org 도메인으로 전송됩니다.
세션 프로토콜 인프라를 사용하는 것은 기업 보안 제어를 의도적으로 회피하려는 시도임을 보여줍니다. 해당 도메인은 분산형 개인정보 보호 메시징 플랫폼에 속하기 때문에 기존 네트워크 방어 체계에 의해 차단될 가능성이 낮습니다. 두 번째 데이터 유출 방법으로, 탈취한 GitHub 인증 토큰을 사용하여 claude@users.noreply.github.com이라는 작성자 아이디로 암호화된 데이터를 GitHub GraphQL API를 통해 공격자가 제어하는 저장소에 커밋합니다.
목차
지속성 메커니즘 및 자격 증명 도용 확산
이 악성 프로그램은 손상된 개발 환경에 장기간 접근 권한을 유지하기 위해 여러 가지 지속성 및 감시 기능을 도입했습니다. 클로드 코드(Claude Code)와 마이크로소프트 비주얼 스튜디오 코드(Microsoft Visual Studio Code) 내부에 지속성 후크가 설치되어 시스템 재부팅 후에도 악성 프로그램이 실행되지 않고 IDE가 실행될 때마다 자동으로 다시 실행됩니다.
또한, gh-token-monitor 서비스가 배포되어 GitHub 토큰을 지속적으로 모니터링하고 재유출합니다. 두 개의 악성 GitHub Actions 워크플로도 손상된 저장소에 삽입됩니다. 이 워크플로는 저장소 비밀 정보를 JSON 형식으로 직렬화하고 해당 데이터를 외부 엔드포인트 api.masscan.cloud에 업로드합니다.
최근 발생한 TanStack 침해 사건은 이전 공급망 침해 사건들과는 상당히 다릅니다. 공격자들은 사전 설치 후크를 이용하는 대신, 악성 JavaScript 파일을 패키지 압축 파일(tarball)에 직접 삽입하고 GitHub에서 호스팅되는 패키지에 연결된 선택적 종속성을 추가했습니다. 이 종속성에는 Bun 런타임 환경을 통해 페이로드를 실행하는 prepare 라이프사이클 후크가 포함되어 있습니다.
트로이목마화된 Mistral AI 패키지는 package.json 파일을 수정하여 node setup.mjs를 호출하는 사전 설치 후크를 삽입하는 구식 감염 전략을 사용했습니다. 이 프로세스는 Bun을 다운로드하고 동일한 자격 증명 탈취 악성 프로그램을 실행합니다.
CVE-2026-45321 및 신뢰할 수 있는 게시의 악용
TanStack 취약점은 공식적으로 CVE-2026-45321로 추적되고 있으며, 심각도 등급은 CVSS 점수 9.6으로 평가되었습니다. 조사 결과 TanStack 생태계 내 42개 패키지와 84개 버전이 영향을 받은 것으로 확인되었습니다.
분석 결과, 이번 침해는 pull_request_target 트리거, GitHub Actions 캐시 포이즈닝, 그리고 GitHub Actions 실행기에서 OIDC 토큰을 런타임에 추출하는 등의 여러 GitHub Actions 공격이 복합적으로 작용한 결과로 밝혀졌습니다. 공격자들은 GitHub 포크의 미처리 커밋을 통해 악성 페이로드를 배치한 후, 이를 npm 패키지 tarball에 삽입했습니다. 이후 공격자들은 정상적인 TanStack/라우터 워크플로우를 탈취하여 유효한 SLSA 출처 증명을 첨부한 손상된 패키지를 게시했습니다.
이번 사건은 소프트웨어 공급망 공격의 역사적인 확대를 의미합니다. 악성 패키지에는 유효한 SLSA 빌드 레벨 3 출처 서명이 포함되어 있었는데, 이는 정식 빌드 인증서를 통해 악성 패키지를 배포할 수 있는 최초의 npm 웜으로 기록되었습니다. 이 악성코드 캠페인은 TanStack을 넘어 UiPath, DraftLab 및 기타 개발자들이 관리하는 생태계로 확산되었습니다.
이 공격은 신뢰할 수 있는 배포 워크플로를 심각하게 악용합니다. 공격자는 npm 자격 증명을 직접 탈취하는 대신, 신뢰할 수 있는 CI/CD 파이프라인 내에서 실행되는 제어 코드를 이용하여 OIDC 권한을 활용해 빌드 프로세스 중에 수명이 짧은 배포 토큰을 생성합니다. 이를 통해 악성 패키지가 기존의 인증 보안 조치를 우회하면서 합법적인 릴리스 파이프라인을 통해 배포될 수 있었습니다.
스스로 번식하는 벌레의 행동이 우려를 불러일으키고 있습니다
Mini Shai-Hulud 캠페인의 가장 위험한 측면 중 하나는 웜과 같은 전파 방식입니다. 이 악성코드는 bypass_2fa=true로 설정된 게시 가능한 npm 토큰을 적극적으로 검색하고, 감염된 개발자가 관리하는 패키지를 열거한 다음, GitHub OIDC 토큰을 패키지별 게시 토큰으로 교환합니다. 이러한 메커니즘을 통해 악성코드는 기존의 자격 증명 탈취 기법에 의존하지 않고 패키지 생태계 전반에 걸쳐 확산될 수 있습니다.
이번 공격은 GitHub의 OIDC 신뢰 게시자 모델 내의 저장소 수준 신뢰 구성도 악용했습니다. 신뢰가 보호된 브랜치 및 특정 워크플로 파일로 제한되지 않고 저장소 수준에서 광범위하게 부여되었기 때문에, 고아 커밋으로 인해 트리거된 악의적인 워크플로 실행이 정상적인 npm 게시 토큰을 요청할 수 있었습니다.
또 다른 위협적인 기능은 '데드맨 스위치' 배포와 관련이 있습니다. 이 악성코드는 셸 스크립트를 설치하여 60초마다 api.github.com/user 엔드포인트를 반복적으로 폴링하여 공격자가 생성한 npm 토큰이 활성 상태인지 확인합니다. 이러한 토큰에는 "이 토큰을 취소하면 소유자의 컴퓨터가 초기화됩니다."라는 위협적인 문구가 표시되어 있습니다.
방어자가 npm 대시보드를 통해 토큰을 취소하면 악성코드는 `rm -rf ~/` 명령어를 실행하여 시스템을 완전히 삭제하는 파괴적인 루틴을 실행합니다. 이러한 공격적인 동작은 TeamPCP의 운영 전술이 크게 진화했음을 보여주며, 강압적인 지속성 확보 방식이 더욱 정교해졌음을 시사합니다. 따라서 보안팀은 손상된 npm 자격 증명을 취소하기 전에 감염된 시스템을 격리하고 시스템을 이미지화하는 것이 좋습니다.
영향을 받는 패키지 및 확대되는 생태계 영향
이번 공격은 npm과 PyPI를 합쳐 170개 이상의 패키지에 영향을 미쳤으며, 이로 인해 총 5억 1,800만 건 이상의 다운로드가 발생했습니다. 조사관들은 또한 도난당한 계정 정보를 이용해 생성된 최소 400개의 저장소를 확인했는데, 이 저장소들에는 모두 'Shai-Hulud: Here We Go Again'이라는 문구가 포함되어 있었습니다.
영향을 받는 패키지는 다음과 같습니다.
guardrails-ai@0.10.1 (PyPI)
mistralai@2.4.6 (PyPI)
@opensearch-project/opensearch@3.5.3, 3.6.2, 3.7.0, 3.8.0
@squawk/mcp@0.9.5
@squawk/날씨@0.5.10
@squawk/flightplan@0.5.6
@tallyui/connector-medusa@1.0.1, 1.0.2, 1.0.3
@tallyui/connector-vendure@1.0.1, 1.0.2, 1.0.3
이 악성 소프트웨어는 여러 개의 중복된 데이터 유출 경로를 사용합니다. 세션 프로토콜 인프라와 GitHub 데드 드롭 외에도, 탈취된 자격 증명은 오타를 이용한 도메인 git-tanstack.com을 통해 전송됩니다.
PyPI 악성코드, 지리적 제한을 이용한 파괴적인 논리 도입
악성 Mistral AI 및 Guardrails AI 패키지와 관련된 Python 기반 멀웨어 변종은 npm을 통해 배포되는 JavaScript 페이로드와 상당한 차이가 있습니다. 감염된 mistralai PyPI 패키지는 원격 호스트 83.142.209.194에서 자격 증명 탈취 프로그램을 다운로드합니다.
연구원들은 해당 파이썬 악성코드가 러시아어 환경에서는 실행되지 않도록 설계된 국가 인식 로직을 포함하고 있음을 발견했습니다. 또한 감염된 시스템이 이스라엘이나 이란에 있는 것으로 판단될 경우 6분의 1 확률로 `rm -rf /` 명령어를 실행하는 지리적 제한 파괴 메커니즘도 포함되어 있습니다.
이러한 행위는 오픈 소스 패키지 생태계 내에서 지역 인식을 기반으로 한 파괴적인 악성 코드 배포로 이어지는 우려스러운 진화 양상을 보여줍니다.
개인 정보 기반 공급망 공격의 위협이 증가하고 있습니다.
미니 샤이훌루드 캠페인은 현대 공급망 공격의 광범위한 변화를 반영합니다. 공격자들은 단순히 패키지 손상에만 집중하는 대신, 신뢰할 수 있는 CI/CD 계정, 게시 워크플로, 클라우드 기반 자동화 파이프라인을 점점 더 많이 표적으로 삼고 있습니다.
공격자가 소프트웨어 배포 인프라에 접근 권한을 확보하면 개발 파이프라인 자체가 악성코드 배포 메커니즘이 됩니다. 많은 악의적인 행위가 합법적인 워크플로, 신뢰할 수 있는 인증 및 정식 릴리스 시스템을 통해 발생하기 때문에 기존 보안 제어 방식으로는 악의적인 행위를 식별하지 못할 수 있습니다.
이러한 새로운 세대의 공급망 공격을 정의하는 주요 특징은 다음과 같습니다.
- 신뢰할 수 있는 게시 및 OIDC 토큰 교환 메커니즘의 악용
- 합법적인 CI/CD 워크플로 및 빌드 시스템을 통한 전파
- 유효한 SLSA 인증서를 사용하여 악성 패키지를 위장하는 방법
- 다중 채널 자격 증명 유출 및 지속성 작업
- 방어자를 위협하기 위해 고안된 파괴적인 보복 메커니즘
AI 툴, 엔터프라이즈 자동화, 검색 인프라, 프런트엔드 개발, 항공 관련 툴, CI/CD 생태계 등 다양한 분야로 캠페인이 확대됨에 따라 소프트웨어 공급망이 얼마나 긴밀하게 연결되었는지 알 수 있습니다. 패키지 설치 및 빌드 실행 중 발생하는 동작을 모니터링하는 것은 이제 겉보기에는 합법적으로 보이는 위협을 탐지하는 데 점점 더 중요해지고 있습니다.