wifi: mwifiex: bound the pairwise-cipher OUI walk to the IE length
- 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.271, 5.15.222, 6.1.189, 6.6.158, 6.12.112, and 2 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: wifi: mwifiex: bound the pairwise-cipher OUI walk to the IE length mwifiex_search_oui_in_ie() reads a pairwise-cipher (PTK) count from a beacon/probe-response RSN or WPA information element and then walks that many 4-byte OUIs, comparing each with memcmp(). The count comes straight from the (attacker-supplied) IE and is never checked against the element's own length, and the callers admit the element on element_id alone (has_ieee_hdr() / has_vendor_hdr(), no length check). A crafted RSN/WPA IE with a large pairwise count therefore makes the walk read up to 255 * 4 bytes past the element -- an out-of-bounds read of the kmemdup()'d beacon buffer, reachable from any AP whose beacon/probe response is processed during scan-result parsing. Pass the number of IE bytes available at the OUI list and bound the walk to the element. Keep the length signed and reject a negative value before any unsigned arithmetic, so a small or zero IE length cannot underflow to a large size_t and defeat the bound. Found by 0sec automated security-research tooling (https://0sec.ai).
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From 5e6e3a92b9a4c9416b17f468fa5c7fa2233b8b4e · fixed in 77e642af7f2f6029e12a35c847c56cbd0466e799; From 5e6e3a92b9a4c9416b17f468fa5c7fa2233b8b4e · fixed in 982b8fcdbb28f63bbbf02f0822c0bbda12ec27ed; From 5e6e3a92b9a4c9416b17f468fa5c7fa2233b8b4e · fixed in 58767b41f87244eebaa5a475b9d276c83b89b933; From 5e6e3a92b9a4c9416b17f468fa5c7fa2233b8b4e · fixed in 2402c9e2644b7e10c7aaaf87bf12743d7e363559; From 5e6e3a92b9a4c9416b17f468fa5c7fa2233b8b4e · fixed in 54a9cc5bd70b0d77a5069d4c46998c679a10c857; From 5e6e3a92b9a4c9416b17f468fa5c7fa2233b8b4e · fixed in 8bbef2b1ebfbadc0b9c37bbbf9c9e26fe2e41960; From 5e6e3a92b9a4c9416b17f468fa5c7fa2233b8b4e · fixed in 46cda9d42f0d6ec3057d878ddb1f38c0ab9f51df; From 5e6e3a92b9a4c9416b17f468fa5c7fa2233b8b4e · fixed in e667aee1c192d67d27c803007bfa9c6e0873e959
- Linux Linux
3.0
- KernelLinux
From 3.0.0 · fixed in 5.10.271; From 5.11.0 · fixed in 5.15.222; From 5.16.0 · fixed in 6.1.189; From 6.2.0 · fixed in 6.6.158; From 6.7.0 · fixed in 6.12.112; From 6.13.0 · fixed in 6.18.54; From 6.19.0 · fixed in 7.2.8
References 8
git.kernel.org
- stable/c/77e642af7f2f6029e12a35c847c56cbd0466e799
- stable/c/982b8fcdbb28f63bbbf02f0822c0bbda12ec27ed
- stable/c/58767b41f87244eebaa5a475b9d276c83b89b933
- stable/c/2402c9e2644b7e10c7aaaf87bf12743d7e363559
- stable/c/54a9cc5bd70b0d77a5069d4c46998c679a10c857
- stable/c/8bbef2b1ebfbadc0b9c37bbbf9c9e26fe2e41960
- stable/c/46cda9d42f0d6ec3057d878ddb1f38c0ab9f51df
- stable/c/e667aee1c192d67d27c803007bfa9c6e0873e959