sábado, 12 de agosto de 2017

cURL y libcurl afectados por varias vulnerabilidades

Se ha publicado una nueva versión de la librería libcurl y de la propia herramienta curl, para corregir 3 vulnerabilidades que podrían permitir a un atacante local o remoto obtener información sensible o causar una denegación de servicio


cURL es un cliente de transferencia de archivos multiprotocolo que también tiene una versión en formato librería (libcurl) para poder ser integrado en productos de terceros. Es una de las herramientas de referencia en su ámbito, y es utilizada por millones de usuarios en diversos sistemas operativos, utilidades y aplicaciones webs. En su página web aparece una lista incompleta de los productos comerciales que usan libcurl.

Son tres las vulnerabilidades que se han corregido en esta nueva versión:

  • La vulnerabilidad identificada como CVE-2017-1000101, afecta únicamente a la versión de línea de comandos (no a la librería). Básicamente es un error al parsear una URL con formato incorrecto, que podría permitir la lectura de una pequeña cantidad de memoria del proceso (o al menos, detener el proceso). El escenario de ataque más claro es un atacante local que introduce una URL especialmente manipulada en una aplicación que usa libcurl
  • Otra vulnerabilidad, ésta identificada como CVE-2017-1000099afecta a ambas versiones, línea de comandos y libcurl. El error se produce por utilizar por error un trozo de memoria no inicializado cuando se realiza una petición a una URL con protocolo file:// (archivos locales), lo que confunde al programa y puede terminar devolviendo al usuario un trozo extra inesperado de memoria dinámica en una pseudo-cabecera HTTP (cURL devuelve los metadatos del archivo como cabeceras HTTP). El escenario de ataque sería muy similar al de la vulnerabilidad comentada anteriormente.
  • Y finalmente, el CVE-2017-1000100 también afecta a ambas versiones, línea de comandos y libcurl. Este error sí que tiene bastante más peligro, y recuerda un poco a Heartbleed, aunque en este caso sería revelación de información del cliente hacia el servidor, y no al contrario. El problema es que las URL's con protocolo TFTP que son demasiado largas son truncadas por cURL cuando se almacenan en memoria, pero cURL usa la longitud previa al truncamiento cuando quiere transmitir información al servidor. Por lo que termina saliendo de los límites de memoria asignado y envía más de lo debido. Debido a la estructura de memoria dinámica no se puede saber qué hay exactamente después, pero podría ser cualquier cosa. El ataque más simple sería, ante una petición al servidor maligno, que éste redirigiese a una URL especialmente manipulada con protocolo TFTP apuntando al mismo servidor (para recoger la memoria filtrada).

La nueva versión publicada es la 7.55.0, no es una versión publicada expresamente para corregir vulnerabilidades (es decir, resuelve otros fallos no relacionados con la seguridad y añade nuevas funcionalidades), y está disponible desde https://curl.haxx.se/download.html. También se han publicado parches individuales para solucionar los diferentes fallos de seguridad.


Carlos Ledesma