fkie_cve-2022-48629
Vulnerability from fkie_nvd
Published
2024-03-05 12:15
Modified
2025-02-26 07:00
Severity ?
Summary
In the Linux kernel, the following vulnerability has been resolved:
crypto: qcom-rng - ensure buffer for generate is completely filled
The generate function in struct rng_alg expects that the destination
buffer is completely filled if the function returns 0. qcom_rng_read()
can run into a situation where the buffer is partially filled with
randomness and the remaining part of the buffer is zeroed since
qcom_rng_generate() doesn't check the return value. This issue can
be reproduced by running the following from libkcapi:
kcapi-rng -b 9000000 > OUTFILE
The generated OUTFILE will have three huge sections that contain all
zeros, and this is caused by the code where the test
'val & PRNG_STATUS_DATA_AVAIL' fails.
Let's fix this issue by ensuring that qcom_rng_read() always returns
with a full buffer if the function returns success. Let's also have
qcom_rng_generate() return the correct value.
Here's some statistics from the ent project
(https://www.fourmilab.ch/random/) that shows information about the
quality of the generated numbers:
$ ent -c qcom-random-before
Value Char Occurrences Fraction
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
Entropy = 7.811590 bits per byte.
Optimum compression would reduce the size
of this 9000000 byte file by 2 percent.
Chi square distribution for 9000000 samples is 9329962.81, and
randomly would exceed this value less than 0.01 percent of the
times.
Arithmetic mean value of data bytes is 119.3731 (127.5 = random).
Monte Carlo value for Pi is 3.197293333 (error 1.77 percent).
Serial correlation coefficient is 0.159130 (totally uncorrelated =
0.0).
Without this patch, the results of the chi-square test is 0.01%, and
the numbers are certainly not random according to ent's project page.
The results improve with this patch:
$ ent -c qcom-random-after
Value Char Occurrences Fraction
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
Entropy = 7.999979 bits per byte.
Optimum compression would reduce the size
of this 9000000 byte file by 0 percent.
Chi square distribution for 9000000 samples is 258.77, and randomly
would exceed this value 42.24 percent of the times.
Arithmetic mean value of data bytes is 127.5006 (127.5 = random).
Monte Carlo value for Pi is 3.141277333 (error 0.01 percent).
Serial correlation coefficient is 0.000468 (totally uncorrelated =
0.0).
This change was tested on a Nexus 5 phone (msm8974 SoC).
References
Impacted products
| Vendor | Product | Version | |
|---|---|---|---|
| linux | linux_kernel | * | |
| linux | linux_kernel | * | |
| linux | linux_kernel | * | |
| linux | linux_kernel | * | |
| linux | linux_kernel | * | |
| linux | linux_kernel | 5.17 | |
| linux | linux_kernel | 5.17 | |
| linux | linux_kernel | 5.17 | |
| linux | linux_kernel | 5.17 | |
| linux | linux_kernel | 5.17 | |
| linux | linux_kernel | 5.17 | |
| linux | linux_kernel | 5.17 | |
| linux | linux_kernel | 5.17 |
{
"configurations": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"matchCriteriaId": "D1F07A37-C787-4411-B951-D5CEC6EFBA6D",
"versionEndExcluding": "4.19.236",
"versionStartIncluding": "4.19",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"matchCriteriaId": "D9FFB805-4ED2-4FAE-9EF4-8AB4BC9D8F5C",
"versionEndExcluding": "5.4.187",
"versionStartIncluding": "4.20",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"matchCriteriaId": "24925527-AC4A-4594-8D6C-3B34D31862C5",
"versionEndExcluding": "5.10.108",
"versionStartIncluding": "5.5",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"matchCriteriaId": "F25C317E-A673-47D1-844E-171C9BFDF352",
"versionEndExcluding": "5.15.31",
"versionStartIncluding": "5.11",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"matchCriteriaId": "DC9A634D-C617-4F8C-ADEF-AF94CE69D687",
"versionEndExcluding": "5.16.17",
"versionStartIncluding": "5.16",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:5.17:rc1:*:*:*:*:*:*",
"matchCriteriaId": "7BD5F8D9-54FA-4CB0-B4F0-CB0471FDDB2D",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:5.17:rc2:*:*:*:*:*:*",
"matchCriteriaId": "E6E34B23-78B4-4516-9BD8-61B33F4AC49A",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:5.17:rc3:*:*:*:*:*:*",
"matchCriteriaId": "C030FA3D-03F4-4FB9-9DBF-D08E5CAC51AA",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:5.17:rc4:*:*:*:*:*:*",
"matchCriteriaId": "B2D2677C-5389-4AE9-869D-0F881E80D923",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:5.17:rc5:*:*:*:*:*:*",
"matchCriteriaId": "EFA3917C-C322-4D92-912D-ECE45B2E7416",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:5.17:rc6:*:*:*:*:*:*",
"matchCriteriaId": "BED18363-5ABC-4639-8BBA-68E771E5BB3F",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:5.17:rc7:*:*:*:*:*:*",
"matchCriteriaId": "7F635F96-FA0A-4769-ADE8-232B3AC9116D",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:5.17:rc8:*:*:*:*:*:*",
"matchCriteriaId": "FD39FE73-2A9D-4C92-AE7A-CA22F84B228D",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\ncrypto: qcom-rng - ensure buffer for generate is completely filled\n\nThe generate function in struct rng_alg expects that the destination\nbuffer is completely filled if the function returns 0. qcom_rng_read()\ncan run into a situation where the buffer is partially filled with\nrandomness and the remaining part of the buffer is zeroed since\nqcom_rng_generate() doesn\u0027t check the return value. This issue can\nbe reproduced by running the following from libkcapi:\n\n kcapi-rng -b 9000000 \u003e OUTFILE\n\nThe generated OUTFILE will have three huge sections that contain all\nzeros, and this is caused by the code where the test\n\u0027val \u0026 PRNG_STATUS_DATA_AVAIL\u0027 fails.\n\nLet\u0027s fix this issue by ensuring that qcom_rng_read() always returns\nwith a full buffer if the function returns success. Let\u0027s also have\nqcom_rng_generate() return the correct value.\n\nHere\u0027s some statistics from the ent project\n(https://www.fourmilab.ch/random/) that shows information about the\nquality of the generated numbers:\n\n $ ent -c qcom-random-before\n Value Char Occurrences Fraction\n 0 606748 0.067416\n 1 33104 0.003678\n 2 33001 0.003667\n ...\n 253 \ufffd 32883 0.003654\n 254 \ufffd 33035 0.003671\n 255 \ufffd 33239 0.003693\n\n Total: 9000000 1.000000\n\n Entropy = 7.811590 bits per byte.\n\n Optimum compression would reduce the size\n of this 9000000 byte file by 2 percent.\n\n Chi square distribution for 9000000 samples is 9329962.81, and\n randomly would exceed this value less than 0.01 percent of the\n times.\n\n Arithmetic mean value of data bytes is 119.3731 (127.5 = random).\n Monte Carlo value for Pi is 3.197293333 (error 1.77 percent).\n Serial correlation coefficient is 0.159130 (totally uncorrelated =\n 0.0).\n\nWithout this patch, the results of the chi-square test is 0.01%, and\nthe numbers are certainly not random according to ent\u0027s project page.\nThe results improve with this patch:\n\n $ ent -c qcom-random-after\n Value Char Occurrences Fraction\n 0 35432 0.003937\n 1 35127 0.003903\n 2 35424 0.003936\n ...\n 253 \ufffd 35201 0.003911\n 254 \ufffd 34835 0.003871\n 255 \ufffd 35368 0.003930\n\n Total: 9000000 1.000000\n\n Entropy = 7.999979 bits per byte.\n\n Optimum compression would reduce the size\n of this 9000000 byte file by 0 percent.\n\n Chi square distribution for 9000000 samples is 258.77, and randomly\n would exceed this value 42.24 percent of the times.\n\n Arithmetic mean value of data bytes is 127.5006 (127.5 = random).\n Monte Carlo value for Pi is 3.141277333 (error 0.01 percent).\n Serial correlation coefficient is 0.000468 (totally uncorrelated =\n 0.0).\n\nThis change was tested on a Nexus 5 phone (msm8974 SoC)."
},
{
"lang": "es",
"value": "En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: crypto: qcom-rng: aseg\u00farese de que el b\u00fafer para generar est\u00e9 completamente lleno. La funci\u00f3n de generaci\u00f3n en la estructura rng_alg espera que el b\u00fafer de destino est\u00e9 completamente lleno si la funci\u00f3n devuelve 0. qcom_rng_read() puede ejecutarse en una situaci\u00f3n en la que el b\u00fafer est\u00e1 parcialmente lleno de aleatoriedad y la parte restante del b\u00fafer 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 \u0026gt; OUTFILE El OUTFILE generado tendr\u00e1 tres secciones enormes que contienen todos ceros, y esto se debe al c\u00f3digo donde falla la prueba \u0027val \u0026amp; PRNG_STATUS_DATA_AVAIL\u0027. Solucionemos este problema asegur\u00e1ndonos de que qcom_rng_read() siempre regrese con un b\u00fafer lleno si la funci\u00f3n tiene \u00e9xito. Tambi\u00e9n hagamos que qcom_rng_generate() devuelva el valor correcto. Aqu\u00ed hay algunas estad\u00edsticas del proyecto ent (https://www.fourmilab.ch/random/) que muestra informaci\u00f3n sobre la calidad de los n\u00fameros generados: $ ent -c qcom-random-before Valor Char Ocurrencias Fracci\u00f3n 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\u00eda = 7,811590 bits por byte. Una compresi\u00f3n \u00f3ptima reducir\u00eda el tama\u00f1o de este archivo de 9000000 bytes en un 2 por ciento. La distribuci\u00f3n de chi cuadrado para 9000000 muestras es 9329962,81 y aleatoriamente exceder\u00eda este valor menos del 0,01 por ciento de las veces. El valor medio aritm\u00e9tico 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\u00f3n 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\u00fameros ciertamente no son aleatorios seg\u00fan la p\u00e1gina del proyecto de ent. Los resultados mejoran con este parche: $ ent -c qcom-random-after Valor Char Ocurrencias Fracci\u00f3n 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\u00eda = 7,999979 bits por byte. Una compresi\u00f3n \u00f3ptima reducir\u00eda el tama\u00f1o de este archivo de 9000000 bytes en un 0 por ciento. La distribuci\u00f3n de chi cuadrado para 9000000 muestras es 258,77 y aleatoriamente exceder\u00eda este valor el 42,24 por ciento de las veces. El valor medio aritm\u00e9tico 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\u00f3n serial es 0,000468 (totalmente no correlacionado = 0,0). Este cambio se prob\u00f3 en un tel\u00e9fono Nexus 5 (SoC msm8974)."
}
],
"id": "CVE-2022-48629",
"lastModified": "2025-02-26T07:00:18.270",
"metrics": {
"cvssMetricV31": [
{
"cvssData": {
"attackComplexity": "LOW",
"attackVector": "LOCAL",
"availabilityImpact": "HIGH",
"baseScore": 5.5,
"baseSeverity": "MEDIUM",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "LOW",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"exploitabilityScore": 1.8,
"impactScore": 3.6,
"source": "nvd@nist.gov",
"type": "Primary"
}
]
},
"published": "2024-03-05T12:15:45.707",
"references": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"tags": [
"Exploit",
"Mailing List",
"Patch"
],
"url": "https://git.kernel.org/stable/c/0f9b7b8df17525e464294c916acc8194ce38446b"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"tags": [
"Exploit",
"Mailing List",
"Patch"
],
"url": "https://git.kernel.org/stable/c/184f7bd08ce56f003530fc19f160d54e75bf5c9d"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"tags": [
"Exploit",
"Mailing List",
"Patch"
],
"url": "https://git.kernel.org/stable/c/485995cbc98a4f77cfd4f8ed4dd7ff8ab262964d"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"tags": [
"Exploit",
"Mailing List",
"Patch"
],
"url": "https://git.kernel.org/stable/c/a680b1832ced3b5fa7c93484248fd221ea0d614b"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"tags": [
"Exploit",
"Mailing List",
"Patch"
],
"url": "https://git.kernel.org/stable/c/a8e32bbb96c25b7ab29b1894dcd45e0b3b08fd9d"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"tags": [
"Exploit",
"Mailing List",
"Patch"
],
"url": "https://git.kernel.org/stable/c/ab9337c7cb6f875b6286440b1adfbeeef2b2b2bd"
},
{
"source": "af854a3a-2127-422b-91ae-364da2661108",
"tags": [
"Exploit",
"Mailing List",
"Patch"
],
"url": "https://git.kernel.org/stable/c/0f9b7b8df17525e464294c916acc8194ce38446b"
},
{
"source": "af854a3a-2127-422b-91ae-364da2661108",
"tags": [
"Exploit",
"Mailing List",
"Patch"
],
"url": "https://git.kernel.org/stable/c/184f7bd08ce56f003530fc19f160d54e75bf5c9d"
},
{
"source": "af854a3a-2127-422b-91ae-364da2661108",
"tags": [
"Exploit",
"Mailing List",
"Patch"
],
"url": "https://git.kernel.org/stable/c/485995cbc98a4f77cfd4f8ed4dd7ff8ab262964d"
},
{
"source": "af854a3a-2127-422b-91ae-364da2661108",
"tags": [
"Exploit",
"Mailing List",
"Patch"
],
"url": "https://git.kernel.org/stable/c/a680b1832ced3b5fa7c93484248fd221ea0d614b"
},
{
"source": "af854a3a-2127-422b-91ae-364da2661108",
"tags": [
"Exploit",
"Mailing List",
"Patch"
],
"url": "https://git.kernel.org/stable/c/a8e32bbb96c25b7ab29b1894dcd45e0b3b08fd9d"
},
{
"source": "af854a3a-2127-422b-91ae-364da2661108",
"tags": [
"Exploit",
"Mailing List",
"Patch"
],
"url": "https://git.kernel.org/stable/c/ab9337c7cb6f875b6286440b1adfbeeef2b2b2bd"
}
],
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"vulnStatus": "Modified",
"weaknesses": [
{
"description": [
{
"lang": "en",
"value": "NVD-CWE-noinfo"
}
],
"source": "nvd@nist.gov",
"type": "Primary"
}
]
}
Loading…
Loading…
Sightings
| Author | Source | Type | Date |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.
Loading…
Loading…