{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-99123","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2026-09-25T10:25:14.393Z","datePublished":"2026-10-28T10:34:38.600Z","dateUpdated":"2026-10-31T12:43:28.598Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-10-31T12:43:28.598Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nvsock/virtio: validate packet source for connected sockets\n\nvirtio_transport_recv_pkt() looks up sockets first by the full source and\ndestination tuple, then by destination only in the bound table. The\nfallback is needed for listening and connecting sockets, but sockets remain\nin the bound table after connect(), so it can also return a non-listening\nsocket.\n\nThe fallback does not validate the source address. In TCP_SYN_SENT, a\nRESPONSE from an unrelated source can transition the victim socket to\nTCP_ESTABLISHED while its stored remote address remains unchanged.\nSubsequent RW packets from that source are delivered through the same\ndestination-only fallback.\n\nThis was reproduced with capability-empty processes under different UIDs.\nThe attacker discovered the target tuple through unprivileged AF_VSOCK\nsock_diag and caused the victim socket to read 16 attacker-chosen bytes;\nthe intended peer-side socket read 0 of those 16 bytes.\n\nAdd vsock_check_source() to validate the transport, source port and source\nCID against the peer stored in a non-listening socket. The local transport\nis the CID exception because its packets are generated internally with\nVMADDR_CID_LOCAL as their source, including connections using CID aliases.\n\nUse the helper after lock_sock() in the virtio receive path."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H","baseScore":7.1,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The demonstrated attacker is a local capability-empty AF_VSOCK process: SOCK_DIAG_BY_FAMILY reveals the tuple, and its loopback skb reaches the patched virtio_transport_recv_pkt() through vsock_loopback_work(). No routable network protocol carries the trigger.\nAC:L - virtio_transport_recv_pkt() deterministically falls from vsock_find_connected_socket_net() to destination-only vsock_find_bound_socket_net(); RESPONSE establishes a SYN_SENT socket and later RW packets are queued. No race or memory-layout condition is needed, and established sockets are directly vulnerable.\nPR:L - vsock_create() and the SOCK_DIAG_BY_FAMILY dump impose no capability check, while vsock_auto_bind() selects a non-reserved port without CAP_NET_BIND_SERVICE. The commit reproduced exploitation between capability-empty processes under different UIDs.\nUI:N - After the target process has a connecting or connected vsock, the attacker independently enumerates its tuple and injects RESPONSE and RW packets. No victim user must approve, open, or mount attacker-supplied content.\nS:U - The flaw changes another socket's state and receive queue within the same host kernel authority; crossing a UID boundary is ordinary same-kernel access-control impact. The demonstrated path does not escape a VM or bypass an IOMMU or sandbox boundary.\nC:N - The accepted RESPONSE does not change vsk->remote_addr, and virtio_transport_send_pkt_info() continues directing victim transmissions to the stored intended peer. The unrelated source receives no victim data, and no kernel-memory read exists.\nI:H - virtio_transport_recv_connected() passes unrelated RW packets to virtio_transport_recv_enqueue(), and recvmsg later copies their attacker-chosen payload into the victim process. This permits arbitrary injection into the victim's inbound stream, as demonstrated by the 16 chosen bytes.\nA:H - The same fallback lets an unrelated VIRTIO_VSOCK_OP_RST reach virtio_transport_recv_connected(), which calls virtio_transport_do_close(); SHUTDOWN can likewise remove the socket. Unprivileged tuple enumeration lets the attacker repeat this against new connections and deny the vsock service."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["include/net/af_vsock.h","net/vmw_vsock/af_vsock.c","net/vmw_vsock/virtio_transport_common.c"],"versions":[{"version":"06a8fc78367d070720af960dcecec917d3ae5f3b","lessThan":"bda841af86cdfe7fcf4a2f4db22e27f1b852b1ff","status":"affected","versionType":"git"},{"version":"06a8fc78367d070720af960dcecec917d3ae5f3b","lessThan":"c0a3a786a5e8b5007d6a3c34721ab052399ab2ad","status":"affected","versionType":"git"},{"version":"06a8fc78367d070720af960dcecec917d3ae5f3b","lessThan":"f77fb90edca5385d0eecbfd6d2c8ef60afff24a9","status":"affected","versionType":"git"},{"version":"06a8fc78367d070720af960dcecec917d3ae5f3b","lessThan":"ec231dd3b14e541ba1c4f842a7d152fb61037333","status":"affected","versionType":"git"},{"version":"06a8fc78367d070720af960dcecec917d3ae5f3b","lessThan":"6cd829de69efd9ed3a53aa2421004a0396eb2bd7","status":"affected","versionType":"git"},{"version":"06a8fc78367d070720af960dcecec917d3ae5f3b","lessThan":"e9bf92de436ba55f33eaa55d7008e68551123cfd","status":"affected","versionType":"git"},{"version":"06a8fc78367d070720af960dcecec917d3ae5f3b","lessThan":"dee44f41f206becb41c492899c1996cfd7f82a1b","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["include/net/af_vsock.h","net/vmw_vsock/af_vsock.c","net/vmw_vsock/virtio_transport_common.c"],"versions":[{"version":"4.8","status":"affected"},{"version":"0","lessThan":"4.8","status":"unaffected","versionType":"semver"},{"version":"5.15.224","lessThanOrEqual":"5.15.*","status":"unaffected","versionType":"semver"},{"version":"6.1.191","lessThanOrEqual":"6.1.*","status":"unaffected","versionType":"semver"},{"version":"6.6.161","lessThanOrEqual":"6.6.*","status":"unaffected","versionType":"semver"},{"version":"6.12.115","lessThanOrEqual":"6.12.*","status":"unaffected","versionType":"semver"},{"version":"6.18.59","lessThanOrEqual":"6.18.*","status":"unaffected","versionType":"semver"},{"version":"7.2.13","lessThanOrEqual":"7.2.*","status":"unaffected","versionType":"semver"},{"version":"7.3","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"5.15.224"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"6.1.191"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"6.6.161"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"6.12.115"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"6.18.59"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"7.2.13"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"7.3"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/bda841af86cdfe7fcf4a2f4db22e27f1b852b1ff"},{"url":"https://git.kernel.org/stable/c/c0a3a786a5e8b5007d6a3c34721ab052399ab2ad"},{"url":"https://git.kernel.org/stable/c/f77fb90edca5385d0eecbfd6d2c8ef60afff24a9"},{"url":"https://git.kernel.org/stable/c/ec231dd3b14e541ba1c4f842a7d152fb61037333"},{"url":"https://git.kernel.org/stable/c/6cd829de69efd9ed3a53aa2421004a0396eb2bd7"},{"url":"https://git.kernel.org/stable/c/e9bf92de436ba55f33eaa55d7008e68551123cfd"},{"url":"https://git.kernel.org/stable/c/dee44f41f206becb41c492899c1996cfd7f82a1b"}],"title":"vsock/virtio: validate packet source for connected sockets","x_generator":{"engine":"bippy-1.2.0"}}}}