Linux Adictos Darkcrizt  

Fue detectada una vulnerabilidad en zlib

Hace poco se dio a conocer la noticia de una vulnerabilidad en la biblioteca zlib ya catalogada bajo CVE-2018-25032 que provoca un desbordamiento del búfer al intentar comprimir una secuencia de caracteres especialmente preparada en los datos entrantes.

En su forma actual, los investigadores demostraron la posibilidad de llamar a una terminación anormal del proceso, por lo que aún no se ha estudiado si el problema puede tener consecuencias más graves.

Se menciona que la vulnerabilidad se ha manifestado desde zlib 1.2.2.2 y afecta a la versión actual de zlib 1.2.11. Es de destacar que se propuso un parche que corrige la vulnerabilidad en 2018, pero los desarrolladores no le prestaron atención y no lanzaron una versión correctiva (la biblioteca zlib se actualizó por última vez en 2017).

Este error fue informado por Danilo Ramos de Eideticom, Inc que estuvo al acecho 13 años antes de ser encontrado! El error fue introducido en zlib 1.2.2.2, con la adición de la opción Z_FIXED. La opción fuerza el uso de códigos Huffman fijos. Para entradas raras con
una gran cantidad de partidos distantes, el búfer pendiente en el que los datos comprimidos se escriben pueden sobrescribir. Eso da como resultado una salida corrupta debido a distancias no válidas, y puede resultar en accesos fuera de límites, fallando la aplicación.

La vulnerabilidad se manifiesta si el flujo de entrada contiene una gran cantidad de coincidencias para empaquetar, a las que se aplica el empaque en función de los códigos Huffman fijos. En determinadas circunstancias, el contenido del búfer intermedio en el que se coloca el resultado comprimido puede superponerse con la memoria en la que se almacena la tabla de frecuencias de símbolos. Como resultado, se observa la formación de datos comprimidos incorrectos y un bloqueo debido a la escritura fuera del límite del búfer.

La vulnerabilidad solo puede explotarse mediante una estrategia de compresión basada en códigos fijos de Huffman. Se elige una estrategia similar cuando la opción Z_FIXED se incluye explícitamente en el código (un ejemplo de una secuencia que provoca un bloqueo al usar la opción Z_FIXED). A juzgar por el código la estrategia Z_FIXED también se puede elegir automáticamente si los árboles óptimos y estáticos calculados para los datos tienen el mismo tamaño.

La solución aquí combina el búfer de distancia y el literal/longitud búferes en un solo búfer de símbolo. Ahora tres bytes del espacio de búfer se abre para cada literal o longitud/distancia par consumido, en lugar de los dos bytes anteriores esto asegura
que el búfer pendiente no puede sobrescribir la tabla de símbolos, ya que la longitud/distancia máxima comprimida del código fijo es de 31 bits, y ya que hay cuatro bytes de espacio pendiente por cada tres bytes del espacio de símbolos.

Todavía no está claro si las condiciones para explotar la vulnerabilidad pueden coincidir con la estrategia de compresión Z_DEFAULT_STRATEGY, que se aplica de forma predeterminada.

De lo contrario, la vulnerabilidad se limitará a ciertos sistemas específicos donde se aplica explícitamente la opción Z_FIXED. En caso afirmativo, el daño de la vulnerabilidad puede ser muy significativo, ya que la biblioteca zlib es el estándar de facto y se usa en muchos proyectos populares, incluido el kernel de Linux, OpenSSH, OpenSSL, apache httpd, libpng, FFmpeg, rsync, dpkg. , rpm, Git, PostgreSQL, MySQL, etc.

Tambien se menciona que los parámetros seleccionados bajo los cuales se manifiesta la vulnerabilidad al elegir la estrategia de compresión por defecto Z_DEFAULT_STRATEGY. En condiciones reales, el ataque todavía se considera improbable, ya que la explotación utilizando la secuencia revelada requiere configurar el parámetro memLevel en 1, mientras que el nivel 8 está seleccionado por defecto.

Un ejemplo de una secuencia de bloqueo cuando se llama a «deflateInit2(&strm, 7, Z_DEFLATED, 15, 1, Z_DEFAULT_STRATEGY)» (level=7, windowBits=15, memLevel=1).

Finalmente cabe mencionar que la solución tampoco está incluida aún en los paquetes ofrecidos por las distribuciones, por lo que se puede realizar un seguimiento de la publicación de correcciones por distribuciones en estas páginas: DebianRHELFedoraSUSEUbuntu, Arch LinuxOpenBSD  FreeBSDNetBSD, ademas de que la biblioteca zlib-ng no se ve afectada por el problema.

Si estás interesado en conocer más al respecto, puedes consultar los detalles en el siguiente enlace.

Leave A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.