smb: client: fix use-before-check of ReparseDataLength in reparse_buf_ptr()
- 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 6.6.160, 7.2.4
- 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
- Exploitation: none
- Automatable: yes
- Technical impact: partial
Summary
In the Linux kernel, the following vulnerability has been resolved: smb: client: fix use-before-check of ReparseDataLength in reparse_buf_ptr() reparse_buf_ptr() reads buf->ReparseDataLength before checking that count covers the full fixed header: buf = (struct reparse_data_buffer )((u8 )io + off); len = sizeof(buf); / 8 bytes */ rdlen = le16_to_cpu(buf->ReparseDataLength); /* offset 4, 2 bytes */ if (count < len || count < rdlen + len) /* check comes after */ struct reparse_data_buffer has ReparseDataLength at offset 4. If a server returns OutputCount < 6, the read at offset 4-5 reaches past the end of the received data. The off+count bounds against iov_len were already validated, but that does not protect against count being smaller than sizeof(*buf). Split the check: verify count >= sizeof(*buf) before reading ReparseDataLength, then verify count covers the data region.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: yes · Technical impact: partial
- Record last updated
Affected versions
- Linux Linux
From a158bb66b1373866d9fd5997565a58a573085539 · fixed in b70bc592afd19732e2e4563300ebe8f974280365; From 67ec9949b0dfe78c99e110dd975eb7dc5645630c · fixed in 711cf71300d7992f450600df8864917d3538679f; From 67ec9949b0dfe78c99e110dd975eb7dc5645630c · fixed in 05f78e6cf34ea3a285053bd5999e08e8ac298bd5; From 6.6.32 · fixed in 6.6.160
- Linux Linux
6.8
- KernelLinux
fixed in 6.6.160; From 6.7.0 · fixed in 7.2.4