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

Ashley Innocent

Ashley Innocent

2 April 2026

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를 설치했다면, 해당 기기를 침해당한 것으로 간주하고 모든 자격 증명을 즉시 교체하십시오.

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

axios는 npm에서 매주 1억 회 다운로드됩니다. 수많은 프런트엔드 프레임워크, 백엔드 Node.js 서비스 및 기업 애플리케이션에서 HTTP 클라이언트로 사용됩니다. 이처럼 근본적인 패키지가 침해당하면 파급 효과는 엄청납니다. 3월 30일부터 31일까지 짧은 시간 동안 npm install을 실행한 개발자들은 자신도 모르는 사이에 악성코드를 자신의 기기로 가져왔습니다.

이는 가상의 공급망 위험이 아닙니다. 실제로 발생했고 확인되었으며, 페이로드는 심각했습니다. 임의의 명령을 실행하고, 시스템 데이터를 유출하며, 감염된 기기에 상주할 수 있는 다단계 원격 접속 트로이 목마였습니다.

팀에서 axios를 사용하고 Apidog를 사용하여 HTTP 클라이언트 통합을 설계하고 테스트하는 경우, 다음 배포 전에 이 내용을 읽어보십시오.

버튼

공격 타임라인

2026년 3월 30일 — 23:59:12 UTC: nrwise@proton.me를 사용하는 계정이 plain-crypto-js@4.2.1이라는 악성 패키지를 npm에 게시합니다. 이보다 18시간 전에 게시되었던 이전의 깨끗한 버전(4.2.0)은 합법적인 crypto-js 라이브러리의 설득력 있는 타이포스쿼트였습니다.

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을 종속성으로 가져옵니다. 이 릴리스는 axios GitHub 저장소의 공식 태그에는 나타나지 않습니다. 가장 최근의 합법적인 태그는 v1.14.0으로 남아있습니다.

2026년 3월 31일 — 오전: GitHub 이슈 #10604가 공개적으로 열리며 axios@1.14.1axios@0.30.4가 침해되었다고 보고합니다. Axios 관리자들은 처음에 공격자의 접근 권한을 철회할 수 없음을 확인합니다. 침해당한 계정이 합법적인 관리자보다 높은 npm 권한을 가지고 있었기 때문입니다.

2026년 3월 31일: axios@1.14.1axios@0.30.4 모두 npm에서 게시가 취소됩니다. Axios 관리자들은 토큰을 철회하고, 게시 제어를 강화하며, 장기 지속 npm 토큰이 무단 게시 접근 권한을 얻기 위해 어떻게 악용되었는지 조사하기 시작합니다.

공격 방식

이 공격은 axios의 게시 워크플로우의 허점을 악용했습니다: 신뢰할 수 있는 게시와 함께 사용되던 장기 지속 npm 토큰이었습니다. 공격자는 (아마도 관리자의 자격 증명을 침해한 후) 이 토큰을 사용하여 정상적인 릴리스 프로세스 외부에서 새 버전을 게시했습니다.

새 버전은 plain-crypto-js@4.2.1을 종속성으로 도입했습니다. 패키지 이름은 합법적인 암호화 유틸리티처럼 보이도록 설계되었습니다. 이전의 깨끗한 4.2.0 버전은 의심을 줄이기 위해 짧은 이력을 확립했습니다.

plain-crypto-js@4.2.1 내부에서 Socket의 분석 결과 다단계 페이로드가 발견되었습니다.

  1. 1단계 — 실행: 이 패키지는 설치 시점(npm 라이프사이클 스크립트를 통해)에 코드를 실행하여 보조 페이로드를 드롭합니다.
  2. 2단계 — RAT 배포: 페이로드가 지속적인 백도어를 여는 원격 접속 트로이 목마를 설치합니다.
  3. 3단계 — 유출: RAT는 C2 서버에서 전송된 임의의 셸 명령을 실행하고, 파일 시스템에서 환경 변수 및 비밀을 읽고, 네트워크를 통해 시스템 데이터를 전송할 수 있습니다.

RAT는 재부팅 후에도 지속됩니다. 즉, 침해된 버전을 설치한 기기는 npm 패키지가 제거된 후에도 RAT가 명시적으로 검색 및 제거되지 않으면 계속 위험에 노출됩니다.

제가 영향을 받았나요?

다음과 같은 경우 잠재적으로 영향을 받습니다.

즉시 확인:

# 설치된 버전 확인
npm list 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"

node_modulesplain-crypto-js가 있다면, 악성 버전을 실행한 것입니다.

지금 해야 할 일

1. axios를 즉시 업데이트하세요.

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

확인:

npm list axios
# 1.14.0 이상이어야 합니다 (깨끗한 1.14.x가 게시되면)

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

이를 일상적인 종속성 업데이트로 간주하지 마십시오. 해당 기기를 침해당한 것으로 간주하십시오.

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

해당 기간 동안 빌드 파이프라인에서 npm install을 실행했다면 CI 환경이 침해되었을 수 있습니다. 확인:

# 영향을 받은 기간 동안의 빌드 로그 확인
# 모든 설치 출력에서 axios@1.14.1을 찾으십시오

# 현재 CI node_modules가 깨끗한지 확인
npm list axios plain-crypto-js

CI 파이프라인이 접근할 수 있는 모든 비밀을 교체하십시오: 배포 키, 클라우드 공급자 자격 증명, 레지스트리 토큰.

4. 잠금 파일 확인

잠금 파일(package-lock.json, yarn.lock)은 정확한 버전을 고정해야 합니다. 잠금 파일에 1.14.1이 있다면, 다시 생성하십시오.

# 제거 후 재생성
rm package-lock.json
npm install

커밋하기 전에 새 잠금 파일이 axios를 안전한 버전으로 해결하는지 확인하십시오.

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

API 호출을 위해 axios를 HTTP 클라이언트로 사용하는 경우, Apidog는 종속성 업데이트 후에도 통합이 올바른 요청을 보내고 있는지 확인하는 데 도움을 줄 수 있습니다.

axios@1.14.0으로 업데이트한 후, 기존 API 엔드포인트를 Apidog로 가져오고 빠른 회귀 테스트를 실행하여 동작이 변경되지 않았는지 확인하십시오. 이는 악성 버전이 요청 또는 응답 페이로드를 조작했을 수 있다고 우려하는 경우에 특히 유용합니다 — 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;
});

Apidog에서 업데이트된 axios 버전을 대상으로 전체 테스트 스위트를 실행하면 프로덕션에 푸시하기 전에 문서화된 깨끗한 기준선을 확보할 수 있습니다.

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

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

axios 공격은 이상 현상이 아닙니다. 이는 패턴입니다.

공통점: 코드 자체가 아닌 게시 계정에 대한 신뢰. npm의 모델은 관리자에게 게시 접근 권한을 부여하며, 관리자의 자격 증명이 침해되면 공격자는 그 신뢰를 상속받습니다.

실제로 도움이 되는 완화 조치:

조치 내용
잠금 파일(package-lock.json) 정확한 버전을 고정하고 자동 업데이트를 방지합니다.
CI의 npm audit 배포 전에 알려진 취약점을 표시합니다.
Socket.dev / Snyk 행동 분석 — CVE가 존재하기 전에도 의심스러운 패키지를 표시합니다.
npm의 2단계 인증 자격 증명 침해를 더 어렵게 만듭니다.
단기 토큰으로 npm publish 토큰 유출 시 노출 기간을 제한합니다.
PR에서 잠금 파일 읽기 코드 검토 시 예상치 못한 종속성 변경 사항을 포착합니다.

axios 팀은 그 이후로 장기 지속 npm 토큰이 문제의 일부였음을 인정하고 더 엄격한 게시 제어로 전환하고 있습니다. 그러나 해결책은 개별 패키지뿐만 아니라 생태계 전체에서 나와야 합니다.

침해 지표 (IOCs)

Socket의 분석에 따르면:

감염이 의심되면 security@npmjs.com으로 npm 보안팀에 보고하고 로그를 보존하십시오.

결론

axios 1.14.1 침해는 종속성 보안이 일회성 감사가 아니라 지속적인 프로세스임을 상기시켜 줍니다. 버전을 잠그고, CI에서 Socket과 같은 행동 분석 도구를 실행하고, 뭔가 이상해 보이면 자격 증명을 교체하고, 코드 검토 시 잠금 파일을 계속 검토하십시오.

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

버튼

FAQ

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

악성 axios 페이로드는 무엇을 하나요?plain-crypto-js@4.2.1을 가져오며, 이는 원격 접속 트로이 목마(RAT)를 포함하는 다단계 페이로드를 배포합니다. RAT는 원격 C2 서버에서 임의의 명령을 실행하고, 환경 변수 및 비밀을 유출하며, 재부팅 후에도 지속될 수 있습니다.

침해된 버전을 설치했는지 어떻게 알 수 있나요?npm list axios를 실행하십시오. 1.14.1 또는 0.30.4가 표시되면 영향을 받은 것입니다. 또한 npm list plain-crypto-js를 확인하십시오. 해당 패키지가 존재하면 악성 코드가 기기에서 실행된 것입니다.

axios만 업데이트하면 충분한가요?아닙니다. 업데이트는 향후 악성 종속성을 제거하지만, RAT가 이미 기기에 설치되어 지속될 수 있습니다. 침해된 버전을 설치했다면, 모든 비밀을 교체하고 기기에서 지속성 메커니즘을 감사하십시오.

공격자는 어떻게 관리자가 아니면서 npm에 게시할 수 있었나요?공격자는 관리자의 자격 증명을 침해하고 게시 접근 권한이 있는 장기 지속 npm 토큰을 악용한 것으로 보입니다. axios 팀은 조사 중이며 게시 제어를 강화하고 있습니다.

이것과 일반적인 취약점의 차이는 무엇인가요?취약점은 합법적인 코드의 결함입니다. 공급망 공격은 신뢰할 수 있는 게시 채널을 통해 악성 코드를 주입합니다. 침해된 코드는 axios GitHub 저장소에 존재한 적이 없으며, npm 게시물에 직접 주입되었습니다.

향후 공급망 공격으로부터 프로젝트를 어떻게 보호할 수 있나요?잠금 파일을 사용하고, CI에서 npm audit을 실행하고, 행동 분석을 위해 Socket.dev와 같은 도구를 추가하고, npm 계정에 2단계 인증을 활성화하고, 단기 게시 토큰을 사용하고, 코드 검토에서 잠금 파일 변경 사항을 감사하십시오.

Apidog에서 API 설계-첫 번째 연습

API를 더 쉽게 구축하고 사용하는 방법을 발견하세요