
Archive ZIP malformée qui échappe à la détection antivirus en déclarant Method=0 (stored) tout en contenant une charge utile compressée en DEFLATE.
Technique de confusion de format ZIP qui échappe à 98 % des moteurs antivirus.
CVE-2026-0866 | VU#976247 | Publié le 10 mars 2026
Créer un fichier ZIP où :
Compression Method = 0 (STORED)
Actual data = DEFLATE compressed
CRC-32 = Checksum of uncompressed payload
Moteur AV : Lit la méthode 0 → Scanne le bruit compressé → Aucune détection
Attaquant : Ignore le champ Méthode → Décompresse en DEFLATE → Récupère la charge utile
| Fichier | Technique | VirusTotal |
|---|---|---|
| baseline.zip | ZIP valide | 55/67 |
| method_mismatch.zip | Zombie ZIP | 1/66 |
98 % d'évasion. Même charge utile. Mêmes octets. Conteneur différent.
# 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 généralise la technique Zombie ZIP en un packer/unpacker autonome pour des fichiers arbitraires utilisant le format .cpack.
Container.py prend n'importe quel fichier, compresse son contenu en DEFLATE et l'écrit dans une archive ZIP déclarée comme STORED (Method=0). Le résultat est un fichier .cpack — un format de conteneur non officiel qui protège le contenu du fichier contre l'inspection.
Contrairement au PoC original de Zombie ZIP, le CRC dans un fichier .cpack est calculé sur les octets compressés (DEFLATE), et non sur la charge utile d'origine. Cela signifie que l'archive est structurellement valide — pas d'erreurs CRC, pas de drapeaux de corruption. Le contenu est simplement opaque à tout ce qui n'est pas le désemballeur.
| Fichier | Technique | VirusTotal |
|---|---|---|
| eicar.com | Charge utile EICAR brute | 55/67 |
| eicar.com.cpack | Conteneur emballé | 0/62 |
0/62. Le seul fichier que tous les moteurs antivirus sur Terre sont spécialement conçus pour détecter, rendu invisible.
# Requires PyQt6
pip install PyQt6
# Launch the GUI
python3 Container.py
filename.cpack (emballé).cpack → récupère le fichier d'origine (désemballé)La technique sous-jacente a été déclarée par plusieurs parties comme n'étant pas un problème de sécurité. Le CERT/CC a déterminé le 18 mars 2026 que la technique Zombie ZIP « ne constitue pas une vulnérabilité valide » et « ne contourne ni n'affecte aucun contrôle de sécurité implicite ou explicite. » Cisco l'a classifiée comme une « suggestion de durcissement. » Plusieurs chercheurs ont déclaré publiquement qu'il ne s'agit pas d'une vulnérabilité.
Puisque cela a été déclaré comme un non-problème, cet outil vous permet simplement de protéger vos fichiers et données contre l'examen en utilisant une technique sans implications de sécurité.
0/62 sur EICAR suggère que les implications ont peut-être été sous-estimées.
zombie_zip.py - Script générateurmethod_mismatch.zip - PoC pré-généré avec EICARbaseline.zip - ZIP valide pour comparaisonloader_poc.py - Montre la récupération programmatique de la charge utileContainer.py - Packer/unpacker graphique pour fichiers arbitraires (format .cpack)Les moteurs antivirus font confiance au champ Méthode du ZIP. Quand Method=0 (STORED), ils analysent les données comme des octets bruts non compressés. Mais les données sont en fait compressées en DEFLATE — donc le scanner voit du bruit compressé et ne trouve aucune signature.
Dans le PoC original de Zombie ZIP, le CRC est défini sur la somme de contrôle de la charge utile non compressée, créant une inadéquation qui fait que les outils d'extraction standard (7-Zip, unzip, WinRAR) signalent des erreurs ou extraient une sortie corrompue.
Container.py évite complètement cela. Parce que zipfile.ZipFile calcule le CRC sur les octets en cours d'écriture (les données compressées en DEFLATE), le CRC correspond à ce qui est stocké. Les outils standard ouvrent l'archive sans erreur. Ils extraient avec succès le bruit compressé. Pas d'erreurs CRC. Pas de drapeaux de corruption. L'antivirus analyse le bruit et retourne « propre ».
Cependant, un chargeur spécialisé qui décompresse les données stockées en DEFLATE récupère parfaitement la charge utile. La fonction de désemballage de Container.py le démontre — zlib.decompressobj standard avec DEFLATE brut (wbits=-15).
La vulnérabilité est l'évasion du scanner : les contrôles de sécurité affirment « aucun malware présent » alors que le malware est présent et trivialement récupérable.
Ce n'est pas une vulnérabilité d'extraction pour l'utilisateur final. C'est une technique de livraison / contrebande par étapes :
.cpackCela est cohérent avec les schémas établis de livraison de malwares (contrebande ISO, contrebande HTML, abus CAB) où les attaquants utilisent des chargeurs personnalisés plutôt que des outils d'extraction grand public.
.cpack.Chris Aziz - Bombadil Systems
MIT - Pour recherche en sécurité autorisée uniquement.