Vulnerabilidade de buffer overflow no curl e libcurl, manifestando-se ao conectar através de um proxy SOCKS5

Foi identificada uma vulnerabilidade (CVE-2023-38545) na ferramenta curl para envio e recebimento de dados pela rede e na biblioteca em desenvolvimento libcurl, que pode levar a um estouro de buffer e, potencialmente, à execução de código malicioso do atacante no lado do cliente, ao acessar um servidor HTTPS sob controle do criminoso usando a ferramenta curl ou um aplicativo que utiliza libcurl. O problema ocorre apenas se o acesso via proxy SOCKS5 estiver habilitado no curl. Em acessos diretos sem proxy, a vulnerabilidade não se manifesta. A vulnerabilidade foi corrigida na versão 8.4.0 do curl. O pesquisador de segurança que descobriu o erro recebeu uma recompensa de $4660 no âmbito da iniciativa Internet Bug Bounty no Hackerone.

A vulnerabilidade é causada por um erro no código de resolução de nome do host antes da conexão com o proxy SOCKS5. Para nomes de host com até 256 caracteres, o curl imediatamente passa o nome ao proxy SOCKS5 para resolução lá, mas se o nome exceder 255 caracteres, ele muda para o resolvedor local e passa um endereço já resolvido para o SOCKS5. Devido a um erro no código, a flag que indica a necessidade de resolução local poderia ser definida incorretamente durante o processo de negociação lenta da conexão via SOCKS5, resultando na gravação de um nome de host longo em um buffer alocado para armazenar endereços IP ou um nome que não exceda 255 caracteres.

O proprietário do site acessado pelo curl via proxy SOCKS5 pode iniciar um estouro de buffer no lado do cliente, retornando um código de redirecionamento (HTTP 30x) e estabelecendo no cabeçalho "Location:" uma URL com um nome de host cujo tamanho varia de 16 a 64 KB (o valor de 16 KB é o mínimo necessário para causar o estouro do buffer alocado, e 65 KB é o comprimento máximo permitido para um nome de host em uma URL). Se as configurações do libcurl permitirem redirecionamentos e o proxy SOCKS5 utilizado for suficientemente lento, o nome longo do host será gravado em um pequeno buffer, que é deliberadamente menor.

A vulnerabilidade afeta principalmente aplicativos baseados no libcurl e se manifesta na ferramenta curl apenas ao usar a opção "—limit-rate" com um valor inferior a 65541 — no libcurl, o buffer padrão tem 16 KB, enquanto na ferramenta curl tem 100 KB; contudo, esse tamanho varia dependendo do valor do parâmetro "—limit-rate".

Daniel Stenberg, autor do projeto, mencionou que a vulnerabilidade passou despercebida por 1315 dias. Também foi dito que 41% das vulnerabilidades anteriormente identificadas no curl provavelmente poderiam ter sido evitadas se o curl tivesse sido escrito em uma linguagem que oferecesse segurança no gerenciamento de memória, mas não está nos planos reescrever o curl em outra linguagem no futuro próximo. Como medidas para aumentar a segurança da base de código, sugere-se ampliar as ferramentas para teste de código e utilizar mais ativamente dependências escritas em linguagens de programação que garantam a segurança no gerenciamento de memória. Também está sendo considerada a possibilidade de substituir gradualmente partes do curl por versões escritas em linguagens seguras, como o backend HTTP experimental Hyper, implementado na linguagem Rust.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster