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

Vulnerabilidad en kernel de Linux (CVE-2023-52527)

Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
02/03/2024
Última modificación:
13/01/2025

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: ipv4, ipv6: se corrigió el manejo de transhdrlen en __ip{,6}_append_data() Incluir el transhdrlen en longitud es un problema cuando el paquete está parcialmente lleno (por ejemplo, algo como enviar(MSG_MORE ) sucedió anteriormente) al agregarlo a un paquete IPv4 o IPv6, ya que no queremos repetir el encabezado de transporte ni contabilizarlo dos veces. Esto puede suceder en algunas circunstancias, como al realizar un empalme en un zócalo L2TP. El síntoma observado es una advertencia en __ip6_append_data(): ADVERTENCIA: CPU: 1 PID: 5042 en net/ipv6/ip6_output.c:1800 __ip6_append_data.isra.0+0x1be8/0x47f0 net/ipv6/ip6_output.c:1800 que ocurre cuando MSG_SPLICE_PAGES se utiliza para agregar más datos a un skbuff que ya está parcialmente ocupado. La advertencia se produce cuando 'copiar' es mayor que la cantidad de datos en el iterador del mensaje. Esto se debe a que la longitud solicitada incluye la longitud del encabezado de transporte cuando no debería hacerlo. Esto puede desencadenarse, por ejemplo: sfd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_L2TP); enlazar(sfd, ...); // ::1 conectar(sfd, ...); // ::1 puerto 7 enviar(sfd, buffer, 4100, MSG_MORE); enviar archivo (sfd, dfd, NULL, 1024); Solucione este problema agregando solo transhdrlen a la longitud si la cola de escritura está vacía en l2tp_ip6_sendmsg(), de manera análoga a cómo hace las cosas UDP. Parece que l2tp_ip_sendmsg() no sufrirá este problema ya que construye el paquete UDP por sí mismo.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 3.5 (incluyendo) 4.14.327 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.15 (incluyendo) 4.19.296 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.20 (incluyendo) 5.4.258 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.5 (incluyendo) 5.10.198 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.11 (incluyendo) 5.15.135 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.16 (incluyendo) 6.1.57 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.2 (incluyendo) 6.5.7 (excluyendo)
cpe:2.3:o:linux:linux_kernel:6.6:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.6:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.6:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.6:rc4:*:*:*:*:*:*