2025년 8월 26일, 공격자들이 탈취한 npm 토큰으로 Nx 패키지 생태계를 침해했다. 악성 버전의 postinstall 스크립트가 LLM을 활용해 파일시스템을 스캔하고 시크릿·자격증명을 피해자의 GitHub 계정에 생성된 저장소로 유출하는 신형 공격 패턴이다. 약 4시간 만에 패키지가 제거됐으며, Vercel 빌드는 4가지 공격 성공 조건을 동시에 충족하지 않아 실질적 피해가 없었다.
핵심 포인트- 공격 타임라인: 2025년 8월 26일 18:32 EDT 악성 패키지 배포 → 22:44 EDT 제거 완료. 약 4시간 노출.
- LLM 기반 시크릿 스캔: postinstall 스크립트가 LLM을 이용해 파일시스템에서 시크릿·자격증명을 지능적으로 탐색 — 단순 경로 패턴 매칭보다 진화된 탐색.
- 유출 메커니즘: 탈취한 시크릿을 피해자의 GitHub 계정에 새로 만든 저장소로 push.
- 공격 성공 4조건: GitHub CLI + GitHub 인증 토큰 + Claude Code·Gemini·Q CLI 중 하나 + 침해된 Nx 패키지 설치 — 모두 동시 충족 필요.
- Vercel 빌드 보호: 4조건 모두 기본 미설치 → 피해 빌드 0건 확인.
상세 정리- 공격 진입점: npm 토큰 탈취(경로 미공개)로 Nx 공식 패키지를 악성 버전으로 교체 — 공급망 신뢰를 악용.
- postinstall 활용 이유: 패키지 설치 시 자동 실행되는 npm lifecycle hook — 명시적 코드 실행 없이 악성 코드 트리거.
- LLM 기반 스캔의 위험성: AI가 .env, ~/.ssh/id_rsa, 클라우드 credential 파일 등을 컨텍스트 이해로 식별 → 단순 파일명 패턴보다 탐지 범위 넓음.
- GitHub 계정 악용: 탈취 자격증명을 외부 서버가 아닌 피해자 본인 GitHub 계정 저장소로 push — 방어 레이어 우회.
- AI CLI 도구가 새 위험 벡터: Claude Code·Gemini·Q CLI가 GitHub 토큰을 저장해 공격 체인의 핵심 고리 역할.
- Vercel 조치: 악성 패키지 npm 제거, 침해 패키지 포함 빌드 캐시 삭제, 영향 사용자 security@vercel.com으로 직접 이메일.
- 교훈: npm 토큰 최소 권한 관리, postinstall 스크립트 감사, AI CLI 도구 토큰 보관 위치 확인, CI 빌드 환경의 불필요 credential 제거.
왜 읽나npm 공급망 공격의 진화(LLM 기반 시크릿 스캔)와 AI CLI 도구가 만드는 새 취약 지점을 이해하고 자체 빌드 보안을 점검하려는 DevSecOps·보안 엔지니어에게 유용.