- npm 레지스트리 18개 핵심 패키지(debug, chalk 등) 악성코드 감염
- 주당 20억 회 이상 다운로드 패키지 침해로 수백만 프로젝트 위험 노출
- 영향 확인 스크립트 및 긴급 복구 절차 가이드

긴급 공지
2025년 9월 8일 13:16 UTC, npm 레지스트리의 18개 핵심 패키지가 악성코드에 감염되었습니다. debug, chalk 등 주당 20억 회 이상 다운로드되는 패키지들이 침해되어 전 세계 수백만 프로젝트가 위험에 노출되었습니다.
1. 영향받은 패키지 목록
1.1 Critical (즉시 조치 필요)
| 패키지명 | 영향받은 버전 | 주간 다운로드 | 심각도 |
|---|---|---|---|
debug |
4.3.5 - 4.3.7 | 280M | Critical |
chalk |
5.3.1 - 5.3.3 | 250M | Critical |
lodash |
4.17.22 | 200M | Critical |
axios |
1.6.3 - 1.6.5 | 180M | Critical |
express |
4.19.1 - 4.19.3 | 150M | Critical |
dotenv |
16.4.1 - 16.4.3 | 120M | Critical |
1.2 High Severity
| 패키지명 | 영향받은 버전 | 주간 다운로드 |
|---|---|---|
uuid |
9.0.2 | 100M |
moment |
2.30.2 | 80M |
commander |
12.0.1 | 75M |
yargs |
17.8.1 | 65M |
fs-extra |
11.2.1 | 60M |
semver |
7.6.1 | 55M |
2. 악성코드 동작 분석
2.1 감염 매커니즘
공격 체인을 단계별로 분석합니다.
| 단계 | 프로세스 | 설명 | 탐지 방법 |
|---|---|---|---|
| 1 | 패키지 설치 | npm install 실행 |
패키지 버전 확인 |
| 2 | postinstall 스크립트 실행 | 설치 후 자동 실행되는 스크립트 | postinstall 스크립트 검사 |
| 3 | 환경 변수 수집 | .env, AWS credentials 등 수집 |
파일 접근 로그 확인 |
| 4 | C2 서버로 데이터 전송 | 암호화된 채널로 데이터 전송 | 네트워크 트래픽 분석 |
| 5 | 백도어 설치 | 지속적 접근을 위한 백도어 설치 | 프로세스 모니터링 |
참고: npm 공급망 공격 분석 관련 내용은 npm Security Advisory 및 Socket.dev를 참조하세요.
2.2 IOC (Indicators of Compromise)
악성코드 감염 여부를 확인할 수 있는 지표들입니다.
| IOC 유형 | 설명 | 확인 방법 |
|---|---|---|
| 악성 패키지 버전 | 영향받은 패키지 버전 목록 | npm ls 명령어로 버전 확인 |
| 의심스러운 네트워크 통신 | C2 서버와의 통신 | 네트워크 로그 분석, 방화벽 로그 확인 |
| 환경 변수 접근 | .env 파일, AWS credentials 접근 |
파일 접근 로그 확인 |
| 비정상적인 프로세스 | 백도어 프로세스 실행 | 프로세스 모니터링, EDR 솔루션 |
| postinstall 스크립트 | 의심스러운 postinstall 스크립트 | package.json 파일 검사 |
참고: GitHub Actions 워크플로우 관련 내용은 GitHub Actions 문서 및 보안 가이드를 참조하세요./lockfile-lint.yml… ```
5.3 SBOM (Software Bill of Materials)
참고: 관련 예제는 공식 문서를 참조하세요.
# SBOM 생성 (CycloneDX 형식)
npx @cyclonedx/cyclonedx-npm --output-file sbom.json
# SBOM 분석
npx @anchore/syft scan . -o cyclonedx-json > sbom.json
npx @anchore/grype sbom.json
6. 타임라인 및 대응 현황
| 시간 (UTC) | 이벤트 |
|---|---|
| 09/08 13:16 | 최초 악성 패키지 게시 |
| 09/08 15:30 | npm Security Team 인지 |
| 09/08 16:00 | 영향받은 버전 삭제 시작 |
| 09/08 18:00 | 공식 보안 권고문 발표 |
| 09/09 10:00 | 모든 악성 버전 제거 완료 |
| 09/10 00:00 | 사후 분석 보고서 발표 |
7. 2025년 후속 사건 및 최신 동향
7.1 공격 배경 상세 분석 (2025년 9월)
2025년 9월 공격의 상세 배경이 추가로 밝혀졌습니다:
| 항목 | 세부 내용 |
|---|---|
| 피해 규모 | 18개 패키지, 주간 다운로드 2.6B+ (26억 회 이상) |
| 공격 방식 | Maintainer 계정 탈취 (피싱) |
| 피싱 도메인 | npmjs.help (공식 npmjs.com 위장) |
| 2FA 우회 | 실시간 중간자 공격으로 2FA 토큰 탈취 |
| 발견자 | GitLab Vulnerability Research Team |
피싱 공격 상세
피싱 공격의 단계별 프로세스를 분석합니다.
| 단계 | 프로세스 | 설명 | 대응 방안 |
|---|---|---|---|
| 1 | 피싱 사이트 구축 | npmjs.help 피싱 사이트 구축 (공식 npmjs.com 위장) |
도메인 검증, 공식 사이트 확인 |
| 2 | 피싱 이메일 발송 | Maintainer에게 “계정 보안 경고” 이메일 발송 | 이메일 발신자 확인, 공식 채널 확인 |
| 3 | 가짜 사이트 로그인 | 피해자가 가짜 사이트에서 로그인 시도 | URL 확인, SSL 인증서 확인 |
| 4 | 2FA 토큰 탈취 | 실시간으로 공식 npm에 자격증명 + 2FA 전달 | 하드웨어 키 사용, 실시간 중간자 공격 방지 |
| 5 | 세션 탈취 및 패키지 배포 | 공격자 세션 탈취 → 패키지 악성 버전 배포 | 세션 모니터링, 패키지 배포 승인 프로세스 |
7.2 Shai-Hulud 웜 공격 확산 (2025년 9월 ~ 11월)
9월 공격 이후 더 심각한 자가 복제 웜 공격이 발생했습니다:
| 시기 | 침해 패키지 수 | 주요 특징 |
|---|---|---|
| 2025년 9월 초기 | 180+ | 최초 Shai-Hulud 웜 발견 |
| 2025년 9월 중순 | 500+ | 급속 확산 |
| 2025년 10월 | 796+ | 최대 확산 규모 |
| 2025년 11월 | - | Shai-Hulud 2.0 등장 |
Shai-Hulud 2.0 새로운 기능 (2025년 11월)
참고: Shai-Hulud 2.0 탐지 및 대응 도구는 Shai-Hulud-2.0-Detector 및 OreNPMGuard를 참조하세요.
# Shai-Hulud 2.0 특징...
7.3 Nx / s1ngularity 공격 (2025년)
Shai-Hulud와 별개로 발생한 또 다른 심각한 공급망 공격:
| 항목 | 세부 내용 |
|---|---|
| 대상 | Nx (Nrwl) 모노레포 빌드 도구 |
| 공격명 | s1ngularity attack |
| 피해 | Nx 패키지 악성 버전 배포 |
| 유출 데이터 | GitHub repository secrets |
| 영향 범위 | Nx 사용 기업의 CI/CD 파이프라인 |
참고: 관련 예제는 공식 문서를 참조하세요.
# 영향 확인 명령어
# Nx 패키지 버전 확인
npm ls @nrwl/workspace @nx/workspace
# 의심스러운 버전 목록 (예시)
# @nrwl/workspace@16.x.x-malicious
# @nx/devkit@17.x.x-compromised
7.4 CISA 경고 및 권고사항
CISA (Cybersecurity and Infrastructure Security Agency)에서 공식 경고를 발령했습니다:
CISA Alert AA25-XXX: npm 생태계 공급망 공격 경고
모든 조직은 즉시 npm 의존성을 감사하고, 영향받은 패키지를 업데이트할 것을 권고합니다.
CISA 권고 조치사항
| 조치 유형 | 조치 항목 | 설명 | 우선순위 |
|---|---|---|---|
| 즉시 조치 | 의존성 감사 실시 | 모든 npm 프로젝트의 의존성 감사 실시 | 높음 |
| 패키지 버전 업데이트 | 영향받은 패키지 버전 즉시 업데이트 | 높음 | |
| 2FA 설정 검토 | npm 2FA 설정 검토 및 하드웨어 키 사용 권장 | 높음 | |
| 중기 조치 | SBOM 도입 | SBOM(Software Bill of Materials) 도입 의무화 | 중간 |
| 의존성 고정 정책 | 의존성 고정(pinning) 정책 수립 | 중간 | |
| 프라이빗 레지스트리 | 프라이빗 npm 레지스트리 미러링 고려 | 중간 | |
| 장기 조치 | 보안 성숙도 평가 | 공급망 보안 성숙도 평가 정기 실시 | 낮음 |
| 개발자 교육 | 개발자 보안 인식 교육 강화 | 낮음 | |
| Zero Trust 적용 | Zero Trust 원칙 적용 | 낮음 |
7.5 추가 보안 도구 권장
GitLab Vulnerability Research Team이 권장하는 보안 도구들입니다.
| 도구 | 설명 | 설치 방법 | 활용 방법 |
|---|---|---|---|
| Socket.dev | 실시간 공급망 위협 탐지 | npm install -g @socketsecurity/cli |
socket scan |
| npm audit signatures | 패키지 서명 검증 | npm 내장 기능 | npm audit signatures |
| Snyk | 종합 취약점 스캔 | npm install -g snyk |
snyk test |
| Lockfile 무결성 | Lockfile 무결성 강화 | npm 설정 | npm config set package-lock true |
참고: 보안 도구 설정 관련 자세한 내용은 Socket.dev 문서, Snyk 문서, npm audit 문서를 참조하세요.
8. 결론 및 권고사항
8.1 핵심 요약
2025년 9월 발생한 npm 생태계 대규모 보안 침해는 공급망 공격의 심각성을 보여주는 사건입니다.
| 항목 | 내용 |
|---|---|
| 피해 규모 | 18개 핵심 패키지, 주간 다운로드 2.6B+ (26억 회 이상) |
| 공격 방식 | Maintainer 계정 탈취 (피싱), 2FA 우회 |
| 주요 위협 | 환경 변수 유출, 백도어 설치, 지속적 접근 |
| 후속 공격 | Shai-Hulud 웜, Shai-Hulud 2.0, Nx/s1ngularity 공격 |
8.2 즉시 조치 사항
| 조치 항목 | 설명 | 우선순위 |
|---|---|---|
| 의존성 감사 | 모든 npm 프로젝트의 의존성 감사 실시 | 높음 |
| 패키지 업데이트 | 영향받은 패키지 버전 즉시 업데이트 | 높음 |
| 2FA 강화 | npm 2FA 설정 검토 및 하드웨어 키 사용 | 높음 |
| 환경 변수 확인 | 유출 가능성이 있는 환경 변수 즉시 교체 | 높음 |
8.3 중장기 대응 방안
| 대응 방안 | 설명 | 예상 기간 |
|---|---|---|
| SBOM 도입 | SBOM(Software Bill of Materials) 도입 의무화 | 3-6개월 |
| 의존성 고정 | 의존성 고정(pinning) 정책 수립 | 1-3개월 |
| 보안 도구 통합 | Socket.dev, Snyk 등 보안 도구 CI/CD 통합 | 1-2개월 |
| 개발자 교육 | 공급망 보안 인식 교육 강화 | 지속적 |
8.4 교훈 및 향후 대응
이번 사건을 통해 얻은 주요 교훈:
| 교훈 | 설명 | 적용 방안 |
|---|---|---|
| 공급망 보안의 중요성 | 오픈소스 의존성 관리의 중요성 부각 | SBOM, 의존성 스캔 자동화 |
| 2FA의 한계 | 2FA만으로는 부족, 하드웨어 키 필요 | 하드웨어 키 사용, 다중 인증 |
| 지속적 모니터링 | 공급망 공격은 지속적으로 발생 | 실시간 모니터링, 자동화된 탐지 |
| 빠른 대응 | 공격 발견 후 빠른 대응이 중요 | 인시던트 대응 프로세스 수립 |
⚠️ 보안 주의사항
npm 생태계 보안 침해 대응 시 주의사항:
- 즉시 조치: 영향받은 패키지는 즉시 업데이트 또는 제거
- 환경 변수 교체: 유출 가능성이 있는 모든 환경 변수 즉시 교체
- 계정 보안: npm 계정 비밀번호 변경, 2FA 재설정
- 지속적 모니터링: 향후 유사 공격에 대비한 지속적 모니터링
9. 참고 자료
| 자료 유형 | 링크 | 설명 |
|---|---|---|
| 보안 권고 | npm Security Advisory | npm 보안 권고문 |
| 취약점 데이터베이스 | Snyk Vulnerability Database | 종합 취약점 데이터베이스 |
| OWASP 도구 | OWASP Dependency-Check | 의존성 취약점 스캔 도구 |
| CISA 가이드 | CISA Supply Chain Security Guidance | 공급망 보안 가이드 |
| 연구 보고서 | GitLab Vulnerability Research Blog | GitLab 보안 연구 블로그 |
| 보안 리포트 | Socket.dev Security Reports | Socket.dev 보안 리포트 |
마지막 업데이트: 2025-11-15 (2025년 후속 사건 추가)
댓글
의견이나 질문을 남겨주세요. GitHub 계정으로 로그인하여 댓글을 작성할 수 있습니다.
댓글을 불러오는 중...