Desbordamiento de búfer en curl y libcurl, que se manifiesta al acceder a través de un proxy SOCKS5

Se ha detectado una vulnerabilidad (CVE-2023-38545) en la utilidad curl para enviar y recibir datos por la red y en la biblioteca libcurl en desarrollo, que puede provocar un desbordamiento de búfer y potencialmente permitir la ejecución de código malicioso en el lado del cliente al acceder a un servidor HTTPS controlado por un atacante utilizando la utilidad curl o una aplicación que use libcurl. El problema se manifiesta solo si se habilita el acceso a través de un proxy SOCKS5 en curl. En el acceso directo sin proxy, la vulnerabilidad no se presenta. La vulnerabilidad se ha solucionado en la versión 8.4.0 de curl. El investigador de seguridad que descubrió el error recibió una recompensa de $4660 a través de la iniciativa Internet Bug Bounty en Hackerone.

La vulnerabilidad se debe a un error en el código de resolución de nombres de host antes de acceder al proxy SOCKS5. Para nombres de host de hasta 256 caracteres, curl envía inmediatamente el nombre al proxy SOCKS5 para su resolución, y si el nombre supera los 255 caracteres, cambia al resolvedor local y envía ya una dirección determinada al SOCKS5. Debido a un error en el código, la bandera que indica la necesidad de resolución local podría haberse establecido incorrectamente durante el proceso de negociación lenta de la conexión a través de SOCKS5, lo que llevó a que un nombre de host largo se escribiera en un búfer reservado para almacenar. IP o un nombre que no supere los 255 caracteres.

El propietario del sitio web al que curl accede a través del proxy SOCKS5 puede iniciar un desbordamiento de búfer en el lado del cliente al devolver un código de redirección de solicitud (HTTP 30x) y establecer en el encabezado "Location:" una URL con un nombre de host cuyo tamaño se encuentre en el rango de 16 a 64 KB (el valor de 16 KB se debe al tamaño mínimo necesario para provocar el desbordamiento del búfer reservado, y el valor de 65 KB está relacionado con la longitud máxima permitida para un nombre de host en la URL). Si en la configuración de libcurl se permite la redirección de solicitudes y el proxy SOCKS5 utilizado es lo suficientemente lento, el nombre largo del host se escribirá en un búfer pequeño que es deliberadamente de menor tamaño.

La vulnerabilidad afecta principalmente a las aplicaciones basadas en libcurl y se manifiesta en la utilidad curl solo cuando se utiliza la opción "—limit-rate" con un valor menor que 65541; en libcurl, por defecto, se reserva un búfer de 16 KB, y en la utilidad curl, de 100 KB, pero este tamaño cambia según el valor del parámetro "—limit-rate".

Daniel Stenberg, autor del proyecto, mencionó que la vulnerabilidad permaneció sin ser detectada durante 1315 días. También se dijo que el 41% de las vulnerabilidades previamente identificadas en curl probablemente se podrían haber evitado si curl hubiera sido escrito en un idioma que garantizara un manejo seguro de la memoria, pero no hay planes para reescribir curl en otro idioma en el futuro cercano. Como medidas para mejorar la seguridad de la base de código, se propone ampliar las herramientas para la prueba de código y utilizar más activamente las dependencias escritas en lenguajes de programación que aseguran un manejo seguro de la memoria. También se está considerando la posibilidad de reemplazar gradualmente partes de curl por alternativas escritas en lenguajes seguros, como el backend HTTP experimental Hyper, implementado en el lenguaje Rust.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster