
위협 트렌드
2026.04.01
2026년 3월 31일(UTC 기준) 자바스크립트 생태계에서 가장 널리 사용되는 HTTP 클라이언트 라이브러리인 axios의 npm 관리자 계정이 탈취되어, 악성 버전 두 개(1.14.1, 0.30.4)가 공식 레지스트리에 배포됐다. 악성 패키지에는 Windows·macOS·Linux를 모두 지원하는 크로스플랫폼 원격 접속 트로이목마(RAT)가 포함됐으며, Google Threat Intelligence Group(GTIG)은 이 공격을 북한 연계 위협 행위자 UNC1069의 소행으로 귀속했다. 악성 버전은 배포 후 2시간 54분 만에 npm 측에 의해 제거됐다.
[email protected]이라는 이름의 무해해 보이는 패키지를 npm에 먼저 게시하여 탐지 우회를 준비했다. 이 패키지는 정상 라이브러리 crypto-js를 모방한 것이었다.[email protected])로 변경했다. 이후 npm CLI를 통해 [email protected]과 [email protected]를 직접 배포했다. 두 버전은 GitHub Actions를 거치지 않아 GitHub 저장소에 흔적이 남지 않았다.latest 및 legacy 태그 모두에 악성 버전을 지정해, npm install axios를 실행하는 모든 사용자가 악성 버전을 받도록 했다. 변경 사항은 package.json 내 의존성 추가 뿐이어서 소스 코드 diff 분석으로는 탐지가 어려웠다.plain-crypto-js의 postinstall 훅이 트리거되어 백그라운드에서 난독화된 드로퍼 setup.js가 실행됐다. 이 스크립트는 OS를 탐지한 뒤 플랫폼별 WAVESHAPER.V2 백도어 페이로드를 원격 C2 서버(sfrclak[.]com:8000)에서 내려받아 실행했다.[email protected]과 [email protected]를 레지스트리에서 제거했다. Andrej Karpathy(@karpathy)도 자신의 시스템에서 해당 버전을 감지했다는 사실을 SNS에 공개했다.이번 공격은 크게 세 단계(계정 탈취 → 악성 패키지 배포 → RAT 실행)로 구성된 정교한 소프트웨어 공급망 공격이다.
NPM_TOKEN 환경 변수를 함께 전달하고 있었다. npm은 OIDC보다 NPM_TOKEN을 우선시하므로, 공격자는 탈취한 장기 액세스 토큰만으로 OIDC 검증을 완전히 우회할 수 있었다.
postinstall 훅 (악성 실행 트리거)
OS별 페이로드 동작 방식
| OS | 드로퍼 동작 | 저장 경로 | C2 통신 |
|---|---|---|---|
| Windows | powershell.exe를 %PROGRAMDATA%\wt.exe로 복사 후 숨김 실행. PowerShell 스크립트 다운로드. |
%TEMP%\6202033.ps1 |
sfrclak[.]com:8000POST body: packages.npm.org/product* |
| macOS | bash/curl로 Mach-O 바이너리 다운로드 후 실행 권한 부여, zsh 백그라운드 실행. |
/Library/Caches/ |
|
| Linux | Python 백도어 스크립트 다운로드 후 실행. | /tmp/ld.py |
setup.js는 페이로드 실행 성공 후 자기 자신을 삭제하고, 변조한 package.json을 원본(package.md에 백업해둔)으로 교체했다. 이로 인해 설치 후 표준 포렌식 분석으로는 감염 여부 확인이 어렵다.
WAVESHAPER.V2 백도어 주요 기능
최종 페이로드인 WAVESHAPER.V2는 C++ 기반(Windows/macOS) 및 PowerShell·Python 변종으로 구성된 백도어다. 주요 기능은 시스템 정보 수집, 디렉터리 열거, 실행 중인 프로세스 정보 탈취, 추가 페이로드 실행 등이다. 획득한 자격증명을 바탕으로 유사한 방식의 추가 공급망 공격을 연쇄적으로 수행하는 것이 최종 목표로 분석된다.
이번 사고와 동일한 악성 의존성(plain-crypto-js)을 활용한 추가 패키지 두 개가 확인됐다.
Google GTIG 및 Mandiant는 다음 근거를 바탕으로 이번 공격을 UNC1069로 귀속했다.
sfrclak[.]com) 관련 아티팩트가 UNC1069 과거 캠페인 인프라와 겹친다.npm list axios 또는 npm audit으로 설치된 버전을 확인하고, 감염 버전이 설치된 경우 안전한 버전으로 교체한다.%PROGRAMDATA%\wt.exe, /Library/Caches/com.apple.act.mond, /tmp/ld.py) 존재 여부 및 C2 IP/도메인(sfrclak[.]com) 통신 로그를 확인한다.npm audit 및 SCA 도구를 통해 전체 의존성 트리를 점검한다.NPM_TOKEN을 제거하여 우회 경로를 차단한다. MFA(다중 인증)를 반드시 활성화한다.