
Vulnerabilità critica use-after-free scoperta in Tinyproxy
Chiediamo il ritorno sicuro di tutti i cittadini che sono stati presi in ostaggio dal gruppo terroristico Hamas. Non ci fermeremo finché ogni ostaggio non sarà rilasciato e non tornerà a casa sano e salvo. Puoi aiutare a riportarli a casa. https://stories.bringthemhomenow.net/
🚨 Allerta di vulnerabilità critica 🚨
🔍 CVE-2023-49606 è una vulnerabilità critica di tipo use-after-free scoperta in Tinyproxy, un server proxy HTTP/S leggero. Questo difetto è presente nella gestione delle intestazioni di connessione HTTP nelle versioni 1.11.1 e 1.10.0 di Tinyproxy. Tale vulnerabilità consente potenziali attacchi di denial of service (DoS) e, in circostanze specifiche, potrebbe portare all'esecuzione remota di codice (RCE).
📈 Punteggio CVSS: 9.8 (Critico)
La vulnerabilità deriva da una gestione impropria della memoria durante la gestione delle intestazioni HTTP. Il codice sorgente in http-message.c gestisce le operazioni di memoria per le intestazioni HTTP, inclusi allocazione, riallocazione e deallocazione. Il problema sorge probabilmente nel contesto della riallocazione della memoria e del successivo accesso a memoria liberata, che non viene correttamente annullata.
Ecco un estratto del codice rilevante da 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;
}