13개의 npm 패키지, 48초, 하나의 가짜 지갑 SDK

npm 레지스트리에 대한 조직적인 공격으로 단 48초 만에 13개의 가짜 Coinbase 스타일 지갑 SDK 패키지가 배포되었습니다. 이는 악성 코드가 얼마나 빠르게 신뢰할 수 있는 도구로 위장할 수 있는지를 보여줍니다. 익숙한 이름만 보고 패키지를 설치하는 개발자는 자신도 모르게 앱에 가짜 SDK를 주입하게 될 수 있습니다.

해당 패키지들은 2026년 9월 7일 04:54:59에서 04:55:48(UTC) 사이에 등장했습니다. cb-wallet-httpscw-core와 같은 이름은 공식 @coinbase/wallet-sdk 네임스페이스와 유사합니다. 공격자들은 타이포스쿼팅(typo-squatting) 대신 익숙한 문자열을 이름 앞에 붙였으며, 동료의 추천이나 포럼 게시물을 통해 사용자들이 해당 패키지의 신뢰성을 믿게 만들기를 의도했습니다.

13개의 릴리스 모두 버전 0.0.1-security, 비어 있는 관리자 목록, 게시 직후 나타나는 기본 npm 메타데이터 등 동일한 최소한의 설정을 공유했습니다. 이와 똑같은 설정은 수작업이 아닌 자동화의 전형적인 특징인, 패키지를 대량으로 찍어내는 단일 스크립트가 사용되었음을 시사합니다.

npm의 개방형 게시 모델은 사전 검토 없이 누구나 패키지를 업로드할 수 있게 하여 이와 같은 공격을 가능하게 합니다. 과거의 공급망 사고 사례들은 악성 코드가 일단 의존성 트리(dependency tree)에 유입되면, 이를 설치하는 모든 머신에서 실행된다는 것을 보여주었습니다.

NPM은 아직 가해자를 특정하지 못했거나 초기 업로드 이후 코드가 어떻게 확산되었는지 설명하지 않았습니다. 또한 공격자들이 Coinbase 사용자를 구체적으로 겨냥한 것인지, 아니면 단순히 그럴듯해 보이는 이름들로 레지스트리를 도배하여 일부가 채택되기를 바란 것인지도 불분명합니다.

개발자가 지금 할 수 있는 일

  • 패키지를 추가하기 전에 게시자를 확인하십시오. 공식 SDK는 검증된 조직 스코프(organization scopes) 아래에 있습니다.
  • 알려진 악성 시그니처를 탐지하기 위해 의존성을 스캔하는 도구를 실행하십시오.
  • 락파일(lockfiles)에 정확한 버전을 고정하고, 검토 없이 새로 게시된 패키지를 가져오는 것을 피하십시오.
  • 관리자에게 2단계 인증을 요구하는 레지스트리를 선호하십시오.

주시해야 할 사항

  • npm이 유명 브랜드를 모방하는 패키지에 대한 심사를 강화할지 여부.
  • 사칭 이름을 차단하는 커뮤니티 주도의 블랙리스트.
  • 13개의 가짜 SDK에 대한 실제 악용 사례에 관한 보안 연구원들의 업데이트.

이번 사건은 익숙한 이름이 안전을 보장하지 않는다는 것을 증명합니다. 오픈 소스 생태계의 공급망 공격에 맞서 경계와 검증은 여전히 가장 강력한 방어 수단입니다.