nfc: nci: add data_len bound checks to activation parameter extractors
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 5.10.269, 5.15.220, 6.1.187, 6.6.156, 6.12.108, and 3 more
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
In the Linux kernel, the following vulnerability has been resolved: nfc: nci: add data_len bound checks to activation parameter extractors nci_extract_activation_params_iso_dep() and nci_extract_activation_params_nfc_dep() read an inner length byte from the NCI RF_INTF_ACTIVATED_NTF payload and use it to memcpy() into fixed kernel buffers, but neither function receives the caller-validated activation_params_len. A crafted NCI notification with activation_params_len=1 and an inner length byte of up to 20 (NFC-A) or 50 (NFC-B) causes memcpy() to read that many bytes past the one valid byte in the activation params region -- a slab out-of-bounds read of kernel memory adjacent to the NCI skb. The sibling nci_extract_rf_params_*() family was given equivalent protection by commit 571dcbeb8e63 ("net: nfc: nci: Fix parameter validation for packet data"), but the two activation parameter extractors were not updated at that time. Add a data_len parameter to both functions, guard against an empty region before consuming the inner length byte, decrement the remaining count after consuming it, and clamp the copy length to what is actually available. Update both call sites to pass ntf.activation_params_len, which is already validated against the skb at ntf.c:801.
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From e8c0dacd9836dc2dcb28d236c9cc3cfaa9965a20 · fixed in 1168484fe2b3828bf24a46f3c42a8719fade679b; From e8c0dacd9836dc2dcb28d236c9cc3cfaa9965a20 · fixed in be311c0cfeadfbe815ea22d2914a98d06e3fab0e; From e8c0dacd9836dc2dcb28d236c9cc3cfaa9965a20 · fixed in 04e51353cb9fa321caaeeed8331d4cd041fbaca7; From e8c0dacd9836dc2dcb28d236c9cc3cfaa9965a20 · fixed in e25b44bd8b8cc666b49a3fe0ef547e64d5b1e300; From e8c0dacd9836dc2dcb28d236c9cc3cfaa9965a20 · fixed in 9b01f5af0dc59263b59391b148bc78d83c0354a9; From e8c0dacd9836dc2dcb28d236c9cc3cfaa9965a20 · fixed in 9620a91f8d643b680f417a435db399a04d1e06d8; From e8c0dacd9836dc2dcb28d236c9cc3cfaa9965a20 · fixed in cf9d44be50b9074a5abdc301b4a3ba3e283591df; From e8c0dacd9836dc2dcb28d236c9cc3cfaa9965a20 · fixed in f5c534b53f8c424a8e7633c9b585475c4bf4ee18; From e8c0dacd9836dc2dcb28d236c9cc3cfaa9965a20 · fixed in 0428fa2c22e2ba0cff766d3b80d461e149102045
- Linux Linux
3.3
- KernelLinux
From 3.3.0 · fixed in 5.10.269; From 5.11.0 · fixed in 5.15.220; From 5.16.0 · fixed in 6.1.187; From 6.2.0 · fixed in 6.6.156; From 6.7.0 · fixed in 6.12.108; From 6.13.0 · fixed in 6.18.47; From 6.19.0 · fixed in 7.1.11; From 7.2.0 · fixed in 7.2.1
References 9
git.kernel.org
- stable/c/1168484fe2b3828bf24a46f3c42a8719fade679b
- stable/c/be311c0cfeadfbe815ea22d2914a98d06e3fab0e
- stable/c/04e51353cb9fa321caaeeed8331d4cd041fbaca7
- stable/c/e25b44bd8b8cc666b49a3fe0ef547e64d5b1e300
- stable/c/9b01f5af0dc59263b59391b148bc78d83c0354a9
- stable/c/9620a91f8d643b680f417a435db399a04d1e06d8
- stable/c/cf9d44be50b9074a5abdc301b4a3ba3e283591df
- stable/c/f5c534b53f8c424a8e7633c9b585475c4bf4ee18
- stable/c/0428fa2c22e2ba0cff766d3b80d461e149102045