본문 바로가기
Program/JAVA

[JAVA] Java에서 ZIP Bomb 오류 해결 방법 - feat.Excel

by Dev200 2025. 2. 14.

ZIP Bomb이란? ZIP Bomb(압축 폭탄)은 높은 압축률을 활용하여 작은 크기의 압축 파일을 해제할 때 기하급수적으로 큰 데이터를 생성해 시스템을 마비시키는 공격 기법입니다. 이러한 파일을 해제하면 메모리 부족이나 시스템 과부하가 발생할 수 있습니다.


ZIP Bomb의 동작 원리

ZIP Bomb은 극도로 높은 압축률을 활용하여 작은 파일 크기에서도 압축 해제 시 엄청난 용량의 데이터를 생성합니다. 예를 들어:

  • 42KB ZIP 파일 → 압축 해제 시 4.5PB(페타바이트)
  • 10MB ZIP 파일 → 압축 해제 시 10GB~100GB 이상

이러한 압축 방식은 ZIP 파일 내에서 반복되는 데이터 패턴을 악용하여 극단적인 압축률을 만들어냅니다.


Java에서 ZIP Bomb 오류 발생 원인

Java에서 Apache POI 라이브러리를 이용해 Excel(XLSX) 파일을 읽을 때 Zip bomb detected 오류가 발생할 수 있습니다. 이는 Apache POI가 ZIP Bomb 감지 기능을 포함하고 있기 때문입니다.

ZIP Bomb 감지 원인

  1. XLSX 파일은 ZIP 포맷을 사용
    • XLSX는 XML 기반 문서를 ZIP 압축한 파일이므로 ZIP 관련 검사가 수행됩니다.
  2. Apache POI의 ZIP Bomb 보호 기능
    • 압축 해제 크기가 원본 파일 크기의 100배 이상이면 ZIP Bomb으로 간주합니다.
  3. 파일이 손상되었거나 비정상적인 압축 구조
    • 손상된 파일이나 이상한 방식으로 압축된 파일도 ZIP Bomb으로 오탐지될 수 있습니다.

ZIP Bomb 오류 해결 방법

1️⃣ ZIP Bomb 보호 기능 완화 (비추천)

import org.apache.poi.openxml4j.util.ZipSecureFile;

ZipSecureFile.setMinInflateRatio(0.005); // 기본값 0.01 → 완화

🔹 주의: 보호 기능을 낮추면 보안에 취약해질 수 있습니다. 신뢰할 수 있는 파일에서만 사용하세요.


2️⃣ Excel에서 파일을 다시 저장

  1. Excel에서 파일을 엽니다.
  2. 파일 → 다른 이름으로 저장하여 새 파일로 저장합니다.
  3. 새 파일을 Java에서 다시 읽어봅니다.

이 방법은 파일이 손상되었을 경우 유용합니다.


3️⃣ 압축 비율 조정 (추천)

ZipSecureFile.setMinInflateRatio(0.0001); // 기존 0.01보다 낮게 설정

🔹 너무 낮은 값으로 설정하면 ZIP Bomb 공격에 취약해질 수 있으므로 적절한 수준을 유지해야 합니다.


4️⃣ 파일 직접 검사 (ZIP 변환 후 분석)

XLSX 파일을 ZIP으로 변환 후 압축 해제하여 크기를 비교해 봅니다.

mv file.xlsx file.zip
unzip file.zip

🔹 압축 해제 후 크기가 비정상적으로 크다면 ZIP Bomb 가능성이 있습니다.


5️⃣ Apache POI 최신 버전 사용

Apache POI는 지속적으로 보안 업데이트가 이루어지고 있으므로 최신 버전을 사용하는 것이 좋습니다.

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version> <!-- 최신 버전 확인 후 업데이트 -->
</dependency>

🚀 결론

  • 일반적인 Excel 파일이라면 ZipSecureFile.setMinInflateRatio(0.0001~0.005)로 조정하면 해결됨.
  • 파일이 손상되었을 가능성이 있다면 Excel에서 열어보고 다시 저장 후 시도.
  • ZIP Bomb이 의심되는 경우, 직접 압축 해제하여 검사.
  • 보안이 중요한 경우, 보호 기능을 완화하기보다는 원인을 분석하여 해결하는 것이 좋음.

📌 위 방법으로 해결되지 않는다면 사용하는 코드와 엑셀 파일의 상태를 점검해 보세요!


#️⃣ #Java #Excel #ApachePOI #ZipBomb #보안 #파일오류 #XLSX #Java개발 #엑셀파일 #데이터보안 #메모리오류 #파일압축 #ZIP파일 #ZIP압축 #보안취약점 #데이터복구 #엑셀에러 #오류해결 #개발자팁 #프로그래밍