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

Hadas Bloom
4 de octubre de 2023
0 minutos de lecturaActualizació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).

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

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.