CVE-2026-32630: CVE-2026-32630: 파일 유형 npm 패키지에서 데이터 증폭을 통한 서비스 거부

발행: (2026년 3월 14일 오후 12:40 GMT+9)
5 분 소요
원문: Dev.to

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
강화 3EBML 및 PNG 파서에 루프 보호 장치를 추가해 CPU 고갈을 방지합니다.370ed91

대응 단계

  1. 사용 현황 파악

    npm ls file-type
  2. 의존성 업데이트

    • package.json에서 ^21.3.2(또는 그 이후 버전)으로 수정합니다.
    • npm install을 실행해 package‑lock.json을 갱신합니다.
  3. 테스트

    • 업데이트된 애플리케이션을 스테이징 환경에 배포합니다.
    • 특히 파일 업로드 처리와 관련된 회귀 테스트를 수행합니다.
  4. 모니터링

    • 운영 환경에서 메모리 급증이나 프로세스 재시작 현상을 감시합니다.
  5. 추가 완화 조치

    • 파일 파싱 작업을 메모리 제한이 엄격한 Node.js Worker Thread 내부에서 실행합니다.
    • 로드 밸런서 또는 WAF 수준에서 최대 업로드 크기를 강제합니다.
    • 전체 의존성 트리를 감사해 취약 file-type 버전이 전이적으로 포함되어 있는지 확인합니다.

참고 자료

  • GitHub 보안 권고: GHSA‑j47w‑4g3g‑c36v
  • 전체 CVE 보고서: CVE‑2026‑32630 (발행 기관 웹사이트에서 확인 가능)
0 조회
Back to Blog

관련 글

더 보기 »