손상된 npm 패키지를 통해 암호화폐 지갑을 대상으로 한 대규모 JavaScript 공급망 공격은 대부분 통제되었으며, 그 결과 단 1,043달러의 암호화폐만 도난당했습니다.

요약

최근 광범위하게 발생한 JavaScript 공급망 공격은 역사상 가장 큰 npm 침해로 확인되었으며, 인기 있는 GitHub 패키지에 대한 악성 업데이트를 통해 암호화폐 지갑을 목표로 삼았습니다. 잠재적인 광범위한 영향에도 불구하고, 99%의 클라우드 환경에서 사용되는 패키지에 영향을 미치고 해당 환경의 10%에 악성 코드가 존재했음에도 불구하고, 이 공격으로 인한 금전적 손실은 미미하여 총 1,043달러의 암호화폐만 도난당했습니다. 이러한 제한된 영향은 2시간 이내의 빠른 탐지, 좁게 설계된 페이로드, 그리고 기존 보호 조치와 결합된 개발자 보안 인식 증가에 기인합니다.

사건 상세

2025년 9월 8일에 발생한 이 사건은 위협 행위자들이 정교한 피싱 캠페인을 통해 개발자 Qix(Josh Junon)의 npm 계정을 제어하게 된 것과 관련이 있습니다. 공격자는 가짜 도메인에서 온 설득력 있는 2단계 인증(2FA) 재설정 이메일을 사용하여 유지 관리자의 자격 증명을 획득했습니다. 이 무단 액세스를 통해 debug, chalk, supports-hyperlinks, strip-ansi를 포함하여 주간 수십억 건의 다운로드를 기록하는 18개의 인기 npm 패키지의 악성 버전이 게시될 수 있었습니다. 악성 버전은 UTC 13:16부터 약 15:20까지 약 2시간 동안 npm 레지스트리에 활성화되어 있었으며, 이때 커뮤니티가 의심스러운 코드를 식별하고 유지 관리자가 깨끗한 버전으로 되돌렸습니다.

금융 메커니즘 및 공격 벡터

주입된 악성 코드는 서버 측 환경을 목표로 하지 않고 브라우저 환경 내에서 암호화폐 거래 및 Web3 API 호출을 가로채는 데 중점을 두었습니다. 공격은 지갑 하이재킹네트워크 응답 조작이라는 두 가지 주요 메커니즘을 사용했습니다. 지갑 하이재킹window.ethereum에 후킹하여 MetaMask와 같은 지갑에 대한 호출을 가로채고, 나가는 거래를 공격자가 제어하는 ​​주소로 조용히 리디렉션하는 것을 포함했습니다. 네트워크 응답 조작fetchXMLHttpRequest를 재정의하여 API 응답에서 블록체인 주소를 스캔한 다음 Levenshtein “가장 가까운 일치” 알고리즘을 사용하여 시각적으로 유사한 공격자 주소로 대체했습니다. 이 공격은 Ethereum, Bitcoin, Litecoin, Tron, BCH, Solana를 포함한 다중 체인 대상을 지원했습니다. 1,043달러의 최소 재정적 영향은 부분적으로 주입된 코드의 치명적인 버그로 인해 CI/CD 파이프라인이 충돌하여 예상보다 일찍 감지된 것에 기인합니다.

광범위한 영향 및 보안 태세

이 사건은 오픈 소스 소프트웨어 공급망의 내재된 취약성, 특히 전이적 종속성 및 유지 관리자 계정 보안과 관련하여 강조합니다. Wiz 원격 측정에 따르면 99%의 클라우드 환경에 이 공격의 대상이 된 패키지 인스턴스가 하나 이상 포함되어 있었으며, 침해 기간 동안 악성 코드가 해당 환경의 10%에 도달했습니다. 이 공격은 암호화폐 생태계에서 정교한 소프트웨어 공급망 침해가 증가하는 추세를 보여줍니다. 장기적인 영향에는 Web3 개발 커뮤니티 전반의 소프트웨어 공급망 보안에 대한 경계와 조사의 증가가 포함됩니다. 이 사건은 소프트웨어 BOM(SBOM) 생성, SLSA 프레임워크 구현, 정기적인 종속성 감사, 패키지 잠금 파일 사용, 중요 애플리케이션을 위한 개인 npm 레지스트리 고려와 같은 보다 강력한 보안 관행의 채택을 가속화할 것으로 예상됩니다. 이러한 조치는 신뢰할 수 있는 개발 종속성이 금융 악성웨어 배포의 벡터가 되는 것과 관련된 위험을 완화하고 분산 금융의 전반적인 보안 태세를 강화하는 데 중요합니다.