CVE-2025-21922 in Linux
Resumen
por VulDB • 2026-06-19
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
ppp: Corregir la advertencia KMSAN uninit-value con bpf
Syzbot detectó una advertencia "KMSAN: uninit-value" [1], causada por que el controlador ppp no inicializa una cabecera de 2 bytes al utilizar un filtro de socket.
El siguiente código puede generar un programa BPF para filtros PPP: ''' struct bpf_program fp; pcap_t *handle; handle = pcap_open_dead(DLT_PPP_PPPD, 65535); pcap_compile(handle, &fp, "ip and outbound", 0, 0); bpf_dump(&fp, 1); '''
Su salida es: ''' (000) ldh [2]
(001) jeq #0x21 jt 2 jf 5 (002) ldb [0]
(003) jeq #0x1 jt 4 jf 5 (004) ret #65535 (005) ret #0 '''
Se puede encontrar código similar en el siguiente enlace: https://github.com/ppp-project/ppp/blob/master/pppd/options.c#L1680 El mantenedor de este repositorio de código es también el mantenedor original del controlador ppp.
Como se puede ver, el programa BPF omite 2 bytes de datos y luego lee el campo 'Protocol' para determinar si se trata de un paquete IP. A continuación, lee el primer byte de los primeros 2 bytes para determinar la dirección.
El problema es que solo el primer byte que indica la dirección está inicializado en el código actual del controlador ppp, mientras que el segundo byte no lo está.
Para programas BPF normales generados por libpcap, los datos sin inicializar no se utilizarán, por lo que no constituye un problema. Sin embargo, para programas BPP cuidadosamente elaborados (crafted), como aquellos generados por syzkaller [2], que comienzan a leer desde el desplazamiento 0, se utilizarán los datos sin inicializar y serán detectados por KMSAN.
[1] https://syzkaller.appspot.com/bug?extid=853242d9c9917165d791
[2] https://syzkaller.appspot.com/text?tag=ReproC&x=11994913980000
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.