Vulnerabilidad crítica: desbordamiento de búfer en el montículo de WebP (CVE-2023-4863)

Colaboradores:
Un agradecimiento especial a nuestros colaboradores:

El equipo de Huntress está investigando actualmente CVE-2023-4863, un desbordamiento de búfer de montón (heap buffer overflow) en la biblioteca de codificación/decodificación de imágenes WebP (codec) llamada libwebp. Los actores de amenazas están explotando esta vulnerabilidad crítica en el mundo real, la cual afecta a todo lo que use la biblioteca libwebp en versiones anteriores a la 1.3.2.

Esta es una situación que evoluciona rápidamente, y actualizaremos esta publicación de blog con la información que recibamos y confirmemos. Por ahora, esto es todo lo que sabemos:

¿Qué está pasando?

  • WebP es un formato de imagen común que admite compresión con y sin pérdida para imágenes basadas en la web. Es similar a los formatos JPG, PNG y SVG, y es compatible de forma nativa con la mayoría de los navegadores web comunes como Google Chrome, Safari, Firefox y Edge.
  • El ataque se logra al presentar un archivo WebP sin pérdida manipulado a un software que use libwebp, lo cual provoca una escritura fuera de los límites en el montón durante la decodificación de la imagen y potencialmente puede llevar a una denegación de servicio o a la ejecución remota de código.
  • Huntress confirma que nuestros productos no se ven afectados por esta vulnerabilidad al momento de escribir esta publicación.
  • El equipo de investigación de Huntress ha reproducido la prueba de concepto original, tal como se describe en la publicación original de Ben Hawkes, y ha provocado el desbordamiento de búfer en un entorno de laboratorio, pero no hemos comprobado ninguna weaponization de este desbordamiento de búfer al momento de escribir esto.
  • El aviso original de Google confirma que “Google tiene conocimiento de que existe un exploit para CVE-2023-4863 en el mundo real”.
  • Al momento de escribir esta publicación, no existe una prueba de concepto pública para la weaponization total de esta vulnerabilidad. El equipo de Huntress está monitoreando activamente para detectar si surge una.
  • No entres en pánico. Aplica el parche.

Corrección recomendada

Huntress recomienda a los partners identificar las aplicaciones que usan libwebp y actualizarlas a las versiones más recientes. La versión vulnerable de libwebp puede venir incluida con software que tu empresa usa. Es posible que debas esperar hasta que los proveedores de software incorporen la biblioteca con el parche y publiquen la nueva versión.

Si tu organización usa la versión afectada de libwebp en producción, debes actualizarla a la versión más reciente. 

Es probable que esta vulnerabilidad esté muy extendida, y aún no se dispone de una lista completa del software afectado. libwebp se usa en la mayoría de las aplicaciones basadas en Electron, en navegadores web y en muchas otras aplicaciones. Identificar qué aplicaciones se ven afectadas tomará tiempo, y es posible que debamos depender de que los proveedores se autoidentifiquen y apliquen los parches.

Por ahora, el paso más prudente que puedes tomar es actualizar cualquier navegador web y asegurarte de contar con un inventario de software sólido que incluya las versiones del software. Poder identificar rápidamente dónde tienes versiones vulnerables de software a medida que se publican los parches reducirá enormemente tu riesgo.

Cronología

El 7 de septiembre de 2023, se publicó código en el repositorio de código abierto de Chromium que hacía referencia a “Fix OOB write in BuildHuffmanTable” en el mensaje de confirmación (commit). Este commit corrigió un problema en la biblioteca libwebp de Chromium. Libwebp es un códec de WebP que admite el uso de imágenes WebP en Chromium. Este mensaje de confirmación implica la existencia de una vulnerabilidad de corrupción de memoria en esta biblioteca de códec en las versiones publicadas antes de la corrección.

El 21 de septiembre de 2023, el investigador Ben Hawkes publicó un artículo técnico en el que describía su intento exitoso de provocar la corrupción de memoria y ejecutar un desbordamiento de búfer en la versión vulnerable de libwebp. En ese momento, su artículo hacía referencia a esta vulnerabilidad como CVE-2023-4863, la cual limitaba esta vulnerabilidad de corrupción de memoria a Google Chrome en versiones anteriores a la 116.0.5845.187. También se publicó un CVE secundario para la propia biblioteca libwebp (CVE-2023-5129) el 27 de septiembre de 2023, pero rápidamente fue rechazado por ser un duplicado de CVE-2023-4863.

A partir del 28 de septiembre de 2023, la página de registro de CVE-2023-4863 ahora delimita esta vulnerabilidad a “libwebp en Google Chrome en versiones anteriores a la 116.0.5845.187 y libwebp 1.3.2”.

¿A qué afecta CVE-2023-4863?

Por el momento, aún se desconoce una lista completa del software afectado. Es probable que cualquier software que use la biblioteca vulnerable esté afectado. Debido al uso extendido de libwebp como biblioteca de software, la superficie de ataque de esta vulnerabilidad es probablemente extensa.

El parche a libwebp 1.3.2 corrige este problema en el origen de su implementación. Sin embargo, cualquier software que incluya libwebp es potencialmente vulnerable. Los responsables del mantenimiento de software también han publicado parches para sus propios productos. El reconocimiento inicial indica que las siguientes plataformas ya cuentan con correcciones para esta vulnerabilidad:

  • Navegadores web comunes como Google Chrome, Mozilla Firefox, Mozilla Thunderbird, Brave, Tor, Opera y Vivaldi.
  • Sistemas operativos importantes como Debian, Ubuntu, Alpine, Gentoo, SUSE, Oracle y Amazon cuentan con correcciones para los componentes de software empaquetados.
  • Electron, Telegram, 1Password y otras aplicaciones de cliente de escritorio.

Detalles técnicos

La vulnerabilidad está en la implementación del algoritmo de compresión sin pérdida de libwebp, el cual se usa para restaurar los píxeles de una imagen con una precisión del 100%. Este algoritmo se llama codificación de Huffman y realiza un análisis de frecuencia de los píxeles para la entrada dada, con el fin de codificar secuencias repetidas en salidas más pequeñas. Luego, el decodificador puede restaurar los píxeles a partir de las secuencias codificadas de bits. De esta manera, una imagen WebP se puede redimensionar, comprimir y reconstruir con total precisión.

La implementación de la codificación de Huffman en libwebp usa tablas para llevar un registro del mapa entre los códigos y sus valores. Esta tabla también está comprimida y presente dentro de una imagen WebP codificada. Se asigna memoria en el montón con un tamaño de búfer precalculado cuando se construye la tabla de Huffman durante la decodificación. El desbordamiento de búfer se activa cuando el puntero a una tabla de Huffman se empuja más allá de este tamaño de búfer preasignado, cuando libwebp intenta decodificar una entrada no confiable.

En términos prácticos, esto significa que un atacante puede crear una imagen WebP que obligue al algoritmo de decodificación a escribir fuera de los límites de su asignación de memoria inicial. En teoría, esto significa que no se necesita ninguna entrada del usuario para activar este desbordamiento de búfer. El payload solo necesitaría ser consumido por una instancia de software que use la biblioteca vulnerable libwebp. Representar una imagen después de decodificarla en un navegador web es un ejemplo de un posible vector de ataque. Probablemente existan muchos otros.

El equipo de investigación de Huntress reprodujo y verificó la prueba de concepto del artículo original, pero no ha comprobado ninguna weaponization adicional para el desbordamiento de búfer.

Ben Hawkes, el autor de la prueba de concepto, señaló que “...incluso con solo un control parcial del valor que se escribe, definitivamente parece explotable”. No existe una prueba de concepto pública para una cadena de explotación completa de esta vulnerabilidad al momento de la publicación de este blog.

¿Qué está haciendo Huntress?

En Huntress hicimos la debida diligencia y revisamos nuestros productos para verificar el uso de la biblioteca afectada. Confirmamos que ningún producto de Huntress usa la biblioteca afectada.

El equipo de investigación de Huntress verificó de forma independiente la prueba de concepto del artículo original de Ben Hawkes. Recreamos el desbordamiento de búfer en la versión afectada de libwebp usando el archivo WebP manipulado del artículo.

Por el momento, no hemos convertido esta prueba de concepto en un exploit completo capaz de realizar ejecución remota de código. Estamos monitoreando activamente nuestros canales de inteligencia en busca de una prueba de concepto pública para una weaponization completa de este exploit. No existe tal prueba de concepto pública al momento de esta publicación.

Agradecimientos especiales a Matt Kiely y James Mason por sus contribuciones a este artículo.

Referencias

También te podría interesar