DEV Community

Cover image for Axios NPM 공급망 공격 방식 및 API 프로젝트 보호 방법
Rihpig
Rihpig

Posted on • Originally published at apidog.com

Axios NPM 공급망 공격 방식 및 API 프로젝트 보호 방법

TL;DR

2026년 3월 31일, 공격자가 주간 다운로드 8,300만 회를 기록하는 인기 JavaScript HTTP 클라이언트 Axios의 주요 관리자 npm 계정을 침해했습니다. 악성 버전(1.14.1, 0.30.4)은 개발자 컴퓨터에서 자격 증명, SSH 키, 클라우드 토큰을 탈취하는 크로스 플랫폼 RAT(원격 액세스 트로이 목마)를 포함하고 있었습니다. 즉시 Axios를 1.14.0으로 다운그레이드하고, 모든 비밀을 교체하며, 시스템에서 침해 지표를 스캔해야 합니다.

오늘 Apidog를 체험해보세요

소개

Axios는 JavaScript에서 가장 널리 쓰이는 HTTP 요청 라이브러리입니다. 지난 5년 간 API 클라이언트 구축, 엔드포인트 테스트, 프론트엔드-백엔드 연결 경험이 있다면 Axios를 사용했을 가능성이 높습니다.

2026년 3월 31일 00:21 UTC, 위협 행위자가 탈취한 관리자 계정으로 Axios 1.14.1을 배포했습니다. 패키지는 정상 릴리스와 거의 동일했으며, 단 하나의 package.json 파일만 변경되어 있습니다. 이 파일을 통해 plain-crypto-js라는 악성 종속성이 주입되었고, 이로 인해 npm install을 실행하는 모든 시스템에 원격 액세스 트로이 목마가 퍼졌습니다.

악성 버전은 약 2~3시간 동안 npm에 남아 있었으며, 이 시간 동안 엄청난 수의 프로젝트가 영향을 받았을 가능성이 있습니다.

💡 API를 구축하거나 테스트하는 개발자라면, 이 공격은 여러분의 툴체인을 직접 노렸습니다. Apidog의 내장 HTTP 클라이언트는 API 테스트 워크플로우에서 외부 HTTP 라이브러리 의존성을 제거해 전체 공격 표면을 줄입니다. 아래 보안 감사 단계를 따라 하려면 Apidog를 무료로 다운로드하세요.

이 글에서는 공격 기법, 침해 감지 방법, 그리고 API 팀이 향후 종속성 관리를 어떻게 강화해야 하는지 구체적으로 다룹니다.

Axios 공급망 공격 전개 방식

타임라인

공격자는 18시간에 걸쳐 다음과 같이 공격을 실행했습니다.

  • 3월 30일, 05:57 UTC: 미끼용 plain-crypto-js@4.2.0 게시(정상 버전)
  • 3월 30일, 23:59 UTC: 악성 plain-crypto-js@4.2.1 게시(postinstall 드로퍼 추가)
  • 3월 31일, 00:21 UTC: 침해된 계정으로 axios@1.14.1 릴리스
  • 3월 31일, 01:00 UTC: axios@0.30.4 릴리스(0.x 브랜치 타깃)
  • 3월 31일, ~03:15 UTC: 커뮤니티 신고 후 npm이 악성 버전 삭제
  • 3월 31일, 04:26 UTC: plain-crypto-js에 보안 스텁 게시(재업로드 차단)

계정 침해 방식

공격자는 Axios 주요 관리자 jasonsaayman의 npm 계정을 장악, 이메일을 ifstap@proton.me로 변경했습니다.

  • 정상 릴리스는 OIDC Trusted Publisher와 GitHub Actions 기반이지만, 악성 릴리스는 OIDC 바인딩이 전혀 없었습니다.
  • gitHead 필드가 존재하지 않아 GitHub 커밋이 없음을 확인.
  • 공격자는 CI/CD가 아닌 탈취한 장기 npm 액세스 토큰으로 수동 게시.

npm 패키지 게시 시 OIDC 바인딩·CI/CD 출처가 없는 릴리스는 위험 신호입니다.

종속성 주입 기술

공격자는 Axios 소스 코드를 수정하지 않고, package.jsonplain-crypto-js@^4.2.1을 런타임 종속성으로 한 줄 추가했습니다. 이 패키지는 어디에서도 임포트되지 않으며, 오직 npm installpostinstall 훅을 트리거하기 위한 목적입니다.

정상 릴리스와 비교해 86개 파일 중 오직 package.json만 달랐습니다.

악성 페이로드의 기능

드로퍼 메커니즘

plain-crypto-jspostinstall 훅에서 4.2KB 난독화된 setup.js가 실행됩니다. 주요 난독화 방식은:

  1. "OrDeR_7077" 키로 XOR 암호화
  2. 문자 반전 포함 Base64 인코딩

디코딩 후, 운영체제별로 분기하여 페이로드를 실행합니다.

플랫폼별 공격 경로

macOS:

AppleScript를 /tmp/6202033에 작성
osascript로 실행
페이로드를 /Library/Caches/com.apple.act.mond로 다운로드
Enter fullscreen mode Exit fullscreen mode

Windows:

PowerShell을 %PROGRAMDATA%\wt.exe로 복사
cscript로 VBScript 드로퍼 실행
Enter fullscreen mode Exit fullscreen mode

Linux:

Python RAT을 /tmp/ld.py로 다운로드
nohup python3로 실행
Enter fullscreen mode Exit fullscreen mode

각 OS별로 아래와 같이 C2 서버와 통신합니다.

  • macOS: packages.npm.org/product0
  • Windows: packages.npm.org/product1
  • Linux: packages.npm.org/product2

RAT(원격 액세스 트로이 목마) 기능

  • 임의 셸 명령 실행
  • 파일 시스템 열람 및 유출
  • 프로세스 목록/주입
  • 메모리 내 바이너리 주입(파일 없는 실행)
  • 60초마다 C2에 비컨

공격자는 개발 머신에 대한 완전한 원격 제어권을 획득, .env, API 키, SSH 키, 클라우드 토큰 등을 탈취할 수 있습니다.

포렌식 방지: 자체 삭제 페이로드

실행 후 드로퍼는 다음 정리 과정을 거칩니다.

  1. setup.js 삭제
  2. 악성 package.json 삭제
  3. 준비된 package.md(4.2.0 보고)를 package.json으로 이름 변경

이는 npm list 등에서 이상 징후를 숨깁니다.

이 공격의 배후

Google 위협 인텔리전스 그룹은 북한 연계로 의심되는 UNC1069를 지목했습니다. macOS 악성코드는 Mandiant가 추적한 C++ 백도어 WAVESHAPER와 유사성이 높습니다.

북한 그룹은 개발자 도구 공급망 공격 경험이 풍부하며, 암호화폐와 자격 증명 탈취를 목적으로 개발 도구를 표적으로 삼아왔습니다.

영향 여부 확인 방법

1단계: Axios 버전 확인

모든 프로젝트에서 아래 명령 실행:

npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"
Enter fullscreen mode Exit fullscreen mode

결과가 있다면 침해된 버전이 설치된 상태입니다.

2단계: 악성 종속성 확인

ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENTIALLY AFFECTED"
Enter fullscreen mode Exit fullscreen mode

디렉터리 존재 시 페이로드가 실행된 증거입니다.

3단계: 시스템에서 RAT 아티팩트 확인

macOS:

ls -la /Library/Caches/com.apple.act.mond 2>/dev/null
Enter fullscreen mode Exit fullscreen mode

Linux:

ls -la /tmp/ld.py 2>/dev/null
Enter fullscreen mode Exit fullscreen mode

Windows (PowerShell):

Test-Path "$env:PROGRAMDATA\wt.exe"
Enter fullscreen mode Exit fullscreen mode

4단계: 네트워크 지표 확인

아래 연결을 차단 및 스캔:

  • C2 도메인: sfrclak.com
  • C2 IP: 142.11.206.73
  • C2 URL: http://sfrclak.com:8000/6202033

5단계: CI/CD 빌드 로그 확인

2026년 3월 31일 00:21~03:15 UTC 사이 실행된 CI/CD 파이프라인 중 Axios를 설치한 이력이 있는지 로그 확인.

즉각적인 완화 조치

침해 지표가 있으면 해당 시스템을 완전히 신뢰할 수 없는 상태로 간주하세요.

1. Axios 즉시 다운그레이드

npm install axios@1.14.0
Enter fullscreen mode Exit fullscreen mode

0.x 브랜치일 경우:

npm install axios@0.30.3
Enter fullscreen mode Exit fullscreen mode

2. package.json에 버전 오버라이드 추가

{
  "overrides": {
    "axios": "1.14.0"
  }
}
Enter fullscreen mode Exit fullscreen mode

Yarn 사용 시:

{
  "resolutions": {
    "axios": "1.14.0"
  }
}
Enter fullscreen mode Exit fullscreen mode

3. 악성 패키지 제거

rm -rf node_modules/plain-crypto-js
Enter fullscreen mode Exit fullscreen mode

4. 모든 자격 증명 교체

드로퍼가 실행되었다면 아래 항목 모두 교체 필요:

  • npm 토큰
  • AWS/GCP/Azure 자격 증명
  • SSH 키
  • GitHub 토큰
  • .env 파일의 API 키
  • 데이터베이스 자격 증명
  • 환경 변수 내 모든 비밀

5. 네트워크에서 C2 차단

echo "0.0.0.0 sfrclak.com" | sudo tee -a /etc/hosts
Enter fullscreen mode Exit fullscreen mode

6. 아티팩트 발견 시 시스템 재구축

RAT가 존재했다면 시스템 신뢰 금지, 포맷 후 재설치 권장.

API 개발팀을 위한 장기 방어책

잠금 파일 사용 및 정확한 버전 고정

Axios 공격은 ^ 셈버 범위를 악용했습니다. 반드시 정확한 버전을 명시하고 잠금 파일(package-lock.json, yarn.lock)을 커밋하세요. CI/CD에서는 npm install 대신 npm ci를 사용해 잠금 파일을 강제 적용하세요.

{
  "dependencies": {
    "axios": "1.14.0"
  }
}
Enter fullscreen mode Exit fullscreen mode

CI/CD에서 postinstall 스크립트 비활성화

공격의 핵심은 postinstall 훅 실행이었습니다. 아래 옵션으로 방지할 수 있습니다.

npm ci --ignore-scripts
Enter fullscreen mode Exit fullscreen mode

또는 .npmrc에:

ignore-scripts=true
Enter fullscreen mode Exit fullscreen mode

종속성 정기 감사

npm audit
npx socket-security/cli audit
Enter fullscreen mode Exit fullscreen mode

CI/CD에서 필수적으로 실행, 중요 취약점 발생 시 빌드 차단.

HTTP 클라이언트 종속성 노출 영역 축소

API 테스트 워크플로우에서 외부 HTTP 라이브러리에 의존하지 마세요.

  • API 테스트: Apidog의 시각적 테스트 빌더 활용
  • 디버깅: 내장 HTTP 클라이언트 사용
  • 모의 서버: Apidog의 스마트 모의 서버 사용
  • CI/CD 통합: Apidog CLI로 npm 종속성 없는 자동화 구현

Apidog를 무료로 사용해보고 HTTP 라이브러리 종속성 제거가 공급망 위험을 어떻게 줄이는지 직접 확인하세요.

패키지 출처 확인

npm은 Sigstore 기반 패키지 출처 확인을 지원합니다.

npm audit signatures
Enter fullscreen mode Exit fullscreen mode

OIDC 출처 없는 릴리스는 반드시 의심하세요.

JavaScript 생태계에 미치는 영향

신뢰 모델의 한계

npm 신뢰 모델은 관리자 계정 보안에 의존합니다. 단일 침해가 수천만 프로젝트에 영향을 미칠 수 있습니다. 장기 액세스 토큰의 위험도 높습니다.

커뮤니티 논의 중 주요 방안:

  • 필수 OIDC 게시: 인기 패키지에 CI/CD OIDC 토큰 기반 게시 강제
  • 두 사람 릴리스 승인: 릴리스 승인 이중화
  • 런타임 권한 제한: postinstall 스크립트 권한 제한

공급망 공격 지속

이 사건은 RubyGems, PyPI 등 타 레지스트리 공격과 맞물려, 모든 언어 생태계가 상시 위협에 노출되어 있음을 보여줍니다. 종속성 트리를 항상 공격 표면으로 생각해야 합니다.

레딧 토론 예시: “NPM은 인터넷의 가장 큰 약점이며, 거대한 재앙을 초래할 것이다.”

Axios 공격은 그 현실을 증명했습니다.

비교: HTTP 클라이언트 종속성 접근 방식

접근 방식 공급망 위험 유지보수 부담 테스트 기능
Axios + 사용자 정의 스크립트 높음 (서드파티 종속성) 높음 (버전 관리) 수동 설정 필요
Node.js 기본 fetch 낮음 (런타임에 내장) 낮음 제한된 테스트 기능
Apidog 내장 클라이언트 없음 (npm 종속성 없음) 없음 (플랫폼 관리) 완전한 테스트, 모의, 문서화
curl/httpie 스크립트 낮음 (시스템 수준 도구) 중간 제한된 자동화

자주 묻는 질문

Axios는 지금 사용해도 안전한가요?

네. 1.14.0 및 0.30.3 버전은 안전합니다. 침해된 버전(1.14.1, 0.30.4)은 3시간 내 삭제되었습니다. npm list axios로 설치 버전 확인, 잠금 파일을 반드시 점검하세요.

내 컴퓨터에서 RAT이 실행되었는지 어떻게 알 수 있나요?

아래 경로에 아티팩트가 있는지 확인하세요:

  • macOS: /Library/Caches/com.apple.act.mond
  • Linux: /tmp/ld.py
  • Windows: %PROGRAMDATA%\wt.exe
  • node_modules/plain-crypto-js 존재 여부

드로퍼가 자체 삭제하므로, 아티팩트가 없어도 침해 버전 설치 시 완전히 안전하다고 볼 수 없습니다.

Axios 사용을 완전히 중단해야 하나요?

필수는 아닙니다. Axios는 신뢰할 수 있는 라이브러리이나, 이번 사건을 계기로 외부 HTTP 클라이언트의 필요성을 재평가해야 합니다. Node.js 18+는 내장 fetch를 제공합니다. API 테스트에는 Apidog 등 내장 클라이언트 활용을 고려하세요.

프로젝트에서 공급망 공격을 어떻게 방지할 수 있나요?

  • 정확한 버전 고정
  • 잠금 파일 커밋
  • CI/CD에서 npm ci --ignore-scripts 실행
  • 정기적 종속성 감사
  • npm audit signatures로 출처 확인
  • 종속성 트리 최소화
  • HTTP 통신에 npm 패키지 의존 없는 통합 플랫폼 사용

이 공격은 Claude 코드 유출과 관련이 있었나요?

아닙니다. 두 사건 모두 2026년 3월 31일 발생했지만, Axios 공격은 국가 지원 공급망 침해이고, Claude 코드 유출은 Bun 빌드 도구의 소스맵 노출 버그 때문입니다.

Axios 공격의 배후는 누구인가요?

Google 위협 인텔리전스 그룹에 따르면 북한 연계 UNC1069 그룹 소행입니다. macOS 악성코드는 WAVESHAPER 백도어와 유사성이 높습니다.

몇 명의 개발자가 영향을 받았나요?

악성 버전은 2~3시간 동안 유포되었습니다. 주간 다운로드 수를 고려할 때 노출 규모는 매우 큽니다. 공식 피해 규모는 발표되지 않았으나, StepSecurity에 따르면 npm install 실행 즉시 페이로드가 C2와 통신합니다.

Apidog가 공급망 공격 방지에 도움이 될 수 있나요?

Apidog는 내장 HTTP 클라이언트로 API 테스트, 디버깅, 문서화를 지원하여 npm 기반 HTTP 라이브러리 설치 필요를 없앱니다. 이는 종속성 노출 영역을 줄이고, 공급망 공격 위험을 크게 낮춥니다.

핵심 요약

  • Axios 공급망 공격은 단일 관리자 계정 침해로 8,300만 주간 다운로드 패키지를 악용했습니다.
  • RAT는 macOS, Windows, Linux 모두 지원, 자격 증명 및 클라우드 토큰 탈취.
  • 위 탐지 단계를 즉시 실행해 시스템 상태를 확인하십시오.
  • 종속성 버전을 정확히 고정, CI/CD에서 postinstall 스크립트 비활성화 권장.
  • API 테스트에는 Apidog 등 내장 클라이언트로 HTTP 종속성 노출을 최소화하세요.
  • 패키지 레지스트리 보안 문제는 npm, PyPI, RubyGems 등 모든 생태계에 적용됩니다.

Axios 사건은 경고 신호입니다. node_modules에 들어가는 모든 종속성은 신뢰 결정입니다. 기본값이 아닌, 의도적으로 신뢰를 설정하고 있는지 점검하십시오.

Top comments (0)