Estouro de buffer em curl e libcurl, manifestado ao acessar através de um proxy SOCKS5

Foi identificada uma vulnerabilidade (CVE-2023-38545) no utilitário de recebimento e envio de dados pela rede curl e pela biblioteca libcurl, que está sendo desenvolvida em paralelo, o que pode levar a um buffer overflow e potencialmente à execução de código invasor em do lado do cliente, quando acessado usando o utilitário curl ou um aplicativo usando libcurl, para um servidor HTTPS controlado pelo invasor. O problema só aparece se o acesso via proxy SOCKS5 estiver habilitado no curl. Ao acessar diretamente sem proxy, a vulnerabilidade não aparece. A vulnerabilidade foi corrigida na versão curl 8.4.0. O pesquisador de segurança que descobriu o bug recebeu uma recompensa de US$ 4660 como parte da iniciativa Internet Bug Bounty da Hackerone.

A vulnerabilidade é causada por um bug no código de resolução de nomes de host antes de contatar o proxy SOCKS5. Se o nome do host tiver até 256 caracteres, o curl o passa imediatamente para o proxy SOCKS5 para resolução local. Se o nome do host tiver mais de 255 caracteres, ele alterna para um resolvedor local e passa o endereço predefinido para o SOCKS5. Devido a um bug no código, o sinalizador que indica a necessidade de resolução local pode ser configurado incorretamente durante a lenta negociação da conexão SOCKS5, resultando na gravação do nome do host longo em um buffer alocado para armazenamento. Endereços IP ou um nome que não exceda 255 caracteres.

O proprietário de um site acessado por curl por meio de um proxy SOCKS5 pode acionar um buffer overflow do lado do cliente retornando um código de redirecionamento de solicitação (HTTP 30x) e definindo o cabeçalho "Location:" para uma URL com um nome de host variando em tamanho de 16 até 64 KB (16 KB é o tamanho mínimo necessário para estourar o buffer alocado e 65 KB é o comprimento máximo permitido do nome do host em uma URL). Se o redirecionamento de solicitação estiver habilitado nas configurações do libcurl e o proxy SOCKS5 usado for lento o suficiente, o nome longo do host será gravado em um buffer pequeno, obviamente de tamanho menor.

A vulnerabilidade afeta principalmente aplicativos baseados em libcurl e aparece no utilitário curl apenas ao usar a opção “--limit-rate” com valor menor que 65541 - libcurl por padrão aloca um buffer de 16 KB de tamanho, e no utilitário curl tem 100 KB, mas o tamanho muda dependendo do valor do parâmetro “-limit-rate”.

Daniel Stenberg, autor do projeto, mencionou que a vulnerabilidade permaneceu sem ser detectada por 1315 dias. Ele também diz que 41% das vulnerabilidades identificadas anteriormente no curl provavelmente poderiam ter sido evitadas se o curl tivesse sido escrito em uma linguagem segura para memória, mas não há planos para reescrever o curl em outra linguagem em um futuro próximo. Como medidas para melhorar a segurança da base de código, propõe-se ampliar as ferramentas de teste de código e utilizar mais ativamente dependências escritas em linguagens de programação que garantam a operação segura com memória. Também está considerando a possibilidade de substituir gradualmente partes do curl por opções escritas em linguagens seguras, como o backend experimental Hyper HTTP implementado em Rust.

Fonte: opennet.ru

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