smb: client: fix UAF and buffer leak in cifs_check_trans2() for malformed secondary T2
- 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.18.51, 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
Summary
In the Linux kernel, the following vulnerability has been resolved: smb: client: fix UAF and buffer leak in cifs_check_trans2() for malformed secondary T2 When a valid primary TRANSACT2 response has been received (mid->resp_buf set, mid->multiRsp true) and a subsequent secondary response causes cifs_check_trans2() to return false -- either because the SMB header is invalid (malformed != 0) or because check2ndT2() rejects the PDU -- handle_mid() overwrites mid->resp_buf with the new buffer (leaking the primary buffer) and, because mid->multiRsp is set, skips the server->smallbuf/bigbuf NULL-out. When the user thread frees mid->resp_buf, server->smallbuf or server->bigbuf is left dangling; the demux thread reuses it for the next packet, resulting in a use-after-free. Combine both early-exit conditions and, when mid->multiRsp is already set, abort the pending transaction inline: set multiEnd, call dequeue_mid() with malformed=true, and return true so handle_mid() exits without touching mid->resp_buf or the server buffer pointers.
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From 316cf94a910f6f93d43cc574359d163ccae098a3 · fixed in 9eed72e9534b10a6d9f8f5146feff3db53aebdba; From 316cf94a910f6f93d43cc574359d163ccae098a3 · fixed in 5e6533a683f6a851158d9f33fb4ea8f4f25d7f84; From 316cf94a910f6f93d43cc574359d163ccae098a3 · fixed in 730d0bb19507b9e19c2fe5343109ac618e2fbce5
- Linux Linux
3.6
- KernelLinux
From 3.6.0 · fixed in 6.18.51; From 6.19.0 · fixed in 7.2.4