Vulnerabilidade remota na pilha IPv6 do OpenBSD

No processo em segundo plano slaacd, responsável pela configuração automática de endereços IPv6 (IPv6 Stateless Address Autoconfiguration, RFC 4862) no OpenBSD, foi identificada uma vulnerabilidade que leva a um buffer overflow ao receber um anúncio de roteador IPv6 especialmente projetado (RA, Router Advertisement) .

Inicialmente, a funcionalidade de configuração automática de endereços IPv6 foi implementada no nível do kernel, mas a partir do OpenBSD 6.2 ela foi movida para um processo slaacd separado e sem privilégios. Este processo é responsável por enviar mensagens RS (Router Solicitation) e analisar respostas RA (Router Advertisement) com informações sobre o roteador e os parâmetros de conexão da rede.

Em fevereiro, o slaacd corrigiu um bug que causava seu travamento se 7 servidores fossem especificados na lista RDNSS (servidores DNS recursivos). Esse descuido atraiu a atenção de pesquisadores independentes que tentaram examinar o código slaacd em busca de outros erros que ocorrem ao analisar campos em mensagens RA. A análise mostrou que há outro problema no código, que se manifesta ao processar o campo DNSSL (DNS Search List), que inclui listas de nomes de domínio e modelos de host para DNS.

Cada nome na lista DNSSL é codificado usando um delimitador nulo e tags de um byte intermediárias que determinam o tamanho dos dados a seguir. A vulnerabilidade é causada pelo fato de que no código de análise de lista, um campo com um tamanho é copiado para uma variável com tipo inteiro assinado (“len = data[pos]”). Assim, se um valor for especificado no campo com o bit mais significativo definido, esse valor será percebido no operador condicional como um número negativo e a verificação do tamanho máximo permitido (“if (len > 63 || len + pos + 1 > datalen) {“) não funcionará, o que levará a uma chamada para memcpy com um parâmetro cujo tamanho dos dados copiados excede o tamanho do buffer.

Vulnerabilidade remota na pilha IPv6 do OpenBSD
Vulnerabilidade remota na pilha IPv6 do OpenBSD


Fonte: opennet.ru

Adicionar um comentário