usb: gadget: f_ncm: validate datagram bounds in ncm_unwrap_ntb()
- 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 4.10, 4.15, 4.20, 5.5, 5.9
- 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: usb: gadget: f_ncm: validate datagram bounds in ncm_unwrap_ntb() When unpacking host-supplied NTBs, ncm_unwrap_ntb() checks datagram length against frame_max but does not verify that the datagram fits within the declared block length. Additionally, when decoding multiple NTBs from a single socket buffer, subsequent block lengths are not checked against the actual remaining buffer data. With these checks missing, a malicious USB host can specify datagram offsets and lengths that point beyond the block, or supply secondary NTB headers declaring lengths larger than the buffer. skb_put_data() then copies adjacent kernel memory from skb_shared_info into the network skb. Fix this by verifying that sufficient buffer space remains for the NTB header before parsing, handling zero-length block declarations, ensuring that block lengths never exceed the remaining buffer space, and verifying that each datagram payload stays strictly within the block boundary.
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From 4.9.235 · fixed in 4.10; From 4.14.196 · fixed in 4.15; From 4.19.143 · fixed in 4.20; From 5.4.62 · fixed in 5.5; From 5.8.6 · fixed in 5.9; From 4.14.328 · fixed in 4.15; From 4.19.297 · fixed in 4.20; From 5.4.259 · fixed in 5.5
- Linux Linux
5.9
References 8
git.kernel.org
- stable/c/35d15bbaec0557330e774ec31412ef508de6e0e0
- stable/c/6b2be489eaa6293e60549005d91f15ceb150510f
- stable/c/f87ed889f0f7417b8938c98d8833f559b755373c
- stable/c/e07751d0527ccc2a1c32eb0b0b7da3b4b9b5381f
- stable/c/fff1059d139ef798bab917990524faaf25854ca8
- stable/c/40c706a0224bde194667e3378c689b542fec4b44
- stable/c/41fd5f2fb0027d3773ae949e3247c2e0a2a7fe5c
- stable/c/1febec7e47cdcd01f43fb0211094e3010474666e