Skip to main content

Desbordamiento de búfer en Chromium que afecta a varios paquetes

Escrito por
Blog illustrations vul profile

23 de noviembre de 2020

0 minutos de lectura

Te damos la bienvenida al Perfil mensual de vulnerabilidades de Snyk. En esta serie, Snyk repasa las vulnerabilidades descubiertas por nuestro equipo de investigación de seguridado reportadas a este. Elegimos una vulnerabilidad destacada del mes anterior y contamos la historia detrás de su descubrimiento, investigación y divulgación. Destacamos a los investigadores, desarrolladores y usuarios que ayudan a identificar y corregir vulnerabilidades en toda la comunidad de código abierto.

Este mes analizamos una vulnerabilidad de desbordamiento de búfer descubierta en el paquete FreeType que usa Chromium y el trabajo posterior de Snyk para localizar paquetes de código abierto afectados por la inclusión de componentes vulnerables de Chromium.


Vulnerabilidad: Desbordamiento de búfer en FreeType

CVE asignados: CVE-2020-15999

Analista de Snyk: Varios

Descubierta por: Sergei Glazunov de Google Project Zero

El 2 de noviembre de 2020, CVE-2020-15999 se publicó en la Base de datos nacional de vulnerabilidades (NVD) por una vulnerabilidad de desbordamiento de búfer descubierta en el paquete de renderizado de fuentes FreeType que usa el navegador Chromium. Según una publicación de blog publicada en el sitio web del proyecto Chromium, el informe inicial de la vulnerabilidad se realizó el 19 de octubre de 2020. La descripción inicial de la vulnerabilidad indica lo siguiente:

Existe una vulnerabilidad en la función `Load_SBit_Png`, que procesa imágenes PNG incrustadas en fuentes. Esta función:

1) Obtiene el ancho y el alto de la imagen del encabezado como enteros de 32 bits.

2) Trunca los valores obtenidos a 16 bits y los almacena en una estructura `TT_SBit_Metrics`.

3) Usa los valores truncados para calcular el tamaño del mapa de bits.

4) Asigna el espacio de almacenamiento de ese tamaño.

5) Pasa `png_struct` y el espacio de almacenamiento a una función de libpng.

El problema es que libpng usa los valores originales de 32 bits, que se guardan en `png_struct`. Por lo tanto, si el ancho o el alto original es mayor que 65535, el búfer asignado no podrá contener el mapa de bits.

Las vulnerabilidades de desbordamiento de búfer pueden permitir que un atacante corrompa o manipule la memoria del heap. Esto hace posible que el atacante cree una carga maliciosa que provoque la ejecución de código arbitrario en el sistema vulnerable.

Comprender el impacto en el código abierto

El equipo de investigación de seguridad de Snyk monitorea regularmente los informes de vulnerabilidades y, cuando existe un posible impacto en la comunidad de código abierto, investiga dicho impacto. En el caso del navegador Chromium, los componentes publicados por el proyecto Chromium se suelen incorporar en paquetes de código abierto para ofrecer funcionalidades web. Por eso, tras divulgarse la vulnerabilidad de desbordamiento de búfer, el equipo de investigación de Snyk comenzó a buscar paquetes de código abierto que incluyeran versiones vulnerables del componente de Chromium.

Gracias a su investigación, el equipo de Snyk logró identificar seis paquetes de distintos ecosistemas afectados por la vulnerabilidad del paquete FreeType, que se enumeran en la siguiente tabla:

Paquete

Ecosistema (administrador de paquetes)

ID de vulnerabilidad de Snyk

cefsharp.wpf.hwndhost

.Net (NuGet)

SNYK-DOTNET-CEFSHARPWPFHWNDHOST-1023310

cefsharp.wpf

.Net (NuGet)

SNYK-DOTNET-CEFSHARPWPF-1023309

cefsharp.winforms

.Net (NuGet)

SNYK-DOTNET-CEFSHARPWINFORMS-1023307

cefsharp.common

.Net (NuGet)

SNYK-DOTNET-CEFSHARPCOMMON-1023308

electron 

JavaScript (npm)

SNYK-JS-ELECTRON-1021884

org.webjars.npm:electron

Java (Maven)

SNYK-JAVA-ORGWEBJARSNPM-1021885

Los cuatro componentes de .Net identificados son controles disponibles directamente en el proyecto Chromium. Aunque se lanzaron versiones actualizadas de los componentes para corregir las vulnerabilidades, los desarrolladores que los usan en sus propias aplicaciones o servicios deben actualizarlos a esas nuevas versiones para corregir la vulnerabilidad.

Además, Snyk descubrió que las versiones de JavaScript y Java del framework Electron también usan componentes vulnerables de Chromium. Electron es un framework popular que se utiliza en muchas aplicaciones de alto perfil, como Discord. Se hicieron actualizaciones al framework Electron y se lanzaron nuevas versiones a fines de octubre. Una vez más, los desarrolladores que usan el framework deben actualizar a la nueva versión para eliminar la vulnerabilidad de su software.

En retrospectiva

La historia del descubrimiento de esta vulnerabilidad de desbordamiento de búfer demuestra otra forma en que el equipo de investigación de seguridad de Snyk trabaja para mejorar la postura general de seguridad de la comunidad de código abierto. Buscar dónde se usan paquetes vulnerables de alto perfil, como Chromium, como dependencias en otros proyectos ayuda a sacar a la luz las fallas y permite que los mantenedores de código abierto las corrijan en su software.

Además, esto permite que Snyk se asegure de que nuestra Base de datos de vulnerabilidades contenga la información más completa posible, para que los desarrolladores puedan usar la seguridad de código abierto y recibir alertas cuando las dependencias de su software tengan vulnerabilidades.

Empieza con Capture the Flag

Aprende a resolver desafíos de Capture the Flag viendo nuestro taller virtual introductorio a pedido.