Vulnerabilidade em destaque: como um problema de reutilização de código levou a vulnerabilidades em vários produtos
Pesquisador identifica códigos reutilizados e consequentemente, com os mesmos bugs
Por Francesco Bem-vindo.
Recentemente, eu estava realizando algumas pesquisas em um roteador sem fio e notei o seguinte trecho de código:
Esta função unescape reverterá os bytes codificados de URL para sua forma original. Mas algo me chamou a atenção especificamente: não houve verificação de tamanho para as operações realizadas e a função assume que após um ‘%’ sempre há dois bytes. Então, o que aconteceria se depois de ‘%’, apenas um caractere existisse? A resposta é que o s+3, no strcpy, acessará após o final da string. Portanto, isso pode levar à corrupção de memória.Então, tentei explorar esse bug no roteador em questão. Mas com base em como a string de URL foi gerenciada nesse dispositivo, não foi possível. Mas tinha o potencial de travar outros servidores da web que usavam esse pedaço de código. Essa função pertencia à biblioteca freshtomato. Então, procurei o código-fonte e notei que no início do arquivo que continha essa função, havia o seguinte comentário:
Era código da Broadcom. Procurei pedaços desses comentários no Google e encontrei alguns projetos usando esse código. Então, eu também usei grep.app escrevendo uma regex tentando pegar o layout do bug e encontrei outros projetos. Alguns desses projetos eram códigos que podem ser modificados e/ou em cenários de servidor web. Então, testamos o código e eventualmente contatamos vários fornecedores sobre vulnerabilidades em seus respectivos produtos.
As semelhanças entre o código utilizado por cada um dos diferentes projetos são tão semelhantes que é razoável supor que o código é retirado da mesma fonte inicial. Vendo como o código originalmente detinha direitos autorais da Broadcom, é provável que o código fosse parte de uma implementação de referência que a Broadcom lançou para ajudar os clientes a implementar um servidor HTTP usando um produto da Broadcom. Essa vulnerabilidade se torna mais interessante à medida que os produtos vulneráveis são analisados com mais profundidade, incluindo o software de código aberto ArduPilot. Este software é um pacote de veículo autônomo de código aberto, não vinculado à Broadcom de forma alguma, de modo que o código vulnerável chegou à base de código sem uma implementação de referência direta. Esse tipo de reutilização estendida de código é extraordinariamente difícil de rastrear, mesmo com as práticas de codificação seguras modernas, devido ao código ser ligeiramente modificado para atender especificamente a cada caso de uso. Por esses motivos, é extremamente importante que os desenvolvedores estejam atentos ao revisar as funcionalidades externas que são modificadas e inseridas em uma base de código, bem como que os pesquisadores de segurança investiguem problemas que podem ser facilmente alterados em vários pacotes de software.
Abaixo estão as vulnerabilidades que divulgamos e ajudamos a corrigir como parte dessa descoberta. TALOS-2022-1509 TALOS-2022-1511 e TALOS-2022-1512 foram corrigidos por suas respectivas empresas ou mantenedores. No entanto, estamos divulgando o TALOS-2022-1510 sem patch, devido à falha do fornecedor em aderir ao prazo de 90 dias da Cisco como parte da política de divulgação de vulnerabilidades.
TALOS-2022-1509 (CVE-2022-28664 – CVE-2022-28665)
Uma vulnerabilidade de corrupção de memória na funcionalidade unescape do httpd do FreshTomato, versão 2022.1. Uma solicitação HTTP especialmente criada pode levar à corrupção de memória. Um invasor pode enviar uma solicitação de rede para acionar essa vulnerabilidade.
TALOS-2022-1510 (CVE-2022-27631)
Uma vulnerabilidade de corrupção de memória na funcionalidade unescape do httpd do DD-WRT da Revisão 32270 à Revisão 48599 — um firmware baseado em Linux para sistemas embarcados. Uma solicitação HTTP especialmente criada pode levar à corrupção de memória. Um invasor pode enviar uma solicitação de rede para acionar essa vulnerabilidade.
TALOS-2022-1511 (CVE-2022-26376)
Uma vulnerabilidade de corrupção de memória no firmware oficial da Asuswrt, bem como na alternativa de firmware de código aberto Asuswrt-Merlin New Gen para roteadores sem fio Asus. A vulnerabilidade existe na funcionalidade unescape do httpd desses firmwares. Uma solicitação HTTP especialmente criada pode levar à corrupção de memória. Um invasor pode enviar uma solicitação de rede para acionar essa vulnerabilidade. ASUSWRT, o software de interface de usuário da empresa para gerenciar dispositivos Asus, também é afetado por essa vulnerabilidade.
TALOS-2022-1512 (CVE-2022-28711)
Uma vulnerabilidade de corrupção de memória na funcionalidade unescape do cgi.c do ArduPilot APWeb do branch master 50b6b7ac para o branch master 46177cb9. O ArduPilot é um conjunto de software de código aberto que permite aos usuários programar dispositivos autônomos de voo e direção, como drones. Uma solicitação HTTP especialmente criada pode levar à corrupção de memória. Um invasor pode enviar uma solicitação de rede para acionar essa vulnerabilidade.