Há poucos dias foi divulgada a notícia de que nas bibliotecas padrão C uClibc e uClibc-ng, usado em muitos dispositivos embarcados e portáteis, uma vulnerabilidade foi identificada (com CVE ainda não atribuído), que permite a substituição de dados fictícios no cache DNS, que podem ser usados para falsificar o endereço IP de um domínio arbitrário no cache e redirecionar solicitações do domínio para o servidor do invasor.
Sobre o problema é mencionado que este afeta vários firmwares Linux para roteadores, pontos de acesso e dispositivos IoT, assim como distribuições Linux embarcadas como OpenWRT e Embedded Gentoo.
Sobre vulnerabilidade
Vulnerabilidade é devido ao uso de identificadores de transação previsíveis no código para enviar consultas de DNS. O ID de consulta DNS foi escolhido simplesmente incrementando o contador sem randomização adicional dos números de porta, o que tornou possível envenenar o cache DNS enviando antecipadamente pacotes UDP com respostas falsas (a resposta será aceita se chegar antes da resposta do servidor real e incluir a identificação correta).
Ao contrário do método Kaminsky proposto em 2008, nem é necessário adivinhar o ID da transação, pois ele é inicialmente previsível (inicialmente, é definido como 1, que aumenta a cada solicitação, e não é selecionado aleatoriamente).
Para se proteger contra a adivinhação de ID, a especificação recomenda ainda o uso de uma distribuição aleatória de números de porta de rede de origem de onde são enviadas as consultas DNS, o que compensa o tamanho insuficiente do ID.
Quando a randomização de portas está habilitada, para formar uma resposta fictícia, além de selecionar um identificador de 16 bits, também é necessário selecionar o número da porta da rede. No uClibc e no uClibc-ng, tal randomização não era explicitamente habilitada (quando o bind era chamado, uma porta UDP de origem aleatória não era especificada) e sua implementação dependia da configuração do sistema operacional.
Quando a randomização de portas está desabilitada, determinar qual ID de solicitação incrementar é marcado como uma tarefa trivial. Mas mesmo no caso de randomização, o invasor só precisa adivinhar a porta de rede no intervalo 32768-60999, para a qual ele pode usar o envio simultâneo massivo de respostas fictícias em diferentes portas de rede.
O problema foi confirmado em todas as versões atuais do uClibc e uClibc-ng, incluindo as versões mais recentes do uClibc 0.9.33.2 e uClibc-ng 1.0.40.
“É importante notar que uma vulnerabilidade que afeta uma biblioteca C padrão pode ser bastante complexa”, escreveu a equipe em um post no blog esta semana.
"Não apenas haveria centenas ou milhares de chamadas para a função vulnerável em vários pontos em um único programa, mas a vulnerabilidade afetaria um número indefinido de outros programas de vários fornecedores configurados para usar essa biblioteca".
Em setembro de 2021, foram enviadas informações sobre a vulnerabilidade ao CERT/CC para preparação coordenada da matriz. Em janeiro de 2022, o problema foi compartilhado com mais de 200 fabricantes associado ao CERT/CC.
Em março, houve uma tentativa de contatar separadamente o mantenedor do projeto uClibc-ng, mas ele respondeu que não poderia corrigir a vulnerabilidade sozinho e recomendou a divulgação pública de informações sobre o problema, na esperança de obter ajuda para desenvolver uma correção. a comunidade. Dos fabricantes, a NETGEAR anunciou o lançamento de uma atualização com a remoção da vulnerabilidade.
É importante observar que uma vulnerabilidade que afeta uma biblioteca C padrão pode ser bastante complexa. Não apenas haveria centenas ou milhares de chamadas para a função vulnerável em vários pontos em um único programa, mas a vulnerabilidade afetaria um número indefinido de outros programas de vários fornecedores configurados para usar essa biblioteca.
Note-se que a vulnerabilidade se manifesta em dispositivos de vários fabricantes (por exemplo, uClibc é usado em firmware da Linksys, Netgear e Axis), mas como a vulnerabilidade permanece sem correção em uClibc e uClibc-ng, informações detalhadas sobre dispositivos e fabricantes em cujos produtos há um problema, até que sejam divulgados.
Finalmente se você estiver interessado em saber mais sobre isso, você pode verificar os detalhes no link a seguir.