DEEP DIVE REPORT

Axios 공급망 공격 100M+ 다운로드 패키지의 악용

SecurityDesk
2026.04.02 조회 26

공격 개요

2026년 3월 31일, JavaScript 생태계의 가장 인기 있는 HTTP 클라이언트 라이브러리인 Axios가 공급망 공격의 표적이 되었습니다. 이 공격은 북한 소재의 위협 액터 UNC1069로 귀속되었으며, 주당 1억 회 이상 다운로드되는 라이브러리를 악성 원격 접속 트로이목마(RAT) 배포 도구로 전환시켰습니다.

핵심 사항

  • 공격 일시: 2026년 3월 31일 00:21 UTC ~ 03:15 UTC (노출 시간: 약 2~3시간)
  • 영향 버전: axios@1.14.1, axios@0.30.4
  • 악성 의존성: plain-crypto-js@4.2.1
  • C2 서버: sfrclak.com:8000 (IP: 142.11.206.73)
  • 페이로드: 크로스 플랫폼 RAT (macOS, Windows, Linux)
  • 공격자: UNC1069 (북한 연계, BlueNoroff 관련)

공격 타임라인

시간 (UTC) 이벤트
3월 30일 23:59 plain-crypto-js@4.2.1 악성 페이로드 게시
3월 31일 00:05 npm 자동 스캐너가 plain-crypto-js 감지 (6분 만에 발견)
3월 31일 00:21 axios@1.14.1 악성 버전 게시
3월 31일 01:00 axios@0.30.4 악성 버전 게시 (39분 후)
3월 31일 03:15 npm 관리자가 악성 버전 삭제

기술적 분석

1. 계정 탈취 및 배포 방법

공격자는 Axios 유지 관리자(jasonsaayman)의 npm 계정을 탈취하여 공격을 수행했습니다. 주요 특징은 다음과 같습니다.

  • 이메일 변경: 원본 이메일(jasonsaayman@gmail.com)이 ifstap@proton.me(공격자 통제)로 변경
  • OIDC 우회: 정상적인 Axios 릴리스는 GitHub Actions와 npm의 OIDC Trusted Publisher 메커니즘을 통해 발행되지만, 이 공격은 도난당한 npm 액세스 토큰으로 수동 게시
  • GitHub 흔적 부재: 1.14.1과 0.30.4에 해당하는 커밋, 태그, 릴리스가 GitHub 저장소에 존재하지 않음

2. 팬텀 의존성 공격 (Phantom Dependency)

공격자는 Axios 소스 코드를 직접 수정하지 않고, package.jsonplain-crypto-js@^4.2.1을 새로운 의존성으로 추가했습니다.

  • 사용되지 않는 패키지: plain-crypto-js는 Axios 소스 코드 어디에서도 import되지 않음
  • 목적: postinstall 훅 실행만을 위한 패키지
  • 스텔스 설계: 소스 코드 변조를 최소화하여 코드 리뷰 우회

3. RAT 드로퍼 (setup.js) 상세 분석

악성 페이로드는 다층 난독화 기술을 사용했습니다.

난독화 기법

  • XOR 암호화: 키 "OrDeR_7077"을 사용하여 문자열 암호화
  • Base64 인코딩: 사용자 지정 치환과 결합
  • 런타임 전용 디코딩: 정적 분석 스캐너 우회

플랫폼별 페이로드

플랫폼 배포 방식 아티팩트 위치
macOS AppleScript 템플릿 사용 /Library/Caches/com.apple.act.mond
Windows PowerShell 복사 및 숨김 실행 %PROGRAMDATA%\wt.exe
Linux Python 스크립트 /tmp/ld.py

C2 통신

모든 페이로드는 동일한 C2 서버와 통신하지만, 플랫폼별로 다른 식별자를 사용합니다.

  • 기본 URL: http://sfrclak.com:8000/6202033
  • macOS 식별자: packages.npm.org/product0
  • Windows 식별자: packages.npm.org/product1
  • Linux 식별자: packages.npm.org/product2

4. 포렌식 대응 (Anti-Forensics)

악성코드는 실행 후 스스로 흔적을 지웁니다.

  1. 악성 setup.js 삭제
  2. 오염된 package.json 제거
  3. 깨끗한 package.md를 package.json으로 이름 변경
  4. node_modules/plain-crypto-js 디렉토리를 정상 패키지처럼 보이게 함

영향 범위

수치로 보는 영향력

  • 주간 다운로드: 1억 회 이상 (npm에서 가장 많이 사용되는 HTTP 클라이언트)
  • 생태계 침투율: 약 80%의 클라우드 및 코드 환경에 존재
  • 실행 관찰: Wiz 분석에 따르면 영향을 받은 환경의 3%에서 실행 확인
  • 다운스트림 오염: 공격 윈도우 동안 Axios를 의존성으로 갖는 패키지들이 악성 버전 포함

영향을 받은 조직 유형

Google Threat Intelligence Group의 관찰에 따르면 다음과 같은 산업군에서 활동이 확인되었습니다:

  • 정부 기관
  • 금융 서비스
  • 소매업
  • 컨설팅
  • 엔터테인먼트
  • 제조업
  • 기술 기업
  • 헬스케어
  • 유틸리티

실제 위험

이 공격의 실제 위험은 프로덕션 서버가 아닌 개발자 머신과 CI/CD 파이프라인입니다.

  • npm install을 실행하는 시스템이 주 표적
  • SSH 키, 클라우드 자격 증명, API 토큰 탈취
  • 단일 개발자 머신 침해로부터 전 조직 유출 가능

대응 전략

즉시 대응 (24시간 이내)

  1. 영향 버전 확인

    # lockfile 확인
    grep -E "axios@1\.14\.1|axios@0\.30\.4" package-lock.json yarn.lock pnpm-lock.yaml
    
    # 설치된 버전 확인
    npm list axios | grep -E "1\.14\.1|0\.30\.4"
    
    # 악성 의존성 확인
    ls node_modules/plain-crypto-js
    

  2. 버전 롤백

  3. axios@1.14.0 또는 axios@0.30.3으로 다운그레이드
  4. node_modules/plain-crypto-js 디렉토리 삭제

  5. 자격 증명 교체

  6. NPM 토큰
  7. AWS, Azure, GCP 클라우드 액세스 키
  8. SSH 키
  9. 데이터베이스 자격 증명
  10. API 토큰

단기 대응 (72시간 이내)

  1. C2 인프라 차단
  2. 도메인: sfrclak.com
  3. IP: 142.11.206.73
  4. 포트: 8000

  5. 시스템 아티팩트 검사

  6. macOS: /Library/Caches/com.apple.act.mond
  7. Windows: %PROGRAMDATA%\wt.exe, %TEMP%\6202033.vbs, %TEMP%\6202033.ps1
  8. Linux: /tmp/ld.py

  9. 프로필 파일 검토

  10. .bashrc, .zshrc에서 비인가 수정 사항 확인
  11. 영구성 확보 시도 탐지

  12. 네트워크 로그 모니터링

  13. 포트 8000으로의 아웃바운드 연결
  14. packages.npm.org/product[0|1|2]로의 POST 요청

장기 대응 (1주 이내)

  1. CI/CD 파이프라인 감사
  2. 자동 설치 스크립트 억제 정책 도입
  3. 의존성 고정(Pinning) 강화
  4. 보안 스캐너 통합

  5. SBOM(Software Bill of Materials) 구축

  6. 의존성 트리 시각화
  7. 공급망 위험 식별

  8. 의존성 관리 강화

  9. npm audit, npm verify 정기 실행
  10. Supply chain security tool 도입 (예: Socket, Snyk)

  11. 인시던트 대응 절차 개선

  12. 공급망 공격 시나리오 연습
  13. 유지 관리자 계정 보안 강화

위협 액터 분석: UNC1069

Google Threat Intelligence Group은 이 공격을 UNC1069로 귀속했습니다.

특징

  • 소속: 북한 연계, BlueNoroff 관련
  • 동기: 재정적 이익
  • 주요 활동: 클라우드 자격 증명, SSH 키, Kubernetes 토큰 탈취

WAVESHAPER.V2 백도어

이 공격에 사용된 백도어는 WAVESHAPER.V2로, UNC1069의 이전 캠페인(RustBucket)과 연결됩니다.

  • 기능: 4가지 명령 지원
  • 비콘 주기: 60초 간격으로 C2 서버와 통신
  • 명령 유형: kill(프로세스 종료) 등

TeamPCP 캠페인 연관성

이 공격은 TeamPCP 공급망 캠페인의 일부로 추정됩니다. 2026년 3월 19일~27일 사이에 다음 프로젝트가 연속으로 탈취되었습니다.

  1. Trivy 취약점 스캐너 (3월 19일)
  2. KICS 인프라스트럭처-코드 스캐너 (3월 23일)
  3. LiteLLM AI 프록시 라이브러리 (3월 24일)
  4. Telnyx 통신 라이브러리 (3월 27일)

각 케이스에서 악성코드는 클라우드 자격 증명, SSH 키, Kubernetes 구성 파일, CI/CD 시크릿을 수집했습니다.

벤치마킹 사례: 유사 공급망 공격

1. EventStream (2018)

  • 타겟: event-stream npm 패키지
  • 기법: flatmap-stream 악성 의존성 주입
  • 영향: CoinHive 암호화폐 채굴기 배포
  • 교훈: 유지 관리자 이전 시 신원 확인 필요

2. ua-parser-js (2021)

  • 타겟: ua-parser-js npm 패키지
  • 기법: 8분 동안 3개의 악성 버전 게시
  • 영향: 코인마이너 및 데이터 탈취 페이로드
  • 특징: 2주간 수백만 다운로드 기록 이용 후 악성 버전 게시

3. CanisterWorm (2025)

  • 타겟: 다중 npm 패키지
  • 기법: 자기 전파 웜 개발자 자격 증명 악용
  • 특징: 탈중앙화된 서버 사용하여 생존
  • 의의: 이론적인 자기 전파 웜을 실제로 구현

4. Chalk & Debug 공격 (2025년 9월)

  • 타겟: debug(357M 주간 다운로드), chalk(299M 주간 다운로드)
  • 의존성: ansi-styles, supports-color, strip-ansi 등
  • 영향: 다중 의존성 오염

공통 패턴

공통 특징 설명
사전 준비 악성 패키지 사전 게시하여 "신규 패키지" 경보 회피
의존성 무기화 소스 코드 수정 대신 의존성 추가 방식 선호
난독화 다층 난독화로 정적 분석 우회
포렌식 대응 실행 후 자가 삭제로 증거 소멸
빠른 노출 짧은 시간 동안 최대한 많은 시스템 감염

방어 전략: 미래 대비

1. 의존성 고정 (Dependency Pinning)

{
  "dependencies": {
    "axios": "1.14.0"  // ^1.14.0 대신 정확한 버전 명시
  }
}

2. 자동 스크립트 억제

# npm의 postinstall 스크립트 비활성화
npm set ignore-scripts true
# 또는 .npmrc 파일에 추가
echo "ignore-scripts=true" >> .npmrc

3. SBOM 및 공급망 가시성

  • CycloneDX 또는 SPDX 형식으로 SBOM 생성
  • 정기적인 의존성 감사
  • Supply chain security tool 도입

4. 개발자 교육

  • 공급망 공격 인식
  • 패키지 업데이트 프로세스 강화
  • 2단계 인증 필수화

결론

Axios 공급망 공격은 현대 소프트웨어 개발 생태계의 취약성을 적나라하게 보여주었습니다. 단일 유지 관리자 계정의 탈취가 수백만 시스템에 영향을 미칠 수 있으며, 공급망 보안은 선택이 아닌 필수입니다.

이 공격의 핵심 교훈은 다음과 같습니다:

  1. 신뢰할 수 있는 게시자(TOIDC) 메커니즘 강화
  2. 의존성 고정 및 자동 스크립트 억제
  3. 개발자 머신의 보안 강화 (프로덕션 서버뿐만 아니라)
  4. 신속한 공급망 위협 탐지 및 대응

보안 책임은 개별 개발자나 유지 관리자에게만 있는 것이 아닙니다. 전체 생태계가 협력하여 신뢰할 수 있는 소프트웨어 공급망을 구축해야 합니다.

참고문헌

  1. SecurityWeek, "Axios NPM Package Breached in North Korean Supply Chain Attack", https://www.securityweek.com/axios-npm-package-breached-in-north-korean-supply-chain-attack/

  2. Trend Micro, "Axios NPM Package Compromised: Supply Chain Attack Hits JavaScript HTTP Clients with 100M+ Weekly Downloads", https://www.trendmicro.com/en_us/research/26/c/axios-npm-package-compromised.html

  3. Google via Cybernews, "Google: North Korea behind axios NPM supply chain attack", https://cybernews.com/security/axios-npm-supply-chain-attack-north-korea/

  4. Bastion, "Axios npm Supply Chain Attack: What Happened & How to Respond", https://bastion.tech/blog/axios-npm-supply-chain-attack

  5. Axios, "North Korean hackers linked to Axios npm package compromise", https://www.axios.com/2026/03/31/north-korean-hackers-implicated-in-major-supply-chain-attack

  6. SANS, "Axios NPM Supply Chain Compromise: Malicious Packages Deliver Remote Access Trojan", https://www.sans.org/blog/axios-npm-supply-chain-compromise-malicious-packages-remote-access-trojan

  7. The Hacker News, "Google Attributes Axios npm Supply Chain Attack to North Korean Group UNC1069", https://thehackernews.com/2026/04/google-attributes-axios-npm-supply.html

  8. Wiz, "Tracking TeamPCP: Investigating Post-Compromise Attacks Seen in the Wild", https://www.wiz.io/blog/tracking-teampcp-investigating-post-compromise-attacks-seen-in-the-wild


본 콘텐츠는 AI 기술로 생성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하시면 댓글을 통해 소중한 의견 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

로그인

아직 댓글이 없습니다.

첫 번째 댓글을 작성해보세요!

IT 도구 서랍

→ Unix: 2025-01-15T09:30:00
→ 날짜: 1736934600

→ ASCII: ABC
→ 문자: 65 66 67

ASCII 코드표 — 클릭하면 입력란에 추가

DecHex약어설명
DecHex문자
DecHex문자

→ 유니코드: 홍길동
→ 문자: \ud64d\uae38\ub3d9