Linux: vsock/vmci: validate packet source for connected sockets
What fixes it
- 90c423b62ec9be08177f74b07a47937ca8d2035bLinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
vsock/vmci: validate packet source for connected sockets
vmci_transport_recv_stream_cb() looks up sockets first by the full source and destination tuple, then by destination only in the bound table. The fallback can select a non-listening socket without checking whether the packet came from its stored peer.
This was reproduced with two VMCI contexts. A RST from the context not stored in a TCP_SYN_SENT socket reset that socket after it was selected by the destination-only lookup.
VMCI can process notification packets in bottom-half context when the socket is not owned by user context, or defer packets to a workqueue. Use vsock_check_source() after taking the socket lock in the bottom-half path, and recheck after lock_sock() in the workqueue path. Listening sockets continue to accept packets from any source.
Reply with a RST addressed from the received packet before dropping a source that fails validation. This preserves the existing reset behavior for bound non-listening and concurrently closed sockets without directing the reset to a connected socket's stored peer.
Text from CVE List
Affected versions 8
- Linuxaffected: d021c344051af91f42c5ba9fdedc176740cbd238 before c027f8b429dbb2157fc1b503df196e272d947c89CVE List
- Linuxaffected: d021c344051af91f42c5ba9fdedc176740cbd238 before 90c423b62ec9be08177f74b07a47937ca8d2035bCVE List
- Linuxaffected: d021c344051af91f42c5ba9fdedc176740cbd238 before ad9a7da3fa39c2d616ec0dd3cf6e30531d032fe7CVE List
- Linuxaffected: 3.9CVE List
- Linuxunaffected: all versions before 3.9CVE List
- Linuxunaffected: 6.18.59 through 6.18.*CVE List
- Linuxunaffected: 7.2.13 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List