npm 웜 'ChainDrop', 서명된 릴리스 파이프라인까지 악용

3분 npm공급망 공격Shai-HuludSLSA
최근 30일 조회수 — 좋아요 —

핵심 요약

npm 공급망 웜 Shai-Hulud의 변종 ChainDrop이 SLSA 서명 절차를 통과해 4시간 만에 400여 패키지를 감염시켰다.

npm 공급망을 노리는 웜 ‘Shai-Hulud’가 최신 변종 ‘ChainDrop’에서 서명된 정상 릴리스 파이프라인을 그대로 악용해 확산 범위를 넓혔다. 더뉴스택에 따르면 ChainDrop은 지난 8월 4일 등장해 네 시간도 안 되는 사이에 400개 이상의 패키지를 감염시켰는데, 감염된 각 버전이 합법적이고 암호학적으로 서명된 릴리스 절차를 거치면서 SLSA 출처 증명(provenance attestation)까지 정상적으로 발급받았다. 패키지 변조 여부를 검증하기 위해 만든 바로 그 장치를 뚫고 지나간 셈이다.

Shai-Hulud은 2025년 9월 15일 npm 레지스트리에서 처음 관측됐다. 유지관리자가 npm publish를 실행하지도, 풀 리퀘스트가 병합되지도 않았는데 새 버전이 저절로 올라오기 시작했고, 각 버전에는 또 다른 패키지를 자동으로 감염시키는 코드가 숨어 있었다. 9월 14일부터 18일까지 나흘간 500개 이상의 패키지 버전이 변조됐고, 탈취한 자격증명은 매번 ‘Shai-Hulud’라는 이름의 새 공개 깃허브 저장소에 업로드됐다. 이름은 프랭크 허버트의 소설 『듄』에 등장하는, 길들일 수 없는 존재인 모래벌레에서 따왔다.

두 달 뒤인 11월 24일에는 더 큰 규모의 ‘Shai-Hulud 2.0’이 나타나 796개 패키지를 백도어로 감염시켰다. 이 버전은 실행 시점을 설치 과정 더 앞쪽으로 옮겨 개발자가 설치를 중간에 막을 여지를 없앴고, 훔칠 자격증명이나 퍼져나갈 경로를 찾지 못하면 사용자의 홈 디렉터리를 삭제하는 방식으로 마무리했다. 2026년 봄에는 ‘Mini Shai-Hulud’가 등장해 공격 대상을 일반 개발자 시크릿에서 Claude, Codex, Cursor, Gemini 같은 AI 코딩 도구의 자격증명으로 좁혔다. AI 코딩 도구가 관심을 끄는 프로젝트마다 관여하고 있으니 노릴 가치가 있다고 판단한 셈이다.

ChainDrop의 명령 인프라는 이더리움(Ethereum) 스마트 컨트랙트 안에 마련돼 있어, 도메인 차단 목록으로는 대응이 무의미하다는 점도 눈에 띈다.

동작 방식 자체는 단순하다. 감염된 npm 패키지는 설치 후 스크립트(Shai-Hulud의 경우 bundle.js 파일 하나)를 실행해 감염된 기기에서 npm·깃허브 개인 액세스 토큰, AWS·GCP 시크릿, 클라우드 인스턴스의 메타데이터 서비스에서 뽑아낼 수 있는 정보까지 자격증명으로 보이는 모든 것을 찾는다. 이때 정상적인 오픈소스 시크릿 스캐닝 도구인 Trufflehog를 내려받아 찾아낸 자격증명이 실제로 유효한지 확인하는 데 쓴다.

깃허브 토큰을 찾으면 그 내용을 새 공개 저장소로 빼돌리고, 접근 가능한 비공개 저장소는 공개로 전환한 뒤 원래 이름에 “-migration”을 붙여 재게시한다. 마치 피해자가 직접 이전을 요청한 것처럼 보이게 하려는 의도로 읽힌다. npm 토큰을 찾으면 레지스트리 API를 호출해 해당 개발자가 관리하는 모든 패키지 목록을 확인하고, 각각을 내려받아 설치 후 스크립트 단계에 자신을 주입한 뒤 버전을 올려 재배포한다.

더뉴스택은 이 사태의 근본 원인을 패키지 매니저와 레지스트리 인프라가 공유하는 전제, 즉 “설치한다는 것은 설치 과정이 가진 권한으로 패키지 안에 든 것을 검증 없이 실행한다는 뜻”이라는 가정에서 찾는다. 게시(publish) 작업을 사람이 직접 해야 했던 시절에는 이 가정이 크게 문제되지 않았지만, 이미 환경 안에 있는 비인간 에이전트가 게시를 자동화할 수 있게 된 지금은 더 이상 안전하지 않다고 지적한다. 웜 입장에서는 누구를 설득할 필요 없이 탈취한 자격증명 하나와 설치 스크립트만 있으면 되고, 일단 그렇게 확보한 것을 레지스트리가 신뢰와 신용으로 보증해주면 이후의 모든 의존성이 그 신뢰를 다시 강화하는 구조다.

읽기 목록은 이 브라우저에 저장됩니다.

출처

  1. Shai-Hulud: Whoever controls your package registry controls your pipeline — The New Stack

이 글은 위 출처를 근거로 자동 생성된 뒤 발행됐습니다. 원문을 함께 확인해 주세요. 교차 보도 없이 단독 출처로 작성됐습니다.