
Method=0(저장됨)으로 선언하면서 실제로는 DEFLATE 압축 페이로드를 포함해 안티바이러스 탐지를 우회하는 비정상적인 ZIP 아카이브.
안티바이러스 엔진의 98%를 우회하는 ZIP 형식 혼동 기법입니다.
CVE-2026-0866 | VU#976247 | 2026년 3월 10일 게시
다음 조건의 ZIP 파일을 생성합니다:
Compression Method = 0 (STORED)
Actual data = DEFLATE compressed
CRC-32 = Checksum of uncompressed payload
AV Engine: Reads Method 0 → Scans compressed noise → No detection
Attacker: Ignores Method field → Decompresses as DEFLATE → Recovers payload
| 파일 | 기법 | VirusTotal |
|---|---|---|
| baseline.zip | 유효한 ZIP | 55/67 |
| method_mismatch.zip | 좀비 ZIP | 1/66 |
98% 우회. 동일한 페이로드. 동일한 바이트. 다른 컨테이너.
# Generate a Zombie ZIP
python3 zombie_zip.py
# Upload method_mismatch.zip to VirusTotal
# Observe 1/51 detection vs 55/67 for baseline
# Recover payload programmatically
python3 loader_poc.py method_mismatch.zip
# Outputs byte-identical EICAR (SHA-256: 275a021b...)
Container.py는 Zombie ZIP 기법을 일반화하여 .cpack 형식을 사용하는 임의 파일용 독립형 패커/언패커로 만듭니다.
Container.py는 모든 파일을 가져와 내용을 DEFLATE로 압축한 다음 STORED(Method=0)로 선언된 ZIP 아카이브에 기록합니다. 그 결과는 .cpack 파일 — 파일 내용을 검사로부터 보호하는 비공식 컨테이너 형식입니다.
원래 Zombie ZIP PoC와 달리 .cpack 파일의 CRC는 원본 페이로드가 아닌 압축된(DEFLATE) 바이트를 기준으로 계산됩니다. 즉, 아카이브는 구조적으로 유효합니다 — CRC 오류도, 손상 플래그도 없습니다. 내용은 언패커가 아닌 모든 것에는 단순히 불투명할 뿐입니다.
| 파일 | 기법 | VirusTotal |
|---|---|---|
| eicar.com | 원본 EICAR 페이로드 | 55/67 |
| eicar.com.cpack | 컨테이너 패킹 | 0/62 |
0/62. 지구상의 모든 AV 엔진이 탐지하도록 특별히 설계된 바로 그 파일이 보이지 않게 되었습니다.
# Requires PyQt6
pip install PyQt6
# Launch the GUI
python3 Container.py
filename.cpack (패킹됨) 생성.cpack 파일 선택 → 원본 파일 복구 (언패킹됨)이 기본 기법은 여러 기관에서 보안 문제가 아니라고 선언했습니다. CERT/CC는 2026년 3월 18일 Zombie ZIP 기법이 "유효한 취약점을 구성하지 않는다"고 판정했으며 "암시적 또는 명시적 보안 통제를 우회하거나 영향을 미치지 않는다"고 밝혔습니다. Cisco는 이를 "강화 제안"으로 분류했습니다. 여러 연구원이 이것이 취약점이 아니라고 공개적으로 밝혔습니다.
이것이 문제가 아닌 것으로 선언되었으므로, 이 도구는 단순히 보안 영향이 없는 기법을 사용하여 파일과 데이터를 조사로부터 보호할 수 있게 해줍니다.
EICAR에서의 0/62는 그 영향이 과소평가되었을 수 있음을 시사합니다.
zombie_zip.py - 생성기 스크립트method_mismatch.zip - EICAR가 포함된 사전 생성 PoCbaseline.zip - 비교용 유효한 ZIPloader_poc.py - 프로그래밍 방식 페이로드 복구 데모Container.py - 임의 파일용 GUI 패커/언패커 (.cpack 형식)AV 엔진은 ZIP Method 필드를 신뢰합니다. Method=0(STORED)이면 데이터를 원시 비압축 바이트로 스캔합니다. 하지만 데이터는 실제로 DEFLATE로 압축되어 있으므로 — 스캐너는 압축된 노이즈만 보고 시그니처를 찾지 못합니다.
원래 Zombie ZIP PoC에서는 CRC가 비압축 페이로드의 체크섬으로 설정되어 불일치가 발생하며, 이로 인해 표준 추출 도구(7-Zip, unzip, WinRAR)가 오류를 보고하거나 손상된 출력을 추출하게 됩니다.
Container.py는 이를 완전히 피합니다. zipfile.ZipFile이 기록되는 바이트(DEFLATE 압축 데이터)에 대해 CRC를 계산하므로 CRC가 저장된 값과 일치합니다. 표준 도구는 오류 없이 아카이브를 엽니다. 압축된 노이즈를 성공적으로 추출합니다. CRC 오류도, 손상 플래그도 없습니다. AV는 노이즈를 스캔하고 깨끗하다고 판정합니다.
그러나 저장된 데이터를 DEFLATE로 압축 해제하는 전용 로더는 페이로드를 완벽하게 복구합니다. Container.py의 언패킹 함수는 이를 보여줍니다 — raw DEFLATE(wbits=-15)를 사용하는 표준 zlib.decompressobj입니다.
취약점은 스캐너 우회입니다: 멀웨어가 존재하고 쉽게 복구 가능한데도 보안 통제는 "멀웨어 없음"이라고 단언합니다.
이것은 최종 사용자 추출 취약점이 아닙니다. 단계적 전달/밀반입 기법입니다:
.cpack 컨테이너에 패키징이는 공격자가 일반 소비자용 추출 도구 대신 맞춤형 로더를 사용하는 기존의 멀웨어 전달 패턴(ISO 밀반입, HTML 밀반입, CAB 악용)과 일치합니다.
.cpack을 탐지한 엔진은 없었습니다.Chris Aziz - Bombadil Systems
MIT - 승인된 보안 연구용으로만 사용하십시오.