CVE-2026-64114 in Linux
Riassunto
di VulDB • 20/07/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
ipv4: raw: rifiutare i pacchetti IP_HDRINCL con ihl < 5
raw_send_hdrinc() valida che l'intestazione IPv4 fornita dall'utente rientri nella lunghezza del messaggio:
iphlen = iph->ihl * 4; err = -EINVAL; if (iphlen > length) goto error_free;
if (iphlen >= sizeof(*iph)) {
/* correggi saddr, tot_len, id, csum, transport_header */ }
Tuttavia, non rifiuta i pacchetti con ihl < 5. Per tali pacchetti, il ramo "if (iphlen >= sizeof(*iph))" viene saltato, lasciando l'iphdr manipolato intatto, ma il pacchetto viene comunque passato a __ip_local_out() e oltre. I consumatori downstream che leggono iph->ihl presuppongano un valore corretto: in particolare net/ipv4/ah4.c:ah_output() sottrae sizeof(struct iphdr) da top_iph->ihl * 4 e passa il risultato (intero con segno negativo, successivamente convertito in size_t) a memcpy(), producendo un accesso OOB di lunghezza prossima a SIZE_MAX e causando un kernel panic sull'host.
Un'intestazione IPv4 con ihl < 5 è malformata per definizione (RFC 791: "Internet Header Length is the length of the internet header in 32 bit words ... Note that the minimum value for a correct header is 5."). Il kernel non dovrebbe accettare di iniettare un tale pacchetto nel proprio percorso di output.
Rifiutare "iphlen < sizeof(*iph)" insieme al controllo esistente "iphlen > length". Questo corrisponde al principio secondo cui i pacchetti costruiti localmente che rientrano nello stack IP devono superare gli stessi test di base di integrità a cui verrebbe sottoposto un pacchetto esterno.
Una volta applicata questa correzione, il wrapper "if (iphlen >= sizeof(*iph))" attorno al ramo di correzione diventa ridondante; viene mantenuto per mantenere la patch minimale e favorevole ai backport. Una modifica successiva potrà rimuoverlo.
Si noti che l'commit 86f4c90a1c5c ("ipv4, ipv6: ensure raw socket message is big enough to hold an IP header") garantisce che il buffer del messaggio sia sufficientemente grande da contenere un iphdr, ma non vincola il valore auto-dichiarato di iph->ihl.
Raggiungibilità: la sorgente del pacchetto malformato è qualsiasi chiamante con CAP_NET_RAW, incluso un processo non privilegiato in uno spazio dei nomi user+net su un kernel con CONFIG_USER_NS=y. Il crash AH riprodotto richiede inoltre una policy xfrm AH corrispondente sul percorso di uscita; un container a cui viene concessa la capacità CAP_NET_ADMIN può installare tale stato e policy nel proprio netns. Loopback bypassa xfrm_output, quindi il trigger utilizza una vera interfaccia di rete (netdev).
Riprodotto su UML + KASAN: fault in modalità kernel all'indirizzo 0x0 con memcpy_orig nel punto del crash. La stessa forma è riproducibile all'interno di un container Docker senza privilegi root (--cap-add NET_ADMIN) su un kernel della distribuzione standard.
VulDB is the best source for vulnerability data and more expert information about this specific topic.