2026년 3월 31일, 가장 널리 사용되는 HTTP 클라이언트 라이브러리인 axios의 특정 버전에 악성 코드가 삽입되어 npm에 배포되는 사태가 일어났다.
공격자는 axios의 주요 유지관리자 계정 자격 증명을 탈취해 GitHub Actions CI/CD 파이프라인을 우회하고 수동으로 악성 패키지를 게시했다. 배포된 악성 버전은 axios@1.14.1과 axios@0.30.4 두 가지다.
두 버전 모두 plain-crypto-js@4.2.1이라는 가짜 의존성을 삽입하고 있었다. 이 가짜 패키지는 postinstall 스크립트를 통해 원격 접근 트로이목마(RAT, Remote Access Trojan)를 시스템에 설치한다.
RAT는 macOS, Windows, Linux를 모두 대상으로 동작하며, 설치된 후 C2(Command and Control) 서버(sfrclak.com:8000)와 통신하여 2단계 페이로드를 내려받는다. 특히, 설치를 마치면 악성 코드와 흔적을 삭제하고 깨끗한 package.json으로 교체해 포렌식 탐지를 교묘하게 회피한다는 특징이 있다.
영향을 받은 패키지 정보
axios@1.14.1(shasum: 2553649f232204966871cea80a5d0d6adc700ca)axios@0.30.4(shasum: d6f3f62fd3b9f5432f5782b62d8cfd5247d5ee71)plain-crypto-js@4.2.1(shasum: 07d889e2dadce6f3910dcbc253317d28ca61c766)
영향 확인 및 대응 절차
현재 관리 중인 프로젝트가 감염되었는지 확인하고 대응하려면 다음 절차를 따른다.
- 버전 점검: 프로젝트 루트에서
npm list axios명령을 실행하거나package-lock.json을 검사해1.14.1또는0.30.4버전이 설치되어 있는지 확인. - 의존성 확인:
node_modules/plain-crypto-js가 있는지 확인. - 감염 여부 판단: 운영 체제별 RAT 파일이 발견된다면, 시스템이 이미 완전히 감염된 것..
- 비밀키 교체: CI/CD 로그 등에서 해당 버전을 설치한 이력이 확인된다면, 공격자에게 환경 변수와 자격 증명이 유출되었을 가능성이 매우 높다. 즉시 모든 비밀키, 토큰, 액세스 토큰, 암호, 인증서를 새 것으로 교체해야 한다.
package-lock.json이나 pnpm-lock.yaml을 철저히 관리하여 오픈소스 패키지 사용 시 자동 업데이트 범위를 제한해야 한다. 무지성으로 업데이트하다가는 걸리기 딱 좋다. 신뢰하지 않은 버전이 설치되는 것을 방지하는 것이 핵심인듯.