무슨 일이 있었나
JFrog는 11개의 합법적 소유자에 걸친 42개의 무장된 타사 GitHub 저장소를 testmetest npm 캠페인과 연결했습니다. 악성 npm 릴리스는 binding.gyp 명령 확장을 사용하여 설치 중에 코드를 실행하고, GitHub 및 npm 자격 증명을 탈취하고, 저장소 및 CI 구성을 오염시키며, AI 코딩 어시스턴트 및 IDE용 실행 훅을 심는 페이로드를 해독합니다 — Claude Code 설정에 SessionStart 훅을 주입하고 VS Code에 작업을 주입합니다. GitHub 측은 12.9-13.7 MB의 다형성 래퍼와 숨겨진 게시자를 포함하여 GitHub Actions를 통해 더 많은 악성 릴리스를 생성하도록 설계되었습니다. 이후 전달은 사전 컴파일된 네이티브 애드온(addon.node)으로 전환되어 런타임에 .napi_cache 도트파일을 해독하여 실제 페이로드를 실행하며, CI/컨테이너 검사를 우회합니다.
왜 중요한가
이것은 AI 코딩 에이전트 구성/훅 표면(SessionStart 훅, VS Code 작업, CI 구성)을 정확히 노리는 공급망 웜으로, 정상적인 패키지/저장소 설치를 자격 증명 탈취 및 개발자가 이미 신뢰하는 레지스트리를 통한 자가 전파로 전환합니다. 에이전트 실행 공격 클래스와 CVE 시드가 전달하지 않는 활성 캠페인 신호를 드러냅니다.
공격 경로
악성 npm 패키지 설치(binding.gyp 명령 확장) 또는 탈취된 GitHub 저장소 사용; 페이로드가 GitHub/npm 자격 증명을 탈취하고 AI 코딩 어시스턴트 구성에 SessionStart 훅을 주입한 후 추가 저장소/패키지로 전파됩니다.
영향받는 시스템
npm 생태계(testmetest 계열 패키지, 예: event-bus-lite-testmetest, path-stream-utils-testmetest, @iobandamwer/* 헬퍼 패키지) 및 탈취된 GitHub 저장소; Claude Code / VS Code / AI 코딩 에이전트 구성 표면.
완화 방안
의존성을 고정하고 검증하며, 복제한 저장소의 SessionStart 훅과 VS Code 작업을 감사하고, npm 신뢰 게시 토큰을 검증하며, GitHub Actions에서 단기간의 알 수 없는 게시자 워크플로를 모니터링하고, testmetest 계열 패키지/소유자 이름을 지표로 취급하십시오.