Vulnerabilidad en kernel de Linux (CVE-2025-21922)
Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
01/04/2025
Última modificación:
11/04/2025
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: ppp: Corrección de la advertencia de valor no inicializado de KMSAN con bpf. Syzbot detectó una advertencia "KMSAN: valor no inicializado" [1], causada por el controlador ppp que no inicializa una cabecera de 2 bytes al usar un filtro de socket. El siguiente código puede generar un programa BPF con filtro 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 ''' Wen puede encontrar código similar en el siguiente enlace: https://github.com/ppp-project/ppp/blob/master/pppd/options.c#L1680 El fabricante de este repositorio de código también es el fabricante original del controlador ppp. Como puede ver, el programa BPF omite 2 bytes de datos y luego lee el campo 'Protocolo' para determinar si es un paquete IP. Luego lee el primer byte de los primeros 2 bytes para determinar la dirección. El problema es que solo se inicializa el primer byte que indica la dirección en el código del controlador ppp actual, mientras que el segundo byte no se inicializa. En los programas BPF normales generados por libpcap, no se utilizan datos no inicializados, por lo que no supone un problema. Sin embargo, en programas BPF cuidadosamente manipulados, como los generados por syzkaller [2], que empiezan a leer desde el desplazamiento 0, KMSAN utilizará y capturará los datos no inicializados. [1] https://syzkaller.appspot.com/bug?extid=853242d9c9917165d791 [2] https://syzkaller.appspot.com/text?tag=ReproC&x=11994913980000
Impacto
Puntuación base 3.x
5.50
Gravedad 3.x
MEDIA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 2.6.12 (incluyendo) | 5.4.291 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.5 (incluyendo) | 5.10.235 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (incluyendo) | 5.15.179 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (incluyendo) | 6.1.131 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (incluyendo) | 6.6.83 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (incluyendo) | 6.12.19 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.13 (incluyendo) | 6.13.7 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:6.14:rc1:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.14:rc2:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.14:rc3:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.14:rc4:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.14:rc5:*:*:*:*:*:* |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/1eacd47636a9de5bee25d9d5962dc538a82d9f0b
- https://git.kernel.org/stable/c/2f591cb158807bdcf424f66f1fbfa6e4e50f3757
- https://git.kernel.org/stable/c/3de809a768464528762757e433cd50de35bcb3c1
- https://git.kernel.org/stable/c/4c2d14c40a68678d885eab4008a0129646805bae
- https://git.kernel.org/stable/c/4e2191b0fd0c064d37b0db67396216f2d4787e0f
- https://git.kernel.org/stable/c/8aa8a40c766b3945b40565a70349d5581458ff63
- https://git.kernel.org/stable/c/c036f5f2680cbdabdbbace86baee3c83721634d6
- https://git.kernel.org/stable/c/d685096c8129c9a92689975193e268945fd21dbf