AI 요약
세계에서 가장 인기 있는 HTTP 클라이언트 라이브러리인 axios가 메인테이너의 NPM 계정 탈취로 인한 치명적인 공급망 공격에 노출되었습니다. 공격자는 GitHub 저장소의 소스 코드를 건드리지 않고, NPM 레지스트리에 직접 악성 코드가 포함된 axios@1.14.1과 0.30.4 버전을 배포했습니다. 이 공격은 plain-crypto-js라는 위장 패키지를 의존성에 추가하여 postinstall 단계에서 원격 제어 목마(RAT)를 설치하도록 설계되었습니다. 특히 공격자는 탐지를 피하기 위해 18시간 전부터 정상적인 패키지를 미리 배포해 이력을 만드는 치밀함을 보였습니다. 이번 사고는 GitHub의 코드 리뷰와 CI/CD 보안 절차를 우회한 공격으로, 대형 오픈소스 패키지에 대한 무조건적인 신뢰의 위험성을 시사합니다.
핵심 인사이트
- 피해 규모 및 대상: 주간 1억 회 다운로드되는 NPM Top 10 라이브러리 axios의
1.14.1및0.30.4버전이 타겟이 됨. - 치밀한 사전 준비: 공격자는 악성 행위 18시간 전, 정상 코드로 구성된
plain-crypto-js@4.2.0을 배포하여 보안 알람을 피하기 위한 '계정 세탁' 과정을 거침. - 공격 타임라인: 공격 시작 후 39분 만에 두 가지 주요 버전 라인(0.x, 1.x)을 모두 장악했으며, NPM 측은 약 3시간 만에 해당 버전을 하이드(unpublish) 조치함.
- 보안 절차 우회: GitHub Actions의 OIDC Trusted Publisher 메커니즘을 사용하지 않고, 탈취한 토큰으로 레지스트리에 직접 수동 배포하여 모든 암호학적 서명 검증을 무력화함.
주요 디테일
- 은폐 기술: 악성 패키지는 설치 직후
postinstall스크립트를 통해 RAT을 다운로드하고package.json을 정상 버전으로 교체하여node_modules내 흔적을 자가 삭제함. - 신속한 데이터 유출: 악성 페이로드는
npm install시작 후 단 2초 만에 공격자 서버(sfrclak.com:8000)로 정보를 회신하기 시작함. - 식별 방법: 정상적인 1.x 버전과 달리 악성 버전인 1.14.1은 npm 레지스트리 메타데이터에
gitHead가 없으며 OIDC 바인딩이 결여되어 있음. - 권장 조치:
package-lock.json등에서 문제의 버전을 확인하고,npm cache clean --force를 통해 캐시를 삭제해야 하며, 버전 명시 시 캐럿(^)을 제거할 것이 권고됨. - 심각도: 단순 라이브러리 오염을 넘어 시스템 권한이 탈취될 수 있으므로, 감염 의심 시 SSH 키, 클라우드 AK/SK, DB 암호 등 모든 인증 정보를 갱신해야 함.
향후 전망
- 공급망 보안 강화: GitHub와 NPM 간의 신뢰 연결(OIDC) 강제화 및 패키지 배포 시 다요소 인증(MFA)의 중요성이 더욱 강조될 전망임.
- 의존성 관리 관행 변화: 개발자들이 패키지의 유명세에 의존하기보다 lockfile 관리와
ignore-scripts옵션 사용 등 보다 방어적인 관리 기법을 도입할 가능성이 높음.
출처:juejin
