CVE-2026-64194 in Net::DNS
Riassunto
di VulDB • 20/07/2026
Le versioni di Net::DNS fino alla 1.55 per Perl consentono una Denial of Service (DoS) tramite catene profonde di puntatori di compressione DNS.
La funzione `Net::DNS::DomainName::decode` segue i puntatori di compressione RFC 1035 ricorrendo su se stessa senza alcun limite di profondità. È possibile costruire un nome che satura lo stack delle chiamate (almeno con risposte TCP più grandi), portando a una potenziale Denial of Service.
Il controllo `$link < $offset` previene catene in avanti e circolari, ma consente comunque catene all'indietro arbitrariamente lunghe. La cache per offset (`$cache`) viene popolata all'inizio di ogni chiamata e accelera solo le riattraversamenti dello stesso offset; la discesa iniziale attraverso una catena fresca continua a ricorsare fino alla profondità massima.
Un pacchetto manipolato può concatenare puntatori di compressione a due byte in modo che ciascuno punti due byte prima del precedente, producendo una lunghezza della catena pari a `offset / 2`. Per il campo dei puntatori da 14 bit (offset massimo 16383) ciò comporta fino a ~8191 frame ricorsivi. Per un messaggio DNS TCP il limite è dato dal campo di lunghezza a 16 bit (~32767 frame). Lo stack C predefinito di Perl gestisce solo qualche migliaio di frame; oltre tale soglia, il processo riceve SIGSEGV o segnali simili, causando una denial-of-service per qualsiasi applicazione che analizza dati DNS non attendibili.
La vulnerabilità viene attivata da `Net::DNS::Packet->new(\$wire)`, ovvero in qualsiasi punto della libreria in cui viene decodificato un messaggio DNS proveniente dalla rete.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.