
Vulnerabilidad crítica de use-after-free descubierta en Tinyproxy
Exigimos el regreso seguro de todos los ciudadanos que han sido tomados como rehenes por el grupo terrorista Hamás. No descansaremos hasta que cada rehén sea liberado y regrese a casa sano y salvo. Puedes ayudar a traerlos de vuelta. https://stories.bringthemhomenow.net/
🚨 Alerta de Vulnerabilidad Crítica 🚨
🔍 CVE-2023-49606 es una vulnerabilidad crítica de use-after-free descubierta en Tinyproxy, un servidor proxy HTTP/S ligero. Este fallo está presente en el manejo de las cabeceras de conexión HTTP dentro de las versiones 1.11.1 y 1.10.0 de Tinyproxy. Esta vulnerabilidad permite posibles ataques de denegación de servicio (DoS) y, bajo circunstancias específicas, podría conducir a la ejecución remota de código (RCE).
📈 Puntuación CVSS: 9.8 (Crítica)
La vulnerabilidad se origina en una gestión inadecuada de la memoria al manejar cabeceras HTTP. El código fuente en http-message.c maneja operaciones de memoria para las cabeceras HTTP, incluyendo asignación, reasignación y liberación. El problema probablemente surge en el contexto de la reasignación de memoria y el posterior acceso a memoria liberada, la cual no se anula correctamente.
Este es un extracto del código relevante de http-message.c:
/* Function to add headers to the HTTP message structure */
void http_message_add_headers(http_message_t *msg, const char **headers, unsigned int num_headers) {
const char **new_headers;
unsigned int i;
if (headers == NULL) {
return;
}
// Check if there is enough space, if not, reallocate
if (msg->headers.used + num_headers > msg->headers.total) {
new_headers = (const char **) safecalloc (msg->headers.total * 2, sizeof(char *));
if (new_headers == NULL) {
return; // Allocation failed, potential for use-after-free if not handled
}
// Copy existing headers to the new array
for (i = 0; i != msg->headers.used; ++i) {
new_headers[i] = msg->headers.strings[i];
}
safefree(msg->headers.strings); // Free old array
msg->headers.strings = new_headers; // Danger if old pointers are used post this point
msg->headers.total *= 2;
}
// Add new headers to the structure
for (i = 0; i != num_headers; ++i) {
msg->headers.strings[i + msg->headers.used] = headers[i];
}
msg->headers.used += num_headers;
}