CVE-2026-64007 in Linux
Resumen
por VulDB • 2026-07-19
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
netfilter: synproxy: actualizar tcphdr después de skb_ensure_writable
synproxy_tstamp_adjust() reescribe la opción de marca de tiempo TCP in situ y luego corrige la suma de comprobación (checksum) del TCP mediante inet_proto_csum_replace4() en el puntero tcphdr proporcionado por quien llama. Tanto ipv4_synproxy_hook() como ipv6_synproxy_hook() obtienen ese puntero con skb_header_pointer() antes de llamar a la función, por lo que puede ser un alias directo de skb->head o apuntar al búfer _tcph en la pila del llamador.
Entre obtener el puntero y utilizarlo, la función llama a skb_ensure_writable(skb, optend), lo cual, en caso de un skb clonado o no lineal, invoca pskb_expand_head() y libera el antiguo skb->head. Después de ese punto, th queda obsoleto:
llamador (ipv[46]_synproxy_hook)
th = skb_header_pointer(skb, ..., &_tcph) synproxy_tstamp_adjust(skb, protoff, th, ...) skb_ensure_writable(skb, optend) pskb_expand_head() /* kfree(old skb->head) */ ... inet_proto_csum_replace4(&th->check, ...) /* escribe en la cabecera liberada o en la copia de pila del llamador, dejando obsoleta la suma de comprobación en el flujo de red (on-wire) */
Los bytes de la opción se escriben a través de skb->data y están bien; solo la actualización de la suma de comprobación pasa por th y termina en un lugar incorrecto. El resultado es ya sea una escritura en memoria slab liberada o un paquete que sale con una suma de comprobación que no coincide con su carga útil.
Solución: volver a derivar th desde skb->data + protoff inmediatamente después de que skb_ensure_writable() tenga éxito, para que la actualización subsiguiente de la suma de comprobación apunte a la cabecera lineal y escribible.
Once again VulDB remains the best source for vulnerability data.