Skip to main content

Vulnerabilidad de alta gravedad encontrada en libcurl y curl (CVE-2023-38545)

Escrito por
Headshot of Hadas Bloom

Hadas Bloom

4 de octubre de 2023

0 minutos de lectura

Actualización: 11 de octubre de 2023

Hoy, a las 06:00 UTC, los mantenedores de cURL publicaron las versiones 8.4.0 de curl y libcurl para mitigar un desbordamiento de búfer de alta gravedad basado en heap (prueba de concepto y notificación inicial) que podría afectar a sistemas con una configuración y condiciones previas específicas.

Esta vulnerabilidad de día cero está presente en paquetes de varios ecosistemas de código abierto gestionados y no gestionados, incluidos, entre otros, C/C++, cargo, cocoapods, npm, NuGet, pip y pub, así como diversas distribuciones de Linux como Alpine, Debian, RHEL y otras.

Esta es la primera vulnerabilidad de alta gravedad encontrada en curl en varios años (la última fue a principios de 2021).

Captura de pantalla de la tabla de vulnerabilidades de cURL

Las versiones de curl/libcurl afectadas (desde marzo de 2020) son las siguientes:

La complejidad del exploit se considera alta y solo puede desencadenarse en determinados escenarios. Como se explica en la publicación del mantenedor, How I made a heap overflow in curl (Cómo hice un desbordamiento de heap en curl), la vulnerabilidad requiere que la biblioteca vulnerable esté contactando con un servidor no controlado/comprometido (para ser explotado a través de una redirección HTTP), o usando una URL controlada por el atacante a través de un proxy SOCKS5 con la resolución del nombre de host activada para desencadenar la condición vulnerable, e incluso entonces es un desbordamiento de heap de conjunto de caracteres limitado. Los desbordamientos de heap en los sistemas modernos son extremadamente difíciles de convertir en una ejecución arbitraria de código (ACE); de ahí la alta complejidad del exploit.

Ahora que la vulnerabilidad está publicada y rastreada, puedes utilizar la función de informes de Snyk para encontrar los proyectos afectados seleccionando tu organización y eligiendo Reports (Informes) en la barra lateral. Selecciona +Add Filter (+Agregar filtro) en los detalles de la incidencia, selecciona CVE y, a continuación, ingresa el número de CVE: CVE-2023-38545

Filtra la vista hasta CVE-2023-38545

Este blog se actualizará con cualquier información nueva que vaya surgiendo.

Actualización: 4 de octubre de 2023

El 3 de octubre de 2023, Daniel Stenberg, mantenedor y autor original de curl desde hace mucho tiempo, publicó una nota en LinkedIn y X (antes Twitter) sobre el envío de la versión 8.4.0 de curl, que contendrá una corrección para “probablemente el peor problema de seguridad encontrado en curl en mucho tiempo”.Este asunto debe tomarse en serio, ya que los mantenedores de curl siempre fueron muy claros a la hora de restar importancia al riesgo asociado con la mayoría de las vulnerabilidades reportadas contra curl en el pasado (un ejemplo reciente es el artículo llamado CVE-2020-19909 is everything that is wrong with CVEs \[CVE-2020-19909 es todo lo que está mal con las CVE]), y en este caso único, están saliendo a publicitar específicamente el riesgo, agregando, “abróchense los cinturones”.

La versión corregida, 8.4.0, se publicará el 11 de octubre de 2023, alrededor de las 06:00 UTC, según los mantenedores.

Hoy mismo (4 de octubre de 2023), se anunciaron en un debate de GitHub las CVE que se utilizarán para contener información sobre vulnerabilidades.

CVE-2023-38545se asignará al problema de alta gravedad, que afecta tanto a libcurl como a curl. También se corregirá un problema adicional de gravedad baja asignado a CVE-2023-38546 (que solo afecta a libcurl).

¿Qué sabemos actualmente?

cURL es un proyecto muy popular, que proporciona tanto la biblioteca libcurl (utilizada para transferencias URL) como la herramienta de línea de comandos curl (utilizada para obtener y enviar datos mediante URL). cURL se publicó inicialmente hace 27 años y se utiliza de forma universal desde 1996. 

Muchas de las distribuciones de Linux compatibles con Snyk (si no es que todas) utilizan libcurl, por lo tanto, el alcance potencial del impacto es amplio.

Cómo prepararse para el remedio

  • Comprueba con antelación el uso de contenedores y paquetes para medir tu exposición.

  • Identifica los hosts que tienen curl instalado y determina cómo se instaló.

  • Comprueba la versión de curl que estás usando con curl --version.

Mide tu exposición

Antes del lanzamiento de la versión corregida de libcurl, puedes utilizar Snyk para encontrar rápidamente los proyectos de código abierto y las imágenes de contenedores que podrían verse afectados. 

Navega hasta Dependencies (Dependencias) en la barra lateral de la interfaz de usuario de Snyk App. Una vez en la vista Dependencias, despliega el filtro Dependencias y escribe “curl”. Puedes seleccionar versiones individuales o marcar el acceso directo Select all (Seleccionar todo) y, a continuación, hacer clic fuera del filtro para ver los resultados. Esto te mostrará, de entre todos tus proyectos, los que tienen las versiones de libcurl que seleccionaste. Además, puedes examinar los proyectos y dependencias para medir tu exposición y priorizar lo que debes arreglar primero.

Identifica los hosts que tienen curl instalado

Muchos sistemas operativos vienen con curl instalado por defecto, y el lugar donde esté instalado dependerá del sistema operativo y del método de instalación. Puedes determinar rápidamente si curl está instalado y en tu ruta ejecutando: curl --version

Si no devuelve errores, mostrará la versión de curl que se encontró por primera vez en tu ruta. Ten en cuenta que puede estar instalado en más de una ubicación. Por ejemplo, en las computadoras Apple recientes, viene por defecto en /usr/bin/curl, pero también puede haber sido instalado a través de homebrew. Puedes determinar dónde se encuentra la versión en tu ruta ejecutando which curl. Otras ubicaciones para buscar en sistemas operativos basados en macOS/Linux serían:

  • /bin/curl

  • /usr/bin/curl

  • /usr/local/bin/curl

  • /opt/homebrew/opt/curl

Asegúrate de encontrar todas las instancias que deben actualizarse en preparación para la nueva versión.

Cómo responder una vez publicada la actualización

El día del lanzamiento, previsto para el 11 de octubre de 2023 alrededor de las 06:00 UTC, prepárate para actualizar a la versión 8.4.0. Una vez que la nueva versión esté disponible, Snyk tendrá más información y publicará información adicional sobre la vulnerabilidad en este blog (y vinculará aquí también cualquier blog de seguimiento).

Actualiza los paquetes y contenedores vulnerables

Utiliza la información que reuniste en la preparación para actualizar tus proyectos e imágenes de contenedores para recolectar la versión corregida de libcurl. Puede que los diferentes ecosistemas y distribuciones de Linux esperen para actualizar su uso de los paquetes afectados solo después de este tiempo, y la disponibilidad de las correcciones será probablemente escalonada. Por ejemplo, es posible que algunos mantenedores esperen a las correcciones del flujo ascendente antes de publicar actualizaciones de sus paquetes o imágenes de contenedores, mientras que otros podrían aplicar parches en el lugar. En cualquier caso, Snyk puede ayudarte a encontrar y corregir los problemas.

Actualiza curl en tus dispositivos

Una vez que esté disponible una versión corregida del binario curl, actualiza las versiones que tengas instaladas. Publicaremos algunos consejos útiles sobre cómo actualizarlo en otro post: hay varias formas de instalar curl, y los métodos de actualización pueden variar según el sistema operativo. 

¿Qué está haciendo Snyk?

Snyk publicó un aviso de marcador de posición para el problema de flujo ascendente de alta gravedad. El contenido del marcador de posición se actualizará a medida que haya más información. 

Los expertos en seguridad de Snyk siguen activamente las actualizaciones de versiones, la información sobre vulnerabilidades, las conversaciones en las redes sociales y mucho más para proporcionar a nuestros clientes cualquier información que les llegue. Además, se está investigando para hallar otros paquetes de flujo descendente que puedan verse afectados. Actualizaremos este blog cuando sea necesario.

Snyk Top 10: Vulnerabilites you should know

Find out which types of vulnerabilities are most likely to appear in your projects based on Snyk scan results and security research.