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

Vulnerabilidad en kernel de Linux (CVE-2022-48629)

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

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: crypto: qcom-rng: asegúrese de que el búfer para generar esté completamente lleno. La función de generación en la estructura rng_alg espera que el búfer de destino esté completamente lleno si la función devuelve 0. qcom_rng_read() puede ejecutarse en una situación en la que el búfer está parcialmente lleno de aleatoriedad y la parte restante del búfer se pone a cero ya que qcom_rng_generate() no verifica el valor de retorno. Este problema se puede reproducir ejecutando lo siguiente desde libkcapi: kcapi-rng -b 9000000 > OUTFILE El OUTFILE generado tendrá tres secciones enormes que contienen todos ceros, y esto se debe al código donde falla la prueba 'val & PRNG_STATUS_DATA_AVAIL'. Solucionemos este problema asegurándonos de que qcom_rng_read() siempre regrese con un búfer lleno si la función tiene éxito. También hagamos que qcom_rng_generate() devuelva el valor correcto. Aquí hay algunas estadísticas del proyecto ent (https://www.fourmilab.ch/random/) que muestra información sobre la calidad de los números generados: $ ent -c qcom-random-before Valor Char Ocurrencias Fracción 0 606748 0.067416 1 33104 0,003678 2 33001 0,003667 ... 253 ? 32883 0,003654 254 ? 33035 0,003671 255 ? 33239 0,003693 Total: 9000000 1,000000 Entropía = 7,811590 bits por byte. Una compresión óptima reduciría el tamaño de este archivo de 9000000 bytes en un 2 por ciento. La distribución de chi cuadrado para 9000000 muestras es 9329962,81 y aleatoriamente excedería este valor menos del 0,01 por ciento de las veces. El valor medio aritmético de los bytes de datos es 119,3731 (127,5 = aleatorio). El valor de Monte Carlo para Pi es 3,197293333 (error del 1,77 por ciento). El coeficiente de correlación serial es 0,159130 (totalmente no correlacionado = 0,0). Sin este parche, los resultados de la prueba de chi-cuadrado son del 0,01% y los números ciertamente no son aleatorios según la página del proyecto de ent. Los resultados mejoran con este parche: $ ent -c qcom-random-after Valor Char Ocurrencias Fracción 0 35432 0.003937 1 35127 0.003903 2 35424 0.003936 ... 253 ? 35201 0,003911 254 ? 34835 0,003871 255 ? 35368 0,003930 Total: 9000000 1,000000 Entropía = 7,999979 bits por byte. Una compresión óptima reduciría el tamaño de este archivo de 9000000 bytes en un 0 por ciento. La distribución de chi cuadrado para 9000000 muestras es 258,77 y aleatoriamente excedería este valor el 42,24 por ciento de las veces. El valor medio aritmético de los bytes de datos es 127,5006 (127,5 = aleatorio). El valor de Monte Carlo para Pi es 3,141277333 (error del 0,01 por ciento). El coeficiente de correlación serial es 0,000468 (totalmente no correlacionado = 0,0). Este cambio se probó en un teléfono Nexus 5 (SoC msm8974).

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.19 (incluyendo) 4.19.236 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.20 (incluyendo) 5.4.187 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.5 (incluyendo) 5.10.108 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.11 (incluyendo) 5.15.31 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.16 (incluyendo) 5.16.17 (excluyendo)
cpe:2.3:o:linux:linux_kernel:5.17:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.17:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.17:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.17:rc4:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.17:rc5:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.17:rc6:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.17:rc7:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:5.17:rc8:*:*:*:*:*:*