
Vulnerabilidade crítica de use-after-free descoberta no Tinyproxy
Exigimos o retorno seguro de todos os cidadãos que foram feitos reféns pelo grupo terrorista Hamas. Não descansaremos até que todos os reféns sejam libertados e voltem para casa em segurança. Você pode ajudar a trazê-los de volta. https://stories.bringthemhomenow.net/
🚨 Alerta de Vulnerabilidade Crítica 🚨
🔍 CVE-2023-49606 é uma vulnerabilidade crítica de uso após liberação (use-after-free) descoberta no Tinyproxy, um servidor proxy HTTP/S leve. Essa falha está presente no tratamento dos Cabeçalhos de Conexão HTTP nas versões 1.11.1 e 1.10.0 do Tinyproxy. Essa vulnerabilidade permite potenciais ataques de negação de serviço (DoS) e, em circunstâncias específicas, pode levar à execução remota de código (RCE).
📈 Pontuação CVSS: 9.8 (Crítica)
A vulnerabilidade decorre do gerenciamento inadequado de memória ao processar cabeçalhos HTTP. O código-fonte em http-message.c lida com operações de memória para cabeçalhos HTTP, incluindo alocação, realocação e desalocação. O problema provavelmente surge no contexto de realocação de memória e subsequente acesso à memória liberada, que não é corretamente anulada.
Aqui está um trecho do 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;
}