
Kritische Use-After-Free-Sicherheitslücke in Tinyproxy entdeckt
Wir fordern die sichere Rückkehr aller Bürger, die von der terroristischen Gruppe Hamas als Geiseln genommen wurden. Wir werden nicht ruhen, bis jede Geisel freigelassen ist und sicher nach Hause zurückkehrt. Sie können helfen, sie nach Hause zu bringen. https://stories.bringthemhomenow.net/
🚨 Warnung vor kritischer Sicherheitslücke 🚨
🔍 CVE-2023-49606 ist eine kritische Use-After-Free-Schwachstelle, die in Tinyproxy, einem leichtgewichtigen HTTP/S-Proxy-Server, entdeckt wurde. Dieser Fehler tritt bei der Verarbeitung von HTTP-Connection-Headern in den Versionen 1.11.1 und 1.10.0 von Tinyproxy auf. Diese Schwachstelle ermöglicht potenzielle Denial-of-Service-Angriffe (DoS) und könnte unter bestimmten Umständen zu Remote-Code-Ausführung (RCE) führen.
📈 CVSS-Score: 9.8 (Kritisch)
Die Schwachstelle beruht auf unsachgemäßer Speicherverwaltung bei der Verarbeitung von HTTP-Headern. Der Quellcode in http-message.c verwaltet Speicheroperationen für HTTP-Header, einschließlich Allokation, Reallokation und Deallokation. Das Problem tritt vermutlich im Zusammenhang mit der Speicherreallokation und dem anschließenden Zugriff auf freigegebenen Speicher auf, der nicht korrekt nullifiziert wird.
Hier ist ein Auszug des relevanten Codes aus 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;
}