
Vulnérabilité critique de type use-after-free découverte dans Tinyproxy
Nous exigeons le retour en sécurité de tous les citoyens qui ont été pris en otage par le groupe terroriste Hamas. Nous ne nous reposerons pas tant que chaque otage ne sera pas libéré et rentré chez lui en sécurité. Vous pouvez aider à les ramener à la maison. https://stories.bringthemhomenow.net/
🚨 Alerte de vulnérabilité critique 🚨
🔍 CVE-2023-49606 est une vulnérabilité critique de type use-after-free découverte dans Tinyproxy, un serveur proxy HTTP/S léger. Cette faille est présente dans la gestion des en-têtes de connexion HTTP dans les versions 1.11.1 et 1.10.0 de Tinyproxy. Cette vulnérabilité permet des attaques potentielles par déni de service (DoS) et, dans des circonstances spécifiques, pourrait conduire à une exécution de code à distance (RCE).
📈 Score CVSS : 9.8 (Critique)
La vulnérabilité provient d'une gestion incorrecte de la mémoire lors du traitement des en-têtes HTTP. Le code source dans http-message.c gère les opérations mémoire pour les en-têtes HTTP, y compris l'allocation, la réallocation et la désallocation. Le problème survient probablement dans le contexte d'une réallocation mémoire et d'un accès ultérieur à une mémoire libérée, qui n'est pas correctement annulée.
/* 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;
}