Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en kernel de Linux (CVE-2024-43897)

Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
26/08/2024
Última modificación:
12/09/2024

Descripción

En el kernel de Linux, se resolvió la siguiente vulnerabilidad: net: elimine gso csum_start incorrecto y offset en virtio_net_hdr. Apriete las comprobaciones de csum_start y csum_offset en virtio_net_hdr_to_skb para paquetes GSO. La función ya comprueba que una suma de comprobación solicitada con VIRTIO_NET_HDR_F_NEEDS_CSUM esté en skb lineal. Pero para los paquetes OSG esto podría no ser válido para los segmentos posteriores a la segmentación. Syzkaller demostró alcanzar esta advertencia en skb_checksum_help offset = skb_checksum_start_offset(skb); ret = -EINVAL; if (WARN_ON_ONCE(offset >= skb_headlen(skb))) Al inyectar un paquete TSO: ADVERTENCIA: CPU: 1 PID: 3539 en net/core/dev.c:3284 skb_checksum_help+0x3d0/0x5b0 ip_do_fragment+0x209/0x1b20 net/ipv4 /ip_output.c:774 ip_finish_output_gso net/ipv4/ip_output.c:279 [en línea] __ip_finish_output+0x2bd/0x4b0 net/ipv4/ip_output.c:301 iptunnel_xmit+0x50c/0x930 net/ipv4/ip_tunnel_core.c:82 +0x2296 /0x2c70 net/ipv4/ip_tunnel.c:813 __gre_xmit net/ipv4/ip_gre.c:469 [en línea] ipgre_xmit+0x759/0xa60 net/ipv4/ip_gre.c:661 __netdev_start_xmit include/linux/netdevice.h:4850 [en línea ] netdev_start_xmit include/linux/netdevice.h:4864 [en línea] xmit_one net/core/dev.c:3595 [en línea] dev_hard_start_xmit+0x261/0x8c0 net/core/dev.c:3611 __dev_queue_xmit+0x1b97/0x3c90 net/core/ dev.c:4261 paquete_snd net/packet/af_packet.c:3073 [en línea] La geometría del paquete de entrada incorrecto en tcp_gso_segment: [ 52.003050][ T8403] skb len=12202 headroom=244 headlen=12093 tailroom=0 [ 52.003050] [ T8403] mac=(168,24) mac_len=24 net=(192,52) trans=244 [ 52.003050][ T8403] shinfo(txflags=0 nr_frags=1 gso(tamaño=1552 tipo=3 segs=0)) [ 52.003050][ T8403] csum(0x60000c7 start=199 offset=1536 ip_summed=3 complete_sw=0 valid=0 nivel=0) Mitigar con una validación de entrada más estricta. csum_offset: para paquetes GSO, deduzca el valor correcto de gso_type. Esto ya está hecho para la OSU. Ampliarlo a TSO. Sea UFO: udp[46]_ufo_fragment ignora estos campos y siempre calcula la suma de comprobación en el software. csum_start: encontrar el desplazamiento real requiere analizar el encabezado de transporte. No agregue un analizador, utilice el análisis de segmentación existente. Gracias a SKB_GSO_DODGY, eso también detecta paquetes defectuosos que se descargan correctamente. Nuevamente pruebe tanto TSO como USO. No pruebe UFO por el motivo anterior y no pruebe la descarga del túnel UDP. Los paquetes OSG casi siempre son CHECKSUM_PARTIAL. Los paquetes USO pueden ser CHECKSUM_NONE desde el commit 10154dbded6d6 ("udp: Permitir transmisión GSO desde dispositivos sin descarga de suma de verificación"), pero aún así estos campos se inicializan correctamente en udp4_hwcsum/udp6_hwcsum_outgoing. Por lo tanto, no es necesario probar primero ip_summed == CHECKSUM_PARTIAL. Esto revisa una solución existente mencionada en la etiqueta Correcciones, que rompía paquetes pequeños con la descarga GSO, según lo detectado por kselftests.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.15.165 (incluyendo) 6.1.107 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.6.44 (incluyendo) 6.6.46 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.10.3 (incluyendo) 6.10.5 (excluyendo)
cpe:2.3:o:linux:linux_kernel:6.11:rc1:*:*:*:*:*:*