NOW Briefing
axios의 npm 관리자 계정이 탈취되어 악성 버전 1.14.1과 0.30.4가 npm 레지스트리에 배포됐습니다.
plain-crypto-js의 postinstall 훅을 통해 Windows, macOS, Linux 환경에 WAVESHAPER.V2 계열 RAT를 내려받고 실행하는 방식으로 동작했습니다.
Axios npm 패키지 공급망 공격 인사이트 보고서
■ 개요
2026년 3월 31일(UTC 기준), 자바스크립트 생태계에서 널리 사용되는 HTTP 클라이언트 라이브러리 axios의 npm 관리자 계정이 탈취됐습니다. 공격자는 탈취한 npm 장기 액세스 토큰을 이용해 악성 버전 1.14.1과 0.30.4를 공식 npm 레지스트리에 직접 배포했습니다.
악성 패키지는 Windows, macOS, Linux를 모두 지원하는 크로스플랫폼 원격 접속 트로이목마(RAT)를 포함하고 있었습니다. 설치 과정에서 의존성 패키지의 postinstall 훅이 실행되면, 운영체제별 페이로드가 원격 C2 서버에서 내려받아지고 백그라운드에서 실행되는 구조였습니다.
Google Threat Intelligence Group(GTIG)은 이 공격을 북한 연계 금전 목적 위협 행위자 UNC1069의 소행으로 귀속했습니다. 악성 버전은 배포 후 약 2시간 54분 만에 npm 측에 의해 삭제됐지만, latest 및 legacy 태그가 동시에 조작됐기 때문에 짧은 시간 안에도 개발자 환경과 CI/CD 파이프라인에 영향을 줬을 가능성이 있습니다.
■ 요약
| 항목 | 내용 |
|---|---|
| 공격 유형 | npm 계정 탈취 기반 소프트웨어 공급망 공격 |
| 대상 패키지 | axios npm 패키지 |
| 악성 버전 | 1.14.1, 0.30.4 |
| 노출 시간 | 약 2시간 54분 |
| 주요 공격 경로 | 관리자 npm 토큰 탈취 → 악성 버전 직접 배포 → postinstall 훅 실행 → WAVESHAPER.V2 RAT 설치 |
| C2 인프라 | sfrclak[.]com:8000, POST body packages.npm.org/product* |
| 귀속 행위자 | Google GTIG 기준 북한 연계 위협 행위자 UNC1069 |
■ 사고 타임라인
| 시점 | 주요 내용 |
|---|---|
| 3월 30일 | 공격자는 사전 단계에서 무해해 보이는 패키지 plain-crypto-js@4.2.1를 npm에 게시했습니다. 이 패키지는 정상 라이브러리 crypto-js를 모방한 악성 의존성으로 활용됐습니다. |
| 3월 31일 00:21 UTC | 공격자는 axios 핵심 관리자인 jasonsaayman 계정의 npm 장기 액세스 토큰을 탈취하고, 계정 이메일을 공격자 소유 Proton Mail 주소 ifstap@proton.me로 변경했습니다. 이후 npm CLI를 통해 악성 버전 1.14.1과 0.30.4를 직접 배포했습니다. |
| 3월 31일 직후 | 악성 버전이 latest 및 legacy 태그에 지정됐습니다. 이로 인해 단순히 npm install axios를 실행한 사용자도 악성 버전을 받을 수 있었습니다. |
| 설치 시점 | plain-crypto-js의 postinstall 훅이 트리거되어 난독화된 드로퍼 setup.js가 실행됐습니다. 드로퍼는 OS를 식별한 뒤 C2 서버에서 플랫폼별 페이로드를 다운로드했습니다. |
| 3월 31일 03:15 UTC경 | Socket.dev가 이상 의존성을 탐지하고 공개 경고를 발령했습니다. 이후 StepSecurity, Huntress 등 여러 보안 기업이 분석 결과를 공유했습니다. |
| 3월 31일 03:15 UTC | npm은 배포 후 약 2시간 54분 만에 악성 버전 1.14.1과 0.30.4를 레지스트리에서 제거했습니다. Andrej Karpathy(@karpathy)도 자신의 시스템에서 해당 버전을 감지했다는 사실을 SNS에 공개했습니다. |
| 3월 31일 이후 | Google GTIG는 WAVESHAPER.V2 백도어의 코드 특성과 C2 인프라의 과거 사용 패턴을 근거로 이번 공격을 UNC1069 소행으로 공식 귀속했습니다. Vercel, Arctic Wolf, Halborn 등도 후속 분석을 공개했습니다. |
■ 공격 기법 상세 분석
이번 공격은 크게 계정 탈취, 악성 패키지 배포, RAT 실행이라는 세 단계로 구성됩니다. 특히 GitHub 저장소의 소스 코드가 직접 변조된 것이 아니라, 탈취한 npm 권한으로 악성 버전을 레지스트리에 직접 게시했다는 점이 중요합니다. 이 방식은 GitHub Actions 이력이나 저장소 diff만 보는 감시 체계를 우회할 수 있습니다.
OIDC Trusted Publishing 우회
jasonsaayman 계정은 GitHub Actions의 OIDC Trusted Publishing이 활성화된 상태였지만, 워크플로우가 NPM_TOKEN 환경 변수도 함께 전달하고 있었습니다. npm은 OIDC보다 NPM_TOKEN을 우선 처리하기 때문에, 공격자는 탈취한 장기 액세스 토큰만으로 OIDC 검증을 우회할 수 있었습니다.
악성 실행 트리거
// axios 악성 버전의 package.json
"scripts": {
"postinstall": "node setup.js"
}
OS별 페이로드 동작 방식
| OS | 드로퍼 동작 | 저장 경로 |
|---|---|---|
| Windows | powershell.exe를 %PROGRAMDATA%\wt.exe로 복사한 뒤 숨김 실행하고, PowerShell 스크립트를 다운로드합니다. |
%TEMP%\6202033.ps1 |
| macOS | bash와 curl을 이용해 Mach-O 바이너리를 다운로드하고 실행 권한을 부여한 뒤, zsh 백그라운드 프로세스로 실행합니다. |
/Library/Caches/com.apple.act.mond |
| Linux | Python 기반 백도어 스크립트를 다운로드한 뒤 실행합니다. | /tmp/ld.py |
Anti-forensics
드로퍼 setup.js는 페이로드 실행에 성공한 뒤 자기 자신을 삭제하고, 변조된 package.json을 원본 형태로 교체했습니다. 원본은 package.md에 백업해둔 것으로 분석됩니다. 이 때문에 설치 이후 표준 파일 비교만으로 감염 여부를 확인하기 어렵습니다.
최종 페이로드인 WAVESHAPER.V2는 C++ 기반 Windows/macOS 변종과 PowerShell·Python 변종으로 구성된 백도어입니다. 주요 기능은 시스템 정보 수집, 디렉터리 열거, 실행 중인 프로세스 정보 탈취, 추가 페이로드 실행 등입니다. 공격자는 확보한 자격증명과 내부 접근 권한을 바탕으로 유사한 방식의 추가 공급망 공격을 연쇄적으로 수행하려 했을 가능성이 큽니다.
■ 연관 악성 패키지
이번 사고와 동일한 악성 의존성 plain-crypto-js를 활용한 추가 패키지도 확인됐습니다. axios 악성 버전이 제거된 뒤에도 별도 패키지를 통해 유통됐을 가능성이 있으므로, 직접 의존성뿐 아니라 전이 의존성까지 확인해야 합니다.
| 패키지 | 특징 |
|---|---|
@shadanai/openclaw |
동일 악성 의존성 사용 정황이 확인된 npm 패키지 |
@qqbrowser/openclaw-qbot@0.0.130 |
node_modules 내부에 변조된 axios@1.14.1 패키지를 포함한 것으로 보고됨 |
■ 위협 행위자 귀속
Google GTIG 및 Mandiant는 이번 공격을 북한 연계 위협 행위자 UNC1069로 귀속했습니다. 핵심 근거는 WAVESHAPER.V2 백도어의 코드 계보와 C2 인프라 재사용 정황입니다.
•WAVESHAPER.V2는 UNC1069가 과거 활동에서 사용한 WAVESHAPER의 업데이트 버전으로 분석됩니다.
•C2 인프라 sfrclak[.]com 관련 아티팩트가 UNC1069의 과거 캠페인 인프라와 겹칩니다.
•UNC1069는 2018년부터 활동해온 금전 목적의 북한 연계 위협 행위자로, 암호화폐 및 AI 분야를 주요 표적으로 삼아 온 것으로 알려져 있습니다.
맥락
이번 사고는 같은 기간 발생한 LiteLLM 악성 코드 주입 사고 이후 약 일주일 만에 발생했습니다. StepSecurity는 이번 공격을 “상위 10개 npm 패키지를 겨냥한 공격 중 가장 정교한 사례”로 평가했습니다.
■ 탐지 및 점검 항목
CHECK
우선 설치된 axios 버전과 lockfile, CI/CD 캐시, 개발자 머신의 네트워크 흔적을 함께 확인해야 합니다.
•npm list axios, npm audit, lockfile 검색으로 1.14.1 또는 0.30.4 설치 이력을 확인합니다.
•Windows 환경에서는 %PROGRAMDATA%\wt.exe, %TEMP%\6202033.ps1 존재 여부를 확인합니다.
•macOS 환경에서는 /Library/Caches/com.apple.act.mond, Linux 환경에서는 /tmp/ld.py를 점검합니다.
•프록시, EDR, 방화벽 로그에서 sfrclak[.]com:8000 통신 및 packages.npm.org/product* 형태의 POST body 흔적을 확인합니다.
•plain-crypto-js, @shadanai/openclaw, @qqbrowser/openclaw-qbot@0.0.130가 직접 또는 전이 의존성으로 포함됐는지 확인합니다.
■ 대응 방안
즉시 조치
악성 버전 1.14.1과 0.30.4는 사용하지 않아야 합니다. 원본 기준 안전 버전은 axios@1.8.4 또는 그 이전 공식 버전이며, 설치 이력이 있는 환경은 침해 가능성을 전제로 점검해야 합니다.
•설치된 axios 버전을 확인하고, 악성 버전이 발견되면 즉시 안전한 공식 버전으로 교체합니다.
•문제 기간인 2026년 3월 31일 00:21~03:15 UTC에 해당 패키지를 설치했거나 CI/CD 파이프라인이 실행됐다면 모든 시크릿, API 키, 접속 토큰을 폐기하고 재발급합니다.
•개발자 PC와 빌드 서버, 배포 서버의 의심 파일과 C2 통신 로그를 확인하고, 감염 가능성이 있는 호스트는 네트워크에서 분리한 뒤 포렌식 분석을 진행합니다.
•직접 의존성뿐 아니라 전이 의존성까지 SCA 도구와 lockfile 검색으로 점검합니다. axios를 직접 사용하지 않아도 다른 패키지를 통해 악성 버전이 유입됐을 수 있습니다.
•npm 계정의 장기 액세스 토큰을 폐기하고, OIDC Trusted Publishing을 사용할 때는 워크플로우에서 NPM_TOKEN이 함께 전달되지 않도록 제거합니다. 관리자 계정에는 MFA를 반드시 적용합니다.
[참고 자료]
The Hacker News, Axios Supply Chain Attack Pushes Cross-Platform RAT via Compromised npm Account
Halborn, Explained: The Axios Hack (March 2026)
Arctic Wolf, Supply Chain Attack Impacts Widely Used Axios npm Package




