L'archive de déni de service classique était la bombe zip récursive : 42.zip imbrique six couches de fichiers zip et atteint 4,5 Po seulement si le décompresseur continue à extraire les archives imbriquées. La plupart des analyseurs réels ne décompressent qu'une fois, si bien que la couche supérieure ne produit qu'un maigre 0,6 Mo, et les scanners se défendaient en plafonnant la profondeur de récursion et la taille décompressée. L'attaque que tout le monde connaissait avait la forme d'un arbre.

Le geste de David Fifield fut de supprimer la récursion. Il compresse un unique noyau d'octets répétés, puis fait pointer des dizaines de milliers d'entrées de répertoire central vers des plages chevauchantes de ces octets, en citant chaque en-tête de fichier local intercalé à l'intérieur de blocs DEFLATE non compressés afin que les analyseurs ordinaires voient toujours des fichiers distincts et bien formés. Chaque octet du noyau est décompressé une fois par fichier, si bien que la sortie croît quadratiquement avec l'entrée, et la bombe explose en une seule décompression.

Les chiffres ont dépassé toute construction antérieure : à 42 374 octets, la taille de la couche externe de 42.zip, l'archive se décompresse en 5,5 Go (un ratio de 129 000) ; la version de 10 Mo se décompresse en 281 To, un ratio supérieur à 28 millions et à 99,97 % du maximum théorique du format zip ; avec l'extension Zip64, 46 Mo se décompressent en 4,5 Po. L'USENIX a accepté l'article pour son atelier WOOT 2019 et lui a décerné le prix du meilleur article.

La publication est devenue un test en conditions réelles des défenses de l'industrie. Les analyses VirusTotal de l'échantillon de 10 Mo ont expiré sur de nombreux moteurs ; ClamAV a consumé du CPU jusqu'à ce que sa détection soit corrigée, puis recorrigée ; Mark Adler a écrit un détecteur de fichiers chevauchants pour UnZip, que Debian a distribué tandis que SUSE a refusé (CVE-2019-13232) ; Chromium a ajouté des métriques pour les ratios de compression anormaux ; et Apple a atténué l'épuisement du cache d'iOS Quick Look dans iOS 14.

Chevaucher de nombreux fichiers sur un seul noyau compressé afin que chaque octet stocké se démultiplie N fois

Elle attaque l'hypothèse qui sous-tend la défense standard : les scanners limitaient la profondeur de récursion, si bien qu'une bombe qui se décompresse entièrement en une seule passe paraît ordinaire jusqu'à ce qu'elle inonde le disque.

Le chevauchement rend le ratio superlinéaire, car chaque octet stocké contribue à chaque fichier de sortie ; l'archive devient donc plus meurtrière à mesure qu'elle grossit, au lieu d'ajouter un facteur fixe par couche.

La compatibilité a été intégrée dès la conception avec des noms correspondants, des CRC corrects et du DEFLATE simple, si bien que la démonstration a fonctionné sur les analyseurs Info-ZIP, Python, Go et Android plutôt que de rester un cas limite.

Fifield a livré des échantillons fonctionnels et a associé l'attaque au correctif, à la détection de chevauchement et à l'isolation des analyseurs, ce qui a transformé une curiosité en correctifs que les éditeurs pouvaient adopter.

Lorsque les défenseurs corrigent une forme d'attaque, changez de forme : les fichiers chevauchants ont rendu la récursion facultative et les limites de profondeur inutiles. Bornez le temps et le disque à l'intérieur de l'analyseur au lieu d'énumérer des signatures.

Le détecteur de chevauchement de Mark Adler a atteint UnZip et Debian, ClamAV n'a d'abord vérifié que les paires adjacentes, puis a imposé une limite de temps, std.zip de D a appris à rejeter les chevauchements, Chromium a ajouté des métriques de ratio anormal, et Apple a atténué l'épuisement de Quick Look d'iOS 12/13 dans iOS 14. VirusTotal a documenté des moteurs qui expiraient, et les éditeurs d'antivirus ont mis à jour leur détection tout au long de 2019. Google Safe Browsing a signalé l'ensemble de bamsoftware.com de fin juillet à mi-août 2019, cassant brièvement le courtier Snowflake de Tor, et Xfinity a bloqué la page en novembre 2019. Fifield a remporté le prix du meilleur article à l'USENIX WOOT 2019.

VÉRIFIEZ LES SOURCES

Les sources

  1. A better zip bomb David Fifield · bamsoftware.com
  2. A better zip bomb (Best Paper), USENIX WOOT 19 USENIX Association · usenix.org
  3. A better zip bomb — Hacker News discussion Hacker News · news.ycombinator.com ·