- Un artículo sobre CVE-2023-38545, un problema de seguridad importante descubierto en curl 8.4.0, considerado el problema de seguridad más grave en curl en mucho tiempo
- El problema es un desbordamiento de heap, causado por un defecto en la función que se conecta a un proxy SOCKS5
- Este problema se introdujo a principios de 2020, cuando la función se convirtió de llamadas bloqueantes a una máquina de estados no bloqueante, cambio realizado para mejorar el rendimiento de grandes transferencias paralelas a través de SOCKS5
- El defecto está en el estado INIT de la máquina de estados, donde se configura una variable local y curl decide si resolverá el host o si pasará el nombre al proxy. Si el nombre del host es demasiado largo, el código cambia al modo de resolución local, lo que puede provocar un desbordamiento de memoria si el nombre del host es más largo que el búfer de destino
- El desbordamiento puede ocurrir si el tamaño del búfer se configura por debajo de 65541 bytes y el nombre del host es más largo que el tamaño del búfer. Esto requiere que un actor malicioso introduzca un nombre de host gigantesco en la fórmula para detonar el defecto
- Un atacante que controle un servidor HTTPS al que acceden clientes que usan libcurl a través de un proxy SOCKS5 puede provocar un desbordamiento de búfer en el heap devolviendo a la aplicación una redirección manipulada mediante una respuesta HTTP 30x
- Este problema fue corregido en curl 8.4.0 haciendo que curl devuelva un error cuando el nombre del host es demasiado largo, en lugar de cambiar de resolución remota a resolución local. También se agregó un caso de prueba dedicado para este escenario
- El autor reconoce que este defecto no habría ocurrido si curl hubiera sido escrito en un lenguaje con seguridad de memoria en lugar de C, pero aclara que por ahora no hay planes de portar curl a otro lenguaje
- El autor propone que una vía viable es permitir, usar y dar soporte a más dependencias escritas en lenguajes con seguridad de memoria, e incluso reemplazar gradualmente algunas partes de curl
- El autor reconoce el error y se disculpa, señalando que este defecto podría haberse detectado con un mejor conjunto de pruebas. También menciona a los analizadores estáticos de código que no lograron encontrar el problema en esta función
- El autor concluye que entregar un desbordamiento de heap en código instalado en más de 20 mil millones de instancias no es una experiencia recomendable
1 comentarios
Comentarios en Hacker News