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

서론
안녕하세요, Twodragon입니다. 이번 포스팅에서는 npm 생태계 보안에 대해 실무 중심으로 정리합니다.
2025년 npm 생태계의 보안 위협은 지속적으로 증가하고 있으며, 공급망 보안이 핵심 이슈로 부상했습니다.
이번 포스팅에서는 다음 내용을 다룹니다:
- [긴급] npm 생태계 대규모 보안 침해: 20억 다운로드 패키지 악성코드 감염의 핵심 내용 및 실무 적용 방법
- 2025-2026년 최신 트렌드 및 업데이트 사항
- 실전 사례 및 문제 해결 방법
- 보안 모범 사례 및 권장 사항
긴급 공지
2025년 9월 8일 13:16 UTC, npm 레지스트리의 18개 핵심 패키지가 악성코드에 감염되었습니다. debug, chalk 등 주당 20억 회 이상 다운로드되는 패키지들이 침해되어 전 세계 수백만 프로젝트가 위험에 노출되었습니다.
컨테이너 보안은 DevSecOps 사이클을 통해 코드로 관리됩니다:
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 추가 보안 도구 권장
컨테이너 보안은 여러 레이어로 구성된 Defense in Depth 전략을 통해 강화됩니다:
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 계정으로 로그인하여 댓글을 작성하세요
댓글 작성 가이드