
Programa XDP/eBPF que descarta paquetes IPv4 que transportan opciones IP (IHL > 5) en la interfaz para mitigar el use-after-free del handshake TCP de CVE-2026-98432.
Un pequeño programa XDP para mitigar CVE-2026-98432, un use-after-free en el manejo del handshake TCP del kernel con opciones IPv4. En la mayoría de los hosts el fallo solo puede desencadenarse mediante un SYN entrante que lleve opciones IP (consulte la excepción NetLabel/CIPSO más abajo), por lo que este programa descarta los paquetes IPv4 con opciones antes de que se entreguen a la pila de red del kernel.
Un paquete tiene opciones IP cuando su campo IHL (longitud de cabecera) es mayor que 5, lo que significa que la cabecera IPv4 tiene más de 20 bytes.
[!WARNING] Esto puede no proteger a los hosts que usan NetLabel/CIPSO (SELinux o Smack con una asignación
CIPSOV4). En esos hosts el kernel puede adjuntar opciones IP por sí mismo, por lo que el fallo podría ser alcanzable con SYNs normales. Un kernel parcheado es la solución más fiable en esos casos.netlabelctl map listpuede ayudar a determinar si un host usa CIPSO: las entradas de tipoCIPSOV4sugieren que sí.
| Paquete | Acción |
|---|---|
| IPv4 con opciones (IHL > 5) | XDP_DROP |
| IPv4 sin opciones | XDP_PASS |
| Cualquier otra cosa (IPv6, ARP, …) | XDP_PASS |
| Cabecera truncada / malformada | XDP_PASS |
También se manejan las tramas con etiqueta VLAN: el programa omite hasta dos etiquetas VLAN (802.1Q y 802.1ad/QinQ) antes de comprobar si es IPv4. Las tramas con más de dos etiquetas se dejan pasar.
En un host Linux:
clang y llvmlibbpf-dev (para bpf/bpf_helpers.h)linux-headers-$(uname -r) o linux-libc-dev)iproute2 (para ip link), y opcionalmente bpftoolDebian / Ubuntu:
sudo apt install clang llvm libbpf-dev linux-libc-dev iproute2 bpftool
Fedora:
sudo dnf install clang llvm libbpf-devel kernel-headers iproute bpftool
make
Esto genera drop_ipv4_opt.o.
Sustituya eth0 por el nombre de su interfaz (consulte ip link).
Modo nativo (driver), que es el más rápido:
sudo ip link set dev eth0 xdpdrv obj drop_ipv4_opt.o sec xdp
Modo genérico (SKB), que funciona en cualquier interfaz pero es más lento:
sudo ip link set dev eth0 xdpgeneric obj drop_ipv4_opt.o sec xdp
Deje que el kernel elija el modo (nativo si es compatible, si no genérico):
sudo ip link set dev eth0 xdp obj drop_ipv4_opt.o sec xdp
ip link show dev eth0 # busque "xdp" / "prog/xdp id N"
sudo bpftool net show dev eth0
sudo ip link set dev eth0 xdp off
Use xdpdrv off o xdpgeneric off si lo adjuntó en ese modo específico.
Desde otro host, envíe un paquete con una opción IP, por ejemplo con la opción Record Route:
ping -R <target-ip>
Con el programa adjunto, estos pings no reciben respuesta. Un ping <target-ip> normal sigue funcionando.
MIT. Consulte LICENSE.