- Artigo sobre a CVE-2023-38545, uma importante falha de segurança descoberta no curl 8.4.0, considerada o problema de segurança mais grave no curl em muito tempo
- O problema é um heap overflow causado por uma falha na função que se conecta a um proxy SOCKS5
- Esse problema foi introduzido no início de 2020, quando a função foi convertida de chamadas bloqueantes para uma máquina de estados não bloqueante, mudança feita para melhorar o desempenho de grandes transferências paralelas via SOCKS5
- A falha está no estado INIT da máquina de estados, onde uma variável local é configurada e decide se o curl resolverá o host localmente ou passará o nome ao proxy. Se o nome do host for longo demais, o código muda para o modo de resolução local, o que pode causar estouro de memória se o nome do host for maior que o buffer de destino
- O overflow pode ocorrer quando o tamanho do buffer é configurado para menos de 65541 bytes e o nome do host é maior que o tamanho do buffer. Isso exige que um agente malicioso forneça um nome de host extremamente grande para acionar a falha
- Um atacante que controle um servidor HTTPS acessado por um cliente que usa libcurl por meio de um proxy SOCKS5 pode provocar um heap buffer overflow ao retornar à aplicação um redirecionamento manipulado via resposta HTTP 30x
- O problema foi corrigido no curl 8.4.0 fazendo com que o curl retorne erro quando o nome do host for longo demais, em vez de mudar da resolução remota para a local. Também foi adicionado um caso de teste dedicado para esse cenário
- O autor reconhece que essa falha não teria ocorrido se o curl tivesse sido escrito em uma linguagem com segurança de memória em vez de C, mas afirma que portar o curl para outra linguagem não está nos planos atuais
- O autor sugere que permitir, usar e dar suporte a mais dependências escritas em linguagens com segurança de memória é uma abordagem viável e que, aos poucos, isso pode substituir partes do curl
- O autor admite o erro e pede desculpas, dizendo que essa falha poderia ter sido detectada com um conjunto de testes melhor. Ele também menciona analisadores estáticos de código que não encontraram o problema nessa função
- O autor conclui que disparar um heap overflow em um código instalado em mais de 20 bilhões de instâncias não é uma experiência recomendável
1 comentários
Opiniões do Hacker News