axios npm 공급망 공격 확산... 악성 1.14.1·0.30.4 즉시 격리 필요

2026년 3월 31일 Hacker News에서는 JavaScript ecosystem 전반에 영향을 줄 수 있는 npm supply-chain incident가 빠르게 확산됐다. StepSecurity가 axios의 악성 릴리스를 공개한 뒤 같은 날 HN thread는 720 points와 233 comments를 넘겼고, 가장 널리 쓰이는 HTTP client 중 하나가 공격 표적이 됐다는 점에서 충격이 컸다.

무슨 일이 있었나

StepSecurity incident report에 따르면 문제의 버전은 axios@1.14.1과 axios@0.30.4다. 보고서는 이 릴리스들이 lead maintainer의 탈취된 npm credentials를 이용해, 프로젝트가 평소 사용하던 GitHub Actions와 OIDC Trusted Publisher 경로 밖에서 수동으로 발행됐다고 설명한다. 공격자는 계정 email도 ProtonMail 주소로 바꿨다고 한다.

악성 axios package에는 plain-crypto-js@4.2.1이라는 runtime dependency가 추가됐다.

이 dependency는 axios source에서 import되지 않으며, 설치 과정에서 postinstall script를 실행시키기 위한 용도라고 StepSecurity는 분석했다.

보고서에 따르면 해당 script는 macOS, Windows, Linux를 노리는 cross-platform RAT dropper로 동작했고, live C2 server와 통신했다.

타임라인도 구체적이다. 먼저 정상처럼 보이는 decoy package가 올라왔고, 이후 악성 plain-crypto-js@4.2.1, 그리고 39분 간격으로 두 개의 axios release가 배포됐다. 이후 npm은 문제가 된 axios 버전을 내리고 dependency를 security-holder stub으로 교체했다. StepSecurity의 결론은 분명하다. axios@1.14.1 또는 axios@0.30.4를 설치했다면 시스템이 침해됐다고 가정해야 한다.

왜 중요한가

이번 사건은 axios source code 내부에 악성 코드를 직접 심지 않았다는 점에서 특히 위험하다. 공격자는 registry metadata와 dependency graph를 이용해 설치 시점 실행을 유도했다. 즉 application code diff만 보는 방식으로는 놓치기 쉽고, registry provenance, trusted publishing, 예상치 못한 postinstall 동작을 함께 검증해야 한다는 뜻이다.

원문은 StepSecurity write-up, 커뮤니티 반응은 Hacker News thread에서 확인할 수 있다.