npm 공급망 공격, TanStack, Mistral AI 등 170개 패키지 피해
170개 이상의 npm 패키지와 2개의 PyPI 패키지를 대상으로 한 대규모 공급망 공격 발생
TanStack, Mistral AI, UiPath 등 유명 오픈소스 프로젝트가 주요 타겟이 됨
공격자는 자동화된 툴을 사용하여 400개 이상의 악성 버전을 배포
패키지 종속성 고정(Pinning), .npmrc 설정 변경 등 개발자들의 적극적인 대응 필요
공격 방식: 자동화된 대규모 배포
SafeDep 팀의 분석에 따르면, 공격자는 자동화된 툴(Automated Tooling)을 사용하여 170개 이상의 npm 패키지에 악성 버전을 배포했다. 특히, TanStack, Mistral AI, UiPath 등 유명 프로젝트의 스코프(Scope) 전체를 타겟하여, 단일 공격으로 광범위한 피해를 야기했다. 이러한 대규모 배포는 수동적인 공격이 아닌, 자동화된 시스템을 통해 이루어졌음을 시사한다. 이는 공격의 효율성을 높이는 동시에, 방어 측의 대응을 더욱 어렵게 만든다.
악성 페이로드(Payload) 분석: Credential Harvesting
공격에 사용된 페이로드는 다양한 Credential(자격 증명) 탈취를 목표로 설계되었다. 특히, AWS IAM, HashiCorp Vault, GitHub 토큰, npm publish 토큰 등 광범위한 자격 증명을 수집하여, 클라우드 및 CI/CD 환경으로의 lateral movement를 시도했다. 또한, Session 프로토콜을 통해 탈취된 정보를 전송하여, C2(Command & Control) 서버를 숨기는 등, 데이터 격리 아키텍처(Data Isolation Architecture)를 활용했다.
피해 규모 및 대상: TanStack, Mistral AI, UiPath
이번 공격으로 TanStack 라우터 생태계(42개 패키지), Mistral AI SDK, UiPath 자동화 툴링(65개 패키지) 등이 피해를 입었다. 특히, TanStack의 경우, 모든 라우터 관련 패키지가 악성 버전에 노출되었으며, Mistral AI는 SDK 패키지 전체가, UiPath는 자동화 플랫폼 관련 패키지가 공격 대상이 되었다. 이러한 광범위한 피해는 오픈소스 생태계(Open Source Ecosystem) 전반에 대한 심각한 위협을 보여준다.
PyPI 공격: 새로운 공격 벡터
이번 공격은 npm뿐만 아니라 PyPI까지 확장되어, 미스트랄 AI(Mistral AI)와 가드레일 AI(Guardrails AI) 패키지가 악성 버전에 감염되었다. PyPI 패키지는 import 시 실행되는 __init__.py를 통해 악성 코드를 실행하는 방식으로, npm의 preinstall hook과는 다른 공격 방식을 사용했다. 특히, 데이터 미저장 정책(Zero-Retention Policy)을 통해 공격 흔적을 최소화하려는 시도가 엿보인다.
대응 방안: 종속성 관리 및 보안 강화
개발자들은 종속성 고정(Dependency Pinning)을 통해 특정 버전의 패키지를 사용하고, .npmrc 파일에 `ignore-scripts=true` 설정을 추가하여 pre/postinstall 스크립트 실행을 막아야 한다. 또한, SafeDep vet과 같은 도구를 사용하여 종속성 트리를 검사하고, CI/CD 환경에서 PyPI 자격 증명이 노출되지 않도록 주의해야 한다. 패키지 관리 시스템(Package Manager Guard)을 활용하여, 새로운 패키지 설치를 지연시키는 것도 효과적인 방어 전략이 될 수 있다.