Skip to main content

Cómo encontrar y corregir la vulnerabilidad zero-day crítica de WebP CVE-2023-4863

feature fix webp vuln

5 de octubre de 2023

0 minutos de lectura

El mes pasado, Apple Security Engineering and Architecture (SEA), en colaboración con The Citizen Lab de la Munk School de la Universidad de Toronto, identificó dos vulnerabilidades críticas (CVE-2023-4863 y CVE-2023-5129). Las vulnerabilidades involucraban imágenes WebP creadas con fines maliciosos que podían explotar los navegadores basados en Chromium y la biblioteca webmproject/libwebp proporcionada por Google. Puedes obtener más información sobre la vulnerabilidad y sus antecedentes recientes en nuestra publicación anterior del blog.

En particular, la vulnerabilidad de libwebp va más allá de los navegadores y afecta a los ecosistemas de desarrollo, los sistemas operativos y los contenedores. Estos son todos los ecosistemas y contenedores que encontramos afectados por libwebp:

Gráfico multicolor en forma de estallido solar que muestra paquetes de software relacionados con WebP agrupados por lenguaje de programación, plataforma y administrador de paquetes.

Como muestra el amplio impacto de esta vulnerabilidad, se detecta en varios ecosistemas de desarrollo tanto como dependencia directa como transitiva. Se encuentra principalmente como dependencia transitiva en proyectos de Cocoapods, Swift y Python, lo que puede dificultar que los desarrolladores conozcan su impacto. Sin embargo, tanto Snyk Container como Snyk Open Source pueden detectar los paquetes afectados, y puedes usar Snyk gratis ahora para averiguar cuáles de tus proyectos los incluyen.

Gráfico de barras apiladas titulado “Transitive” que muestra el porcentaje de dependencias distintas por organización según el administrador de paquetes, clasificadas como “No” o “Sí”.

Aunque realizamos un análisis exhaustivo del impacto de libwebp, los expertos en seguridad todavía investigan los distintos usos de libwebp en aplicaciones, ecosistemas y sistemas operativos. Como la vulnerabilidad afecta a componentes de software que usan códecs de imágenes .webp y muestran su contenido (como navegadores, herramientas de diseño, etc.), el alcance seguirá aumentando. Por eso, es fundamental mantenerse al día con las últimas noticias sobre libwebp.

Esta publicación busca ofrecer una mejor comprensión del impacto de esta vulnerabilidad en los ecosistemas de software y servir como una referencia rápida para abordarla.

Al 3 de octubre de 2023, los CVE conocidos que se usan para dar seguimiento activo a esta vulnerabilidad de libwebp incluyen:

  • CVE-2023-4863: registrado el 11 de septiembre de 2023, con una puntuación CVSS de 9.6 y una puntuación EPSS de 31.86 % (percentil 97). Nota: Este CVE recibió inicialmente una puntuación de 8.8 (“Alta”) antes de que se divulgaran más detalles.

  • CVE-2023-5129: registrado el 25 de septiembre de 2023, con una puntuación CVSS de 10 (la máxima posible); Google, la autoridad asignada para la numeración de CVE, lo rechazó posteriormente el 27 de septiembre de 2023 por ser un duplicado.

Puedes obtener más información sobre la vulnerabilidad y sus antecedentes recientes en nuestra publicación anterior del blog. En esta publicación, veremos estas recomendaciones para corregirla:

  1. Identifica dónde usas libwebp

  2. Actualiza a libwebp 1.3.2 o una versión posterior

  3. Monitorea los proyectos con el soporte de auto-PR

1. Identifica dónde usas libwebp

La parte más difícil de abordar una vulnerabilidad zero-day es determinar si te afecta y dónde. En el caso de libwebp, no es diferente. libwebp puede encontrarse como dependencia de tu proyecto, ya sea directamente o de forma indirecta como dependencia transitiva. Por eso, identificarla es fundamental para abordar el problema correctamente, ya que es muy probable que te afecte en cierta medida sin que lo sepas. Algunas áreas afectadas son:

  • La vulnerabilidad afecta a cualquier software que desarrolles y que dependa directamente de la biblioteca libwebp o indirectamente a través de dependencias transitivas.

  • La vulnerabilidad afecta a cualquier software que uses para codificar o decodificar imágenes .webp.

  • La vulnerabilidad afecta a cualquier sistema operativo o imagen de contenedor que incluya herramientas para manejar imágenes .webp.

Un factor que contribuye a la amplia repercusión de esta vulnerabilidad en los ecosistemas de desarrollo es que los lenguajes de programación de alto nivel usan la biblioteca subyacente libwebp. Por ejemplo, el motor de videojuegos GoDot, que se usa para crear juegos 2D y 3D, depende de la biblioteca libwebp, y la popular utilidad FFmpeg también usa la biblioteca libwebp.

Cómo detectar la vulnerabilidad de libwebp con Snyk

Hay varias formas de detectar la vulnerabilidad de libwebp gratis con Snyk. Con la Snyk CLI, puedes probar tus proyectos localmente:

  • Para las aplicaciones, ejecuta snyk test --unmanaged desde Snyk CLI para comparar las dependencias no administradas de tu repositorio y detectar paquetes individuales y sus vulnerabilidades.

  • Para los contenedores, ejecuta snyk container test para detectar paquetes del sistema operativo que dependen de versiones vulnerables de libwebp.

También puedes escanear todos tus proyectos en tus repositorios de Git para obtener un informe de todas las dependencias directas y transitivas que usas. En este informe, verás si dependes de libwebp y en cuántas rutas de tu grafo de dependencias se usa. También puedes buscar rápidamente “CVE-2023-4863” en todos los proyectos.

Panel de problemas con el filtro CVE que busca CVE-2023-4863 y muestra el total de vulnerabilidades por nivel de gravedad y los detalles de los problemas.

2a. Actualiza a libwebp 1.3.2 o una versión posterior (código abierto)

  • Corrección automática: Conecta Snyk a tus repositorios de Git para que pueda crear pull requests y actualizar tu grafo de dependencias cuando sea posible. Luego, vuelve a compilar tu aplicación.

  • Corrección manual: Si usas libwebp como dependencia directa en tu aplicación, puedes actualizar el archivo de dependencias directamente a la versión 1.3.2 o posterior. Luego, vuelve a compilar tu aplicación.

  • Corrección manual: Si usas libwebp como dependencia transitiva en tu aplicación, identifica una versión de tu dependencia directa que incorpore la dependencia transitiva libwebp en la versión 1.3.2 o posterior. Luego, vuelve a compilar tu aplicación.

2b. Actualiza a libwebp 1.3.2 o una versión posterior (contenedor)

  • Corrección automática: Conecta Snyk a tus repositorios de Git para que pueda crear pull requests y actualizar la imagen base de tu Dockerfile cuando sea posible. Comprueba si la actualización de imagen base sugerida todavía tiene la vulnerabilidad en https://snyk.io/test/docker/<image_name>; luego, vuelve a compilar tu contenedor cuando hayas identificado una opción de actualización adecuada.

  • Corrección manual: Si tu imagen incluye una versión vulnerable de libwebp y no hay una actualización de imagen base disponible o no quieres usarla, puedes actualizarla tú mismo con las recomendaciones de corrección de Snyk Container. Ejemplo: En una imagen basada en Debian, si Snyk Container CLI informa lo siguiente:

✗ High severity vulnerability found in libwebp/libwebpdemux2
  Description: Out-of-bounds Write
  Info: https://security.snyk.io/vuln/SNYK-DEBIAN12-LIBWEBP-5918869
  Introduced through: imagemagick@8:6.9.11.60+dfsg-1.6, imagemagick/libmagickcore-dev@8:6.9.11.60+dfsg-1.6, libwebp/libwebp-dev@1.2.4-0.2, libwebp/libwebp7@1.2.4-0.2
  From: imagemagick@8:6.9.11.60+dfsg-1.6 > imagemagick/imagemagick-6.q16@8:6.9.11.60+dfsg-1.6 > imagemagick/libmagickcore-6.q16-6@8:6.9.11.60+dfsg-1.6 > libwebp/libwebpdemux2@1.2.4-0.2
  From: imagemagick/libmagickcore-dev@8:6.9.11.60+dfsg-1.6 > imagemagick/libmagickcore-6.q16-dev@8:6.9.11.60+dfsg-1.6 > librsvg/librsvg2-dev@2.54.7+dfsg-1~deb12u1 > gdk-pixbuf/libgdk-pixbuf-2.0-dev@2.42.10+dfsg-1+b1 > tiff/libtiff-dev@4.5.0-6 > libwebp/libwebp-dev@1.2.4-0.2 > libwebp/libwebpdemux2@1.2.4-0.2
  From: imagemagick@8:6.9.11.60+dfsg-1.6 > imagemagick/imagemagick-6.q16@8:6.9.11.60+dfsg-1.6 > imagemagick/libmagickcore-6.q16-6@8:6.9.11.60+dfsg-1.6 > libwebp/libwebpmux3@1.2.4-0.2
  and 4 more...
  Fixed in: 1.2.4-0.2+deb12u1

Podrías agregar algo como esto para actualizar la biblioteca manualmente:

…
RUN apt-get update && \
    apt-get install -y libwebp-dev=1.2.4-0.2+deb12u1 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*
…

3. Monitorea los proyectos con el soporte de auto-PR

Como se trata de una vulnerabilidad zero-day, cada día se descubren nuevos impactos. Por eso, es importante monitorear activamente tus proyectos con regularidad para conocer nuevas recomendaciones que permitan corregir el problema. Si usas Snyk, asegúrate de mantener tus proyectos monitoreados (esta opción está habilitada de forma predeterminada cuando importas un repositorio a la aplicación de Snyk). Esto significa que Snyk probará tus proyectos automáticamente todos los días, además de las otras pruebas que se ejecutan cuando haces actualizaciones.

Estas pruebas diarias identificarán automáticamente cuándo se pueden aplicar mejoras de seguridad y nuevas correcciones. Por ejemplo, si usas libwebp como dependencia transitiva de package A, necesitas que package A lance una versión que use libwebp en la versión 1.3.2 o posterior. Es posible que hoy no esté disponible, pero podría lanzarse mañana o la próxima semana. Con snyk monitor, se harán pruebas diarias y recibirás un PR cuando esté disponible la nueva actualización, que actualizará la versión de libwebp para corregir la vulnerabilidad.

También es importante tener en cuenta que Snyk te avisará, mediante PR u otros mecanismos, si se implementan más correcciones para esta vulnerabilidad o si se descubren vectores de ataque nuevos que revelen otras vulnerabilidades. Así te asegurarás de ser el primero en saber qué hacer si surgen otros problemas.

Mantén seguras tus aplicaciones que usan libwebp

Snyk ofrece pull requests de corrección con un clic para aplicaciones que usan libwebp como dependencia directa o transitiva.