
Dispositivos Kemp LoadMaster (firmware < 7.2.60) sofrem de uma vulnerabilidade crítica de estouro de buffer nos métodos isreverse() e locate_fqdn() da biblioteca libkemplink.so. A vulnerabilidade decorre de um buffer subdimensionado de 256 bytes alocado para Nomes DNS, que pode ser explorado enviando uma solicitação DNS especialmente criada contendo caracteres especiais ou Unicode.
A exploração bem-sucedida leva a uma falha imediata e a uma condição de negação de serviço (DoS). A presença de um token canário de pilha impede uma exploração adicional, mas a possibilidade de execução remota de código (RCE) não pode ser descartada se um atacante encontrar outra vulnerabilidade para vazar o token canário de pilha.
A vulnerabilidade é facilmente acionada enviando uma solicitação DNS por TCP ou UDP para os serviços DNS expostos do dispositivo LoadMaster. Uma prova de conceito simples é:
dig @kempdeviceip 😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀.com (Em algumas versões do Linux, você precisará adicionar +noidnout +noidnin)
O exploit aproveita uma etapa específica do processo de resolução de nomes DNS. Embora o buffer alocado de 256 bytes seja o tamanho máximo padrão para Nomes DNS transmitidos pela rede, e a prova de conceito caiba dentro desse limite, os caracteres especiais e Unicode se expandem em tamanho quando são escapados durante o processamento. Assim, o tamanho do buffer após o escape excede a alocação original. A documentação e o código-fonte da biblioteca Bind9 (da qual o componente DNS é um fork) indicam que um buffer de pelo menos 1004 bytes é necessário para uma operação segura, sendo recomendado um tamanho conservador de buffer de 1023 bytes. Para mais detalhes, consulte aqui.
Cronologia: