22분 만에 323개 npm 패키지가 감염됐어요. 지금 이 순간에도 AntV 생태계 패키지를 설치하는 개발자의 AWS 키가 빠져나가고 있을 수 있어요.
이게 어떻게 된 건데요?
2026년 5월 19일 오전 1시 39분(UTC), npm 생태계에서 이상한 일이 시작됐어요. 22분 동안 639개의 악성 패키지 버전이 한꺼번에 배포됐고, 그 안에는 AntV 데이터 시각화 라이브러리(@antv/g2, @antv/g6, @antv/x6, @antv/l7, @antv/s2)와 echarts-for-react, timeago.js가 모두 포함돼 있었어요.
공격자 그룹 TeamPCP는 npm 유지관리자 계정 'atool'을 탈취했어요. 이 계정은 AntV 생태계를 포함한 수백 개 패키지의 배포 권한을 갖고 있었거든요. 계정 하나가 뚫리자 도미노처럼 전체 생태계가 흔들렸어요.
가장 무섭다고 느낀 건 속도예요. 사람이 반응할 틈도 없이 22분 만에 끝났다는 거예요. 보안팀이 알아채고 조치에 들어갈 때 이미 수만 명의 개발자가 CI/CD 파이프라인에서 감염된 버전을 설치하고 있었을 수 있어요.
뭐가 문제인 건데요?
이번 공격에서 주목해야 할 건 두 가지예요. 탈취하는 자격증명의 범위와 Sigstore 증명 위조.
| 패키지 | 주간 다운로드 | 감염 상태 |
|---|---|---|
| echarts-for-react | ~110만 | 감염 확인 |
| @antv/g2 | 수십만 | 감염 확인 |
| @antv/g6 | 수십만 | 감염 확인 |
| @antv/x6 | 수십만 | 감염 확인 |
| @antv/l7 | 수만 | 감염 확인 |
| timeago.js | ~150만 | 감염 확인 |
| size-sensor | 수십만 | 감염 확인 |
| canvas-nest.js | 수만 | 감염 확인 |
악성 페이로드(~499KB 난독화 JavaScript)는 npm install 중 preinstall 훅을 통해 자동 실행돼요. AWS, Google Cloud, Azure, GitHub, npm 토큰, SSH 키, Kubernetes, Vault, Stripe, 데이터베이스 연결 문자열까지 20종 이상의 자격증명을 체계적으로 긁어가요. 심지어 Docker 컨테이너 탈출까지 시도해요.
그리고 한 가지 더 — 이 공격이 특히 교활한 건 Sigstore 증명을 위조했다는 점이에요. CI/CD 환경에서는 GitHub Actions OIDC 토큰을 메모리에서 직접 추출해서 정상적인 Sigstore 서명 인증서를 발급받아요. 패키지에 초록색 '출처 인증' 배지가 붙어 있어도 안심할 수 없다는 거예요.
탈취된 데이터는 t.m-kosche[.]com:443으로 전송되고, 백업으로 Session P2P 네트워크(filev2.getsession[.]org)를 사용해요. 더 나아가 훔친 GitHub 토큰으로 2,500개 이상의 공개 저장소를 만들어 데이터를 분산 보관했어요.
핵심만 정리: 지금 당장 해야 할 것
- 영향 받은 패키지 확인
프로젝트의package.json과package-lock.json에서 @antv/*, echarts-for-react, timeago.js를 검색하세요.npm ls @antv/g2등으로 의존성 트리도 확인해요. - 먼저 지속성 아티팩트를 제거하세요 — 자격증명 교체 전에
악성 코드는.claude/settings.json 훅, VS Code 태스크, systemd 데몬으로 지속성을 심어요. 자격증명을 먼저 교체하면 데몬이 새 자격증명을 또 탈취할 수 있어요. 제거 순서가 중요해요. - 자격증명 즉시 교체
AWS 키, GCP 서비스 계정, Azure 자격증명, GitHub PAT, npm 토큰, SSH 키를 모두 교체하세요. "혹시 모르니까"가 아니라 "이미 탈취됐을 가능성이 높으니까"예요. - GitHub 저장소 감사
"niagA oG eW ereH :duluH-iahS" 문자열(Shai-Hulud: Here We Go Again의 역순)을 GitHub 검색으로 찾아보세요. 공격자가 만든 데이터 덤프 저장소를 확인할 수 있어요. - npm 계정 2FA 설정
GitHub가 61,274개 npm 액세스 토큰을 무효화했어요. 새로 발급받고 반드시 2FA를 활성화하세요. 이번 공격의 시작점이 계정 탈취였어요. - 향후 설치 시 --ignore-scripts 사용
npm install --ignore-scripts를 사용하면 preinstall/postinstall 훅 실행을 막을 수 있어요. CI/CD 파이프라인 기본값으로 설정하는 것을 권장해요.





