JavaScript 생태계를 강타한 대규모 보안 사고가 발생했으며, 특히 밈 토큰을 거래하는 사람들에게 큰 파장을 미칩니다. 탈중앙화 거래소(DEX)를 사용했거나 웹 앱에 지갑을 연결해 본 적이 있다면 이 문제는 당신에게도 영향을 줄 수 있습니다. 간단히 정리해 보고, 왜 한 전문가가 온체인 솔루션으로의 전환을 주장하는지 살펴보겠습니다.
사건은 2025년 9월 8일에 시작됐습니다. Qix-라는 개발자가 support@npmjshelp 같은 가짜 지원 이메일로 피싱에 당했고, 공격자들이 그의 NPM(즉 Node Package Manager, JavaScript 라이브러리의 중심 저장소) 자격 증명을 획득해 18개의 인기 패키지에 악성 업데이트를 배포했습니다. 여기엔 chalk(컬러 콘솔 출력), strip-ansi(문자열에서 ANSI 코드 제거), color-convert, debug, error-ex, ansi-styles 같은 유명 패키지가 포함됩니다. 이들 라이브러리는 주간 다운로드 합계가 20억 회가 넘을 정도로 사용 범위가 막대합니다.
암호화폐 사용자에게 무엇이 그렇게 무서운가요? 주입된 악성코드는 "crypto clipper"입니다. 이 악성코드는 애플리케이션에서 지갑 주소를 교체합니다. 두 가지 주요 수법이 있습니다: dApp(분산 애플리케이션) 내에서 수동적으로 주소를 대체하거나, 사용자가 서명하기 직전에 트랜잭션을 적극적으로 가로채는 방식입니다. 심지어 Levenshtein 알고리즘을 이용해 가짜 주소를 원래 주소와 거의 구분이 안 가게 만들어, 한 글자만 바뀌어도 사용자가 놓칠 수 있게 합니다.
밈 토큰 트레이더에게 이건 악몽과도 같습니다. 밈 코인은 Uniswap이나 Raydium 같은 플랫폼을 통해 빠른 거래로 성장하는데, 이런 플랫폼들은 종종 JavaScript 프런트엔드에 의존합니다. 만약 당신이 쓰는 앱이 이 오염된 라이브러리 중 하나를 불러온다면, 펑—당신의 SOL이나 ETH가 그 달 탐사 토큰이 아닌 해커의 주머니로 들어갈 수 있습니다. 지금까지 공격자가 알려진 지갑(예: 이더리움의 0xFc4a4858bafef54D1b1d7697bfb5c52F4c166976)으로 자금이 이동한 사례는 없지만, 자금 유출 가능성은 현실적입니다.
개발자들은 빌드 과정에서 "fetch is not defined" 같은 이상한 오류가 뜨면서 문제를 발견했습니다. 더 깊이 조사해보니 암호화폐를 표적으로 삼는 기능을 숨긴 난독화된 코드가 드러났습니다. 피싱에 사용된 도메인은 사건 며칠 전에 생성된 신생 도메인으로, 공격이 얼마나 빠르게 이루어졌는지 보여줍니다.
Ledger의 CTO Charles Guillemet는 초기에 경고를 발하며 공급망 공격에 대해 알렸고, 하드웨어 지갑을 사용하지 않는 한 온체인 거래를 중단하라고 권고했습니다. 하드웨어 지갑은 기기 상에서 트랜잭션을 수동으로 확인하게 해 소프트웨어 기반 속임수를 피할 수 있게 해줍니다.
이 난국에 대해 암호화폐 해설가 MartyParty는 핵심 업데이트를 지적했습니다: 이번 해킹은 단순한 NPM 계정 탈취가 아니라 GitHub 자격증명 도용에서 시작되었다는 것입니다. 그는 트윗에서 블록체인 프로젝트들에게 Web2 코드(전통적 웹 코드)를 체인으로 옮기라고 촉구했습니다. "현재 GitHub은 개발자 자격증명 탈취로 인해 위험합니다,"라고 그는 말했습니다. 그의 핵심 아이디어는 Web3와 연동되는 모든 Web2 패키지의 커밋에 멀티시그 Web3 서명을 요구하는 것입니다. 멀티시그는 코드 변경 같은 행동에 여러 서명이 필요하다는 의미로, 일종의 집단 투표처럼 보안성을 높입니다.
이 접근은 커뮤니티 주도의 프로젝트가 많은 밈 토큰 생태계와 완벽히 맞아떨어집니다. 온체인 코드로의 전환은 라이브러리를 Solana나 Ethereum 같은 블록체인에 직접 저장하고 검증함으로써 GitHub 같은 중앙화된 플랫폼에 대한 의존도를 낮출 수 있습니다.
지금 당장 안전을 지키기 위해, 특히 다음 대박 밈 코인을 찾고 있다면 다음을 권합니다:
- 하드웨어 지갑을 사용하고 서명 전에 항상 주소를 재확인하세요.
- 프로젝트에서는 package.json에 정확한 패키지 버전을 고정(pin)해 자동 업데이트로 인해 나쁜 버전이 들어오지 않도록 하세요.
- 더 깔끔하고 재현 가능한 빌드를 위해 "npm ci"를 "npm install" 대신 사용하세요.
- 개발자라면 GitHub 및 NPM 키를 즉시 교체하세요.
커뮤니티가 이 사건을 빠르게 잡아냈지만, 이 일은 우리가 운영하는 하이브리드 Web2–Web3 구조가 얼마나 취약한지 드러냈습니다. 밈 토큰의 인기가 계속 폭발하는 만큼 보안을 강화하는 것은 단순한 현명함을 넘어 필수입니다. Ledger의 블로그(Ledger's blog)나 NPM의 보안 알림 같은 출처의 업데이트를 지속적으로 확인해 앞서 나가시길 바랍니다.