Corregieron una vulnerabilidad, pero olvidaron activar la protección. Un archivo ZIP elude con astucia al escáner.

Corregieron una vulnerabilidad, pero olvidaron activar la protección. Un archivo ZIP elude con astucia al escáner.

La nueva versión de la biblioteca Rust aún requiere ajustes adicionales para ser segura.

image

Un archivo ZIP sencillo puede pasar la comprobación como PDF y luego reemplazar un script de trabajo en el servidor. Los desarrolladores de la biblioteca zip para el lenguaje Rust revelaron la vulnerabilidad CVE-2026-115905, que permite sustituir nombres de archivos entre la comprobación y la extracción. El peligro surge en servicios que aceptan y extraen automáticamente los archivos de usuarios.

La causa está en el diseño del formato ZIP. El nombre de cada archivo se guarda dos veces: en la cabecera local antes del contenido y en el directorio central al final del archivo. Normalmente las entradas coinciden, pero un ZIP especialmente preparado puede contener nombres diferentes. Dos métodos de lectura en zip confían en distintas partes del archivo y no comparan la información entre sí.

El componente ZipArchive consulta el directorio central y ve el archivo doc_report.pdf. El descompresor en flujo ZipStreamReader lee la cabecera local y encuentra en su lugar cron_worker.sh. Si un cortafuegos de protección comprueba los nombres con el primer método y el servidor extrae el contenido con el segundo, el archivo permitido puede sobrescribir un script del sistema.

Los desarrolladores demostraron el mecanismo en una prueba automática. La simulación del cortafuegos dejó pasar el ZIP porque solo detectó el PDF, tras lo cual el descompresor sobrescribió el cron_worker.sh existente con el texto de las órdenes del atacante. La comprobación confirmó el cambio en el contenido del archivo. La propia prueba no ejecutó el script falso y no demostró la toma real del servidor.

Con cierta configuración las consecuencias no se limitan a la pérdida de un archivo. Si el servicio ejecuta más tarde el script reemplazado, el atacante podría lograr la ejecución de comandos con los privilegios del proceso correspondiente. La sobrescritura de componentes necesarios para el funcionamiento también amenaza con provocar fallos en el servicio. Para el ataque se necesita una ruta para subir un ZIP de un tercero y su extracción automática.

Son vulnerables las versiones de zip hasta la 9.0.4, y al problema se le asignaron 10 puntos críticos en CVSS 4.0. Una idea similar de discrepancia entre el contenido del archivo y el resultado de la comprobación está en la base de la técnica Zombie ZIP, que permite ocultar archivos maliciosos a varios analizadores. Sin embargo, el mecanismo de la nueva vulnerabilidad está relacionado precisamente con nombres distintos en las dos cabeceras.

Los desarrolladores indicaron la versión 9.0.5 como corregida, pero el control de coincidencia de cabeceras en ZipStreamReader está desactivado por defecto. Hay que activar la comprobación por separado mediante enforce_header_consistency(true). En la versión 9.0.5 la extracción además escribía los archivos antes de terminar la comparación, por lo que el error podría detectarse ya después de la sobrescritura.

En la versión más reciente 9.1.3 los desarrolladores añadieron un directorio temporal para la extracción cuando la comprobación está activa. Los archivos se mueven a su ubicación definitiva solo después de comparar con éxito las cabeceras. El control sigue estando desactivado por defecto, por lo que una simple actualización de la dependencia no es suficiente. Las aplicaciones deben activar explícitamente el modo protegido.