Directrices sobre las vulnerabilidades críticas de libwebp y libvpx recientes
Antecedentes
En las últimas semanas, Google ha publicado actualizaciones en Google Chrome, que incluían correcciones para CVE-2023–4863 y CVE-2023–5217. Ambas vulnerabilidades se descubrieron como vulnerabilidades de día cero explotadas en el mundo real, y las entradas de CVE fueron actualizadas para ampliar el ámbito de Google Chrome a sus bibliotecas subyacentes: libwebp y libvpx. Ambas CVE aparecen en el catálogo de vulnerabilidades explotadas conocidas de CISA.
En esta publicación de blog, compartimos los detalles de ambas vulnerabilidades y proporcionamos recomendaciones sobre cómo detectar aplicaciones vulnerables en su red. Dado que estas vulnerabilidades se están investigando continuamente, esta publicación podría actualizarse en el futuro con información y directrices adicionales.
CVE-2023-4863: libwebp
El equipo Security Engineering and Architecture (SEAR) de Apple y Citizen Lab informaron de esta vulnerabilidad. Basándose en ese informe, los investigadores han correlacionado esta vulnerabilidad con el ataque BLASTPASS (una explotación de día cero sin clics de NSO Group para iPhones).
Esta vulnerabilidad en sí es un desbordamiento del montón en libwebp, que se basa en el proceso de decodificar imágenes webp en el formato sin pérdida. Ben Hawkes escribió un análisis técnico muy detallado de esta vulnerabilidad.
Libwebp es una biblioteca desarrollada por Google para codificar y decodificar imágenes en formato WebP (también desarrollado por Google). Esta vulnerabilidad radica en el análisis de imágenes de la biblioteca con compresión sin pérdida, que utiliza tablas Huffman. Básicamente, un atacante puede manipular las tablas para hacer que la biblioteca asigne menos memoria para las tablas que su tamaño real; esto provoca un desbordamiento del montón y una escritura prohibida.
Existen muchas formas y configuraciones para lograr estos resultados, por lo que no hay una única prueba de concepto (PoC) que las controle todas, pero puede comprobar la PoC de @mistymntncop para ver un ejemplo de implementación de explotación.
CVE-2023-5217: libvpx
Esta vulnerabilidad fue descubierta por Clément Lecigne de Threat Analysis Group de Google. Esta vulnerabilidad también fue empleada por un proveedor de vigilancia comercial.
Libvpx también forma parte del proyecto WebP. Específicamente, la biblioteca trata con los formatos VP8 y VP9 para la codificación y decodificación de vídeo. Se dispone de menos detalles acerca de esta vulnerabilidad, pero se sabe que también es una vulnerabilidad de corrupción del montón.
¿Qué es vulnerable?
Inicialmente, solo se informó de que los navegadores eran vulnerables, ya que las vulnerabilidades estaban en Chromium. Sin embargo, dado que la vulnerabilidad reside en las bibliotecas subyacentes libwebp y libvpx, el alcance del impacto es mucho más amplio: Las aplicaciones que utilizan libwebp de las versiones 0.5.0. a 1.3.1 y las aplicaciones que utilizan una versión de libvpx anterior a la 1.13.1 se ven afectadas.
Hemos compilado una lista de aplicaciones que dependen de cualquiera de las bibliotecas, basada en informes disponibles públicamente. También hemos incluido programas que utilizan la biblioteca que hemos detectado con nuestras consultas de Insight. Esto no significa que sean necesariamente vulnerables.
Para que un programa sea vulnerable tiene que usar la capacidad WebP sin pérdida de libwebp o los códecs V8 o V9 con libvpx. Puesto que estas bibliotecas se pueden utilizar para funciones y capacidades completamente diferentes, su uso no siempre equivale a una vulnerabilidad.
Sabemos que los navegadores web utilizan estas capacidades, pero dependemos del criterio del proveedor para informarnos si otros programas las están utilizando. Hemos detectado que los siguientes navegadores y otras aplicaciones utilizan las bibliotecas afectadas:
- Fedora (37–39)
- Debian (10–12)
- Google Chrome
- Firefox
- Microsoft Edge
- Opera
- Tor
- Brave
- Vivaldi
- Telegram
- Discord
- 1Password
- Electron
- GIMP
- Slack
- LibreOffice
- Skype
- Grafana
- KeePassXC
- VLC
Además, una persona anónima analizó los repositorios de paquetes de Ubuntu y cargó una lista de todos los paquetes que dependen de libvpx7.
Exposición a vulnerabilidades: Osquery
Dado que la biblioteca se puede encontrar en muchos lugares diferentes, y que depende de los proveedores de software actualizar sus productos, es crucial detectar el alcance de la vulnerabilidad y la tasa de exposición de las máquinas de su red. Hemos desarrollado varias consultas de OSquery para ayudarle con esta tarea. Los clientes de Guardicore Segmentation de Akamai pueden utilizar la función Insight para ejecutar esas consultas en sus redes.
libweb y libvpx cargadas en memoria
Teniendo en cuenta que las bibliotecas pueden estar incluidas en cualquier aplicación, no es posible localizarlas en el disco duro. Sin embargo, podemos comprobar los módulos cargados (archivos DLL o SO) en cada proceso en ejecución utilizando la tabla de OSquery process_memory_map e intentar obtener la versión mediante la tabla de archivos.
Puesto que los metadatos de la versión se agregan durante el proceso de compilación, no tienen por qué estar disponibles, ya que la biblioteca se puede compilar sin ellos. Incluso en el caso de que los metadatos de la versión estén disponibles, puede ocurrir que no sean precisos, ya que los proveedores pueden adjuntar sus propias versiones de software. El criterio del usuario es recomendable para evitar falsos positivos o verdaderos negativos.
SELECT DISTINCT
procs.name AS process_name,
pmm.path AS lib_path,
file.file_version,
CASE
WHEN file_version = '' THEN 'unknown version, potentially vulnerable'
WHEN pmm.path LIKE '%libwebp%' AND file_version < '1.3.2' THEN 'vulnerable version'
WHEN pmm.path LIKE '%libwebp%' AND file_version >= '1.3.2' THEN 'not vulnerable version'
WHEN pmm.path LIKE '%libvpx%' AND file_version <= '1.13.1' THEN 'vulnerable version'
WHEN pmm.path LIKE '%libvpx%' AND file_version > '1.13.1' THEN 'not vulnerable version'
ELSE 'unknown version, potentially vulnerable'
END is_vulnerable
FROM process_memory_map AS pmm
JOIN processes AS procs USING(pid)
JOIN FILE ON file.path = pmm.path
WHERE pmm.path LIKE '%libwebp%' OR pmm.path LIKE '%libvpx%'
Localización de navegadores web
Hemos incluido una consulta para detectar los navegadores instalados, ya que el informe inicial de las CVE y el caso de uso procedían de Chromium. Esta consulta puede ayudar a localizar activos en la red que ejecutan navegadores y requieran una investigación más a fondo. Posteriormente, puede comparar la versión instalada con la lista de versiones vulnerables del navegador en la base de datos nacional de vulnerabilidades (NVD).
SELECT name, version FROM programs
WHERE LOWER(name) LIKE "%chrome%"
OR LOWER(name) LIKE "%firefox%"
OR LOWER(name) LIKE "%microsoft edge%"
OR LOWER(name) LIKE "%thunderbird%"
OR LOWER(name) LIKE "%brave%"
OR LOWER(name) LIKE "%opera%"
Localización de programas instalados
Para comprobar si uno de los programas de la lista anterior está instalado, utilice la siguiente consulta; solo tiene que reemplazar <program_name> por el nombre real del programa.
SELECT name, version FROM programs
WHERE name LIKE "%<program_name>%"
Mitigación
Detección de aplicaciones y activos vulnerables
El uso de la lista compilada de aplicaciones y las consultas de Osquery que se proporcionan en esta entrada de blog le permite detectar las aplicaciones potencialmente vulnerables de su red y obtener una lista de activos potencialmente vulnerables.
Los clientes de Akamai Hunt recibieron un informe en el que se detallaba la exposición de sus entornos a las vulnerabilidades. Los informes de Hunt estaban basados en consultas similares a las de esta entrada de blog y se enviaron unas horas después del inicio del incidente. Las consultas detectaron miles de activos vulnerables en todo el mundo.
Aplicación de parches
Hay muchos parámetros que se tienen en cuenta al intentar evaluar si una aplicación es vulnerable: ¿Qué versión carga de libwebp o libvpx? ¿Utiliza la aplicación la compresión WebP sin pérdida o los códecs VP8/VP9? Debido a las diversas combinaciones posibles, muchas aplicaciones son susceptibles de explotación y el impacto puede ser enorme.
Lamentablemente, no existe un único parche que mitigue esta vulnerabilidad. La aplicación de los parches también depende de que los proveedores de software publiquen los parches pertinentes para sus programas, lo cual puede llevar un tiempo. Las organizaciones deben evaluar con el tiempo qué cargas de trabajo son vulnerables y siguen sin tener los parches aplicados.
Sensibilidad de las alertas a las amenazas
Dado que los parches para todos los programas afectados no están necesariamente disponibles todavía, puede que sea sensato aumentar la sensibilidad de las alertas en las cargas de trabajo que podrían ser potencialmente vulnerables y carecer de parches. De ese modo, incluso se explota la vulnerabilidad y no se detecta, es posible que pueda conocer sus efectos secundarios.
Sin embargo, esto puede aumentar la saturación de alertas. Por ello, recomendamos ajustar la sensibilidad de las alertas en función de la importancia de la carga de trabajo afectada para la red o su impacto.
Resumen
En esta entrada de blog, hemos revisado la información disponible sobre las vulnerabilidades críticas en libwebp y libvpx, que se han explotado en la vida real.
Para los defensores, una medida fundamental sería determinar la vulnerabilidad de las cargas de trabajo de su red. Hemos intentado ayudar proporcionando consultas de OSquery para detectar programas que usan las bibliotecas. También hemos analizado qué se debe hacer para mitigar parte del riesgo (por ejemplo, ajustar la sensibilidad de las alertas a las amenazas) cuando no hay parches disponibles.
Esta publicación de blog ofrece una descripción general de nuestros conocimientos y recomendaciones actuales, dada la información disponible. Nuestra revisión se lleva a cabo de forma continua y cualquier información aquí contenida está sujeta a cambios. También puede visitar nuestra cuenta de Twitter para conocer las actualizaciones en tiempo real.