El archivo de denegación de servicio clásico era la bomba zip recursiva: 42.zip anida seis capas de archivos zip y alcanza 4,5 PB solo si el descompresor sigue desempaquetando archivos anidados. La mayoría de los analizadores reales descomprimen una vez, así que la capa superior produce unos insignificantes 0,6 MB, y los escáneres se defendían limitando la profundidad de recursión y el tamaño descomprimido. El ataque que todos conocían tenía forma de árbol.

El movimiento de David Fifield fue eliminar la recursión. Comprime un único núcleo de bytes repetidos y luego apunta decenas de miles de entradas del directorio central a rangos superpuestos de esos bytes, citando cada cabecera de archivo local intermedia dentro de bloques DEFLATE no comprimidos para que los analizadores ordinarios sigan viendo archivos distintos y bien formados. Cada byte del núcleo se descomprime una vez por archivo, así que la salida crece de forma cuadrática respecto a la entrada, y la bomba detona en un solo unzip.

Las cifras superaron toda construcción anterior: con 42.374 bytes, el tamaño de la capa externa de 42.zip, el archivo se expande a 5,5 GB (una ratio de 129.000); la versión de 10 MB se expande a 281 TB, una ratio superior a 28 millones y el 99,97% del máximo teórico del formato zip; con la extensión Zip64, 46 MB se expanden a 4,5 PB. USENIX aceptó el artículo para su taller WOOT 2019 y le otorgó el premio al Mejor Artículo.

La publicación se convirtió en una prueba en vivo de las defensas de la industria. Los escaneos de VirusTotal de la muestra de 10 MB agotaron el tiempo en muchos motores; ClamAV consumió CPU hasta que se parcheó su detección, y luego se volvió a parchear; Mark Adler escribió un detector de archivos superpuestos para UnZip que Debian distribuyó mientras SUSE lo rechazó (CVE-2019-13232); Chromium añadió métricas para ratios de compresión anómalos; y Apple mitigó el agotamiento de la caché de Quick Look en iOS 14.

Superponer muchos archivos sobre un único núcleo comprimido para que cada byte almacenado se expanda N veces

Ataca el supuesto que sustenta la defensa estándar: los escáneres limitaban la profundidad de recursión, así que una bomba que se expande por completo en una sola pasada parece ordinaria hasta que inunda el disco.

La superposición hace que la ratio sea superlineal, porque cada byte almacenado contribuye a todos los archivos de salida, así que el archivo se vuelve más letal a medida que crece en lugar de añadir un factor fijo por capa.

La compatibilidad se diseñó con nombres coincidentes, CRC correctos y DEFLATE simple, así que la demostración se ejecutó en los analizadores de Info-ZIP, Python, Go y Android en lugar de en un caso límite.

Fifield publicó muestras funcionales y acompañó el ataque con la corrección, la detección de superposiciones y el aislamiento del analizador, lo que convirtió una curiosidad en parches que los proveedores podían adoptar.

Cuando los defensores parchean una forma de ataque, cambia la forma: los archivos superpuestos hicieron que la recursión fuera opcional y los límites de profundidad inútiles. Limita el tiempo y el disco dentro del analizador en lugar de enumerar firmas.

El detector de superposiciones de Mark Adler llegó a UnZip y Debian, ClamAV primero comprobó solo pares adyacentes, luego impuso un límite de tiempo, std.zip de D aprendió a rechazar superposiciones, Chromium añadió métricas de ratios anómalos, y Apple mitigó el agotamiento de Quick Look en iOS 12/13 en iOS 14. VirusTotal documentó motores que agotaron el tiempo, y los proveedores de antivirus actualizaron la detección durante 2019. Google Safe Browsing marcó todo bamsoftware.com desde finales de julio hasta mediados de agosto de 2019, lo que brevemente rompió el bróker Snowflake de Tor, y Xfinity bloqueó la página en noviembre de 2019. Fifield ganó el premio al Mejor Artículo en USENIX WOOT 2019.

CONSULTA LAS PRUEBAS

Las fuentes

  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 ·