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

Vulnerabilidad en kernel de Linux (CVE-2025-22003)

Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-125 Lectura fuera de límites
Fecha de publicación:
03/04/2025
Última modificación:
10/04/2025

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: can: ucan: fix out of bound read in strscpy() source Commit 7fdaf8966aae ("can: ucan: use strscpy() to instead of strncpy()") introdujo involuntariamente una lectura fuera de los límite de un byte en el argumento source de strscpy() (lo cual es un poco irónico sabiendo que strscpy() está destinado a ser una alternativa más segura :)). Consideremos los siguientes búferes: dest[len + 1]; /* terminará en NUL */ src[len]; /* puede que no termine en NUL */ Al hacer: strncpy(dest, src, len); dest[len] = '\0'; strncpy() leerá hasta len bytes desde src. Por otro lado: strscpy(dest, src, len + 1); Leerá hasta len + 1 bytes de src; es decir, se producirá una lectura fuera de los límites de un byte en src si no termina en NUL. Tenga en cuenta que el byte src[len] nunca se copia, pero strscpy() aún necesita leerlo para verificar si se produjo un truncamiento. Este mismo patrón ocurrió en ucan. La causa raíz es que el origen no termina en NUL. En lugar de hacer una copia en un búfer local, termine directamente en NUL tan pronto como usb_control_msg() regrese. Con esto, se puede eliminar la variable local firmware_str[]. Además, realice un par de refactorizaciones: - ucan_ctl_payload->raw solo se usa para la cadena de firmware, así que renómbrelo a ucan_ctl_payload->fw_str y cambie su tipo de u8 a char. - ucan_device_request_in() solo se utiliza para recuperar la cadena de firmware, así que cámbiele el nombre a ucan_get_fw_str() y refactorícelo para que gestione directamente toda la lógica de terminación de la cadena.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.2 (incluyendo) 6.6.85 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.7 (incluyendo) 6.12.21 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.13 (incluyendo) 6.13.9 (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:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.14:rc6:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.14:rc7:*:*:*:*:*:*