CVE-2026-32630: CVE-2026-32630: 파일 유형 npm 패키지에서 데이터 증폭을 통한 서비스 거부
Source: Dev.to
취약점 개요
- 취약점 ID: CVE‑2026‑32630
- CVSS v3.1 점수: 5.3 (중간)
- 공개일: 2026‑03‑13
- 공격 벡터: 네트워크
- 영향: 서비스 거부 (메모리 부족)
- CWE: CWE‑409 (고압축 데이터 처리 부적절)
- CISA KEV 상태: 목록에 없음
file‑type npm 패키지(버전 20.0.0 ~ 21.3.1)는 내부 ZIP 항목을 압축 해제할 때 메모리 할당 제한을 일관되게 적용하지 못합니다. 인증되지 않은 원격 공격자는 고도로 압축된 ZIP 아카이브(“ZIP 폭탄”)를 제공하여 대량의 메모리를 할당하게 만들 수 있으며, 이로 인해 Node.js 프로세스가 메모리 부족(OOM)으로 충돌합니다.
영향을 받는 버전
- 취약 범위:
>= 20.0.0, < 21.3.2 - 수정 버전:
21.3.2
다음과 같은 Node.js 애플리케이션이 영향을 받습니다.
file-type버전 20.0.0 ~ 21.3.1을 사용하고 있거나, 또는- 영향을 받는 라이브러리를 이용해 사용자 업로드 파일의 MIME‑type을 검증하는 경우
기술적 세부 사항
- 라이브러리는 ZIP 항목을 압축 해제할 때 신뢰할 수 있는 크기 검사를 수행하지 않습니다.
- ZIP 항목의 크기가 알려지지 않은 경우(
hasUnknownFileSize조건) 압축 해제 제한이 우회됩니다. - 조작된 ZIP 항목은 메모리 상에서 수 기가바이트까지 확장될 수 있어 프로세스 힙을 고갈시키고 OOM 충돌을 일으킵니다.
이는 고압축 데이터를 제대로 처리하지 못한다는 점에서 CWE‑409에 해당하는 전형적인 ZIP 폭탄 공격입니다.
수정 및 강화 (21.3.2)
| 변경 사항 | 설명 | 커밋 |
|---|---|---|
| 주요 수정 | hasUnknownFileSize 조건을 제거하고 ZIP 항목 압축 해제에 1 MiB 제한을 강제합니다. | a155cd7 |
| 강화 1 | 최대 ZIP 항목 수를 1024 로 제한합니다. | 6954817 |
| 강화 2 | 깊게 중첩된 객체로 인한 스택 오버플로를 방지하기 위해 maximumDetectionReentryCount 를 도입합니다. | d2ecea1 |
| 강화 3 | EBML 및 PNG 파서에 루프 보호 장치를 추가해 CPU 고갈을 방지합니다. | 370ed91 |
대응 단계
사용 현황 파악
npm ls file-type의존성 업데이트
package.json에서^21.3.2(또는 그 이후 버전)으로 수정합니다.npm install을 실행해package‑lock.json을 갱신합니다.
테스트
- 업데이트된 애플리케이션을 스테이징 환경에 배포합니다.
- 특히 파일 업로드 처리와 관련된 회귀 테스트를 수행합니다.
모니터링
- 운영 환경에서 메모리 급증이나 프로세스 재시작 현상을 감시합니다.
추가 완화 조치
- 파일 파싱 작업을 메모리 제한이 엄격한 Node.js Worker Thread 내부에서 실행합니다.
- 로드 밸런서 또는 WAF 수준에서 최대 업로드 크기를 강제합니다.
- 전체 의존성 트리를 감사해 취약
file-type버전이 전이적으로 포함되어 있는지 확인합니다.
참고 자료
- GitHub 보안 권고: GHSA‑j47w‑4g3g‑c36v
- 전체 CVE 보고서: CVE‑2026‑32630 (발행 기관 웹사이트에서 확인 가능)