DEV Community

Cover image for axios 1.14.1 공급망 공격: 지금 해야 할 일
Rihpig
Rihpig

Posted on • Originally published at apidog.com

axios 1.14.1 공급망 공격: 지금 해야 할 일

요약

2026년 3월 30-31일, npm에서 axios 버전 1.14.1과 0.30.4가 악성 종속성으로 인해 침해당했으며, 이는 감염된 기기에 원격 접속 트로이 목마(RAT)를 설치합니다. 두 버전 모두 게시가 취소되었습니다. 안전한 버전은 1.14.0입니다. axios@1.14.1 또는 0.30.4를 설치했다면, 해당 기기를 침해당한 것으로 간주하고 모든 자격 증명을 즉시 교체하십시오.

Apidog를 지금 사용해보세요

axios란 무엇이며, 왜 중요한가요?

axios는 npm에서 매주 1억 회 다운로드되는 핵심 HTTP 클라이언트 라이브러리입니다. 프런트엔드 프레임워크, 백엔드 Node.js 서비스 그리고 다양한 기업 애플리케이션에서 사용됩니다. 이러한 근본적인 패키지가 침해되면 그 영향은 체인 전체로 확산됩니다.

2026년 3월 30일부터 31일까지 짧은 기간 동안, 단순히 npm install 명령을 실행한 개발자들은 자신도 모르는 사이 악성코드를 시스템에 설치했습니다.

이 사건은 가상의 위험이 아니라 실제로 발생한 공급망 공격입니다. 페이로드는 임의 명령 실행, 데이터 유출, 감염 기기에 상주할 수 있는 멀티스테이지 원격 접속 트로이 목마였습니다.

팀에서 axios를 사용하고, Apidog로 HTTP 클라이언트 통합을 설계/테스트하고 있다면, 다음 배포 전 반드시 아래 내용을 점검하세요.

공격 타임라인

  • 2026년 3월 30일 23:59:12 UTC: nrwise@proton.me 계정이 plain-crypto-js@4.2.1 악성 패키지 게시. 18시간 전 게시된 4.2.0 버전은 정상.
  • 2026년 3월 31일 00:05:41 UTC: Socket 자동화 시스템이 plain-crypto-js@4.2.1을 6분 만에 악성으로 플래그.
  • 2026년 3월 31일 자정 직후: axios@1.14.1이 npm에 게시되며, 침해된 plain-crypto-js@4.2.1을 종속성으로 포함. 해당 릴리스는 공식 GitHub 태그에 없음.
  • 2026년 3월 31일 오전: GitHub 이슈 #10604에서 침해 보고. 관리자는 공격자 접근 권한을 즉시 철회하지 못함(더 높은 npm 권한 때문).
  • 2026년 3월 31일: axios@1.14.1axios@0.30.4가 npm에서 게시 취소됨. 관리자는 토큰 철회, 게시 제어 강화 등 대응 시작.

공격 방식

공격자는 axios의 게시 워크플로우 허점(장기 지속 npm 토큰)을 악용하여, 정상 릴리스 프로세스 밖에서 악성 버전을 게시했습니다.

  • 새 버전은 plain-crypto-js@4.2.1(정상처럼 보이는 암호화 유틸리티 타이포스쿼트)을 종속성으로 도입했습니다.
  • 해당 패키지 내부에는 다단계 페이로드가 포함되어 있었습니다.

악성 페이로드 동작

  1. 설치 시 실행: npm 라이프사이클 스크립트로 보조 페이로드 드롭.
  2. RAT 배포: 지속적인 백도어 오픈.
  3. 유출: 임의 셸 명령 실행, 환경 변수/비밀 읽기, 네트워크로 데이터 전송.

RAT는 재부팅 후에도 지속됩니다. npm 패키지 제거만으로는 해결되지 않으니 반드시 명시적인 검색/제거 조치가 필요합니다.

제가 영향을 받았나요?

다음 조건에 해당하면 영향을 받았을 수 있습니다.

  • 2026년 3월 30일 23:59 UTC ~ 3월 31일 정오 UTC 사이에 npm install axios 또는 npm install 실행(axios가 package.json에 있을 때)
  • node_modules/axios/package.json에 1.14.1 또는 0.30.4 버전이 표시됨
  • package-lock.json 또는 yarn.lock에서 axios가 1.14.1 또는 0.30.4로 해결됨

즉시 확인 방법

# 설치된 버전 확인
npm list axios

# 잠금 파일에서 axios 버전 찾기
grep '"axios"' package-lock.json | head -5

# plain-crypto-js 존재 여부 확인
npm list plain-crypto-js
ls node_modules/plain-crypto-js 2>/dev/null && echo "INFECTED" || echo "Not found"
Enter fullscreen mode Exit fullscreen mode

plain-crypto-js가 node_modules에 존재하면, 악성 버전을 실제로 실행한 것입니다.

지금 해야 할 일

1. axios를 즉시 안전 버전으로 업데이트

npm install axios@1.14.0
# 또는 최신 안전 버전으로 고정
npm install axios@latest
Enter fullscreen mode Exit fullscreen mode

확인:

npm list axios
# 1.14.0 이상(혹은 1.14.x의 클린 릴리스)이 표시되어야 합니다
Enter fullscreen mode Exit fullscreen mode

2. 침해된 버전을 설치했다면

단순 업데이트가 아니라, 해당 기기가 침해된 것으로 간주하고 아래 조치를 수행하세요.

  • 그 기기에서 접근 가능한 모든 비밀을 즉시 교체: API 키, DB 자격 증명, SSH 키, 클라우드 토큰, .env 변수 등
  • 환경 변수 내 민감 정보 노출 여부 확인
  • 영향받은 기간 내 아웃바운드 네트워크 연결 감사(알 수 없는 IP 연결 탐지)
  • 지속성 체크: cron 작업, 시작 스크립트, systemd 서비스 등 감염 시점에 추가/수정된 항목 확인
  • 침해된 버전이 설치된 서버/CI 러너라면 재이미징, 노트북은 자격 증명 전면 교체

3. CI/CD 파이프라인 감사

해당 기간 npm install을 실행한 빌드 파이프라인이 있다면, CI 환경도 침해되었을 수 있습니다.

# 빌드 로그에서 axios@1.14.1 설치 내역 확인

# CI 환경의 node_modules 점검
npm list axios plain-crypto-js
Enter fullscreen mode Exit fullscreen mode

CI 파이프라인에서 접근 가능한 모든 비밀(배포 키, 클라우드 자격 증명, 레지스트리 토큰 등)도 교체하세요.

4. 잠금 파일(package-lock.json, yarn.lock) 확인 및 재생성

잠금 파일에 1.14.1이 존재한다면 반드시 재생성해야 합니다.

# 잠금 파일 제거 후 재설치
rm package-lock.json
npm install
Enter fullscreen mode Exit fullscreen mode

새 잠금 파일이 안전한 버전으로 axios를 해결하는지 반드시 커밋 전에 확인하세요.

Apidog를 사용하여 axios API 호출 감사

API 호출에 axios를 사용한다면, Apidog는 종속성 업데이트 후에도 API 요청이 정상 동작하는지 빠르게 확인할 수 있습니다.

  • axios@1.14.0 이상으로 업데이트 후, Apidog로 기존 API 엔드포인트를 가져와 회귀 테스트를 실행하세요.
  • 악성 버전이 요청/응답 페이로드를 변조했을 가능성도 있으므로, Apidog의 어설션 기능을 적극 활용하세요.
// Apidog 응답 후 어설션 예시
pm.test("응답이 깨끗합니다 — 주입된 필드가 없습니다", () => {
    const body = pm.response.json();
    pm.expect(body).to.not.have.property('__injected');
    pm.expect(pm.response.headers.get('X-Injected-Header')).to.be.null;
});
Enter fullscreen mode Exit fullscreen mode

Apidog에서 전체 테스트 스위트를 실행하면, 프로덕션 배포 전 HTTP 클라이언트 동작에 대한 신뢰성 기준선을 확보할 수 있습니다.

Apidog 무료 체험으로 HTTP 클라이언트 회귀 테스트를 바로 시작하세요.

npm의 공급망 공격을 막기 어려운 이유

axios 공격은 예외가 아닙니다. 아래는 주목할 만한 npm 또는 OSS 공급망 공격 사례입니다.

  • event-stream (2018): 악성 관리자가 비트코인 지갑을 노린 페이로드 주입 (주간 800만 다운로드)
  • ua-parser-js (2021): 암호화폐 채굴기/비밀번호 탈취기 포함
  • node-ipc (2022): 특정 국가 대상 파괴적 코드 추가
  • xz utils (2024): Linux 핵심 압축 라이브러리에 백도어 심기
  • axios (2026): 관리자 자격 증명 침해 + 악성 종속성(RAT) 배포

공통점: 코드가 아닌 게시 계정에 대한 신뢰

npm의 구조상, 관리자 계정이 침해되면 공격자는 동일한 신뢰/권한을 이어받아 악성 패키지를 게시할 수 있습니다.

실제로 도움이 되는 공급망 보안 조치

조치 내용
잠금 파일(package-lock.json) 정확한 버전 고정, 자동 업데이트 방지
CI의 npm audit 배포 전 알려진 취약점 감지
Socket.dev / Snyk 행동 분석으로 CVE 등록 전에도 이상 탐지
npm 2단계 인증 계정 침해 난이도 상승
단기 토큰으로 npm publish 토큰 유출 시 노출 기간 최소화
PR에서 잠금 파일 검토 예기치 못한 종속성 변경 감지

axios 팀도 장기 토큰 문제를 인지하고, 더 엄격한 게시 제어로 전환 중입니다. 하지만 공급망 보안은 생태계 전체의 노력이 필요합니다.

침해 지표 (IOCs)

Socket 분석 기준:

  • 악성 패키지: plain-crypto-js@4.2.1, axios@1.14.1, axios@0.30.4
  • 게시자 이메일: nrwise@proton.me
  • 행동: npm 설치 시 네트워크 연결, RAT 지속성, 환경 변수/비밀 유출
  • 안전한 axios 버전: 1.14.0 이하(0.30.4 제외), 1.13.x, 1.12.x

감염 의심 시 security@npmjs.com으로 신고하고, 로그를 보존하세요.

결론

axios 1.14.1 침해 사건은 종속성 보안이 일회성 점검이 아니라 지속적이고 자동화된 프로세스이어야 함을 보여줍니다.

  • 버전을 잠그고
  • CI에서 Socket과 같은 행동 분석 도구를 실행하며
  • 이상 징후 발견 시 즉시 자격 증명 교체
  • PR/코드 리뷰에서 잠금 파일을 꼼꼼히 살펴보세요

axios 업데이트 후 API 통합 신뢰를 재구축하려면, Apidog는 배포 전 HTTP 클라이언트 동작을 검증할 수 있는 테스트 시나리오, 어설션, 목킹 도구를 제공합니다.

FAQ

어떤 axios 버전이 침해되었나요?

axios@1.14.1, axios@0.30.4입니다. 두 버전 모두 npm에서 게시가 취소되었습니다. 안전한 버전은 1.14.0(또는 1.13.x, 1.12.x 라인의 모든 버전)입니다.

악성 axios 페이로드는 무엇을 하나요?

plain-crypto-js@4.2.1을 가져와, 원격 접속 트로이 목마(RAT)를 포함한 다단계 페이로드를 배포합니다. RAT는 임의 명령 실행, 환경 변수 및 비밀 유출, 재부팅 후 지속 등이 가능합니다.

침해된 버전을 설치했는지 어떻게 알 수 있나요?

npm list axios 실행 시 1.14.1 또는 0.30.4가 표시되면 영향을 받은 것입니다. 또한 npm list plain-crypto-js로 plain-crypto-js가 존재하는지 확인하세요.

axios만 업데이트하면 충분한가요?

아닙니다. 업데이트는 향후 악성 종속성 설치를 막지만, RAT가 이미 기기에 설치되어 있을 수 있습니다. 침해된 버전을 설치했다면 모든 비밀을 교체하고, 기기에서 지속성(백도어) 여부를 반드시 점검하세요.

공격자는 어떻게 관리자가 아니면서 npm에 게시할 수 있었나요?

공격자는 관리자 자격 증명을 침해, 게시 권한이 있는 장기 npm 토큰을 악용한 것으로 보입니다. axios 팀은 게시 제어 강화를 진행 중입니다.

이것과 일반적인 취약점의 차이는 무엇인가요?

취약점은 정상 코드 내 결함입니다. 공급망 공격은 신뢰받는 게시 채널을 통해 악성 코드를 주입합니다. 침해된 코드는 axios GitHub 저장소에는 존재하지 않고, npm 게시에 직접 주입되었습니다.

향후 공급망 공격으로부터 프로젝트를 어떻게 보호할 수 있나요?

잠금 파일 사용, CI에서 npm audit 실행, Socket.dev 등 행동 분석 도구 추가, npm 2단계 인증 활성화, 단기 게시 토큰 사용, PR에서 잠금 파일 변경사항 감사 등 보안 수칙을 철저히 준수하세요.

Top comments (0)