{"api_version":"1","generated_at":"2026-11-14T05:03:22+00:00","cve":"CVE-2026-99122","urls":{"html":"https://cve.report/CVE-2026-99122","api":"https://cve.report/api/cve/CVE-2026-99122.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-99122","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-99122"},"summary":{"title":"vsock/vmci: validate packet source for connected sockets","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nvsock/vmci: validate packet source for connected sockets\n\nvmci_transport_recv_stream_cb() looks up sockets first by the full source\nand destination tuple, then by destination only in the bound table. The\nfallback can select a non-listening socket without checking whether the\npacket came from its stored peer.\n\nThis was reproduced with two VMCI contexts. A RST from the context not\nstored in a TCP_SYN_SENT socket reset that socket after it was selected by\nthe destination-only lookup.\n\nVMCI can process notification packets in bottom-half context when the\nsocket is not owned by user context, or defer packets to a workqueue. Use\nvsock_check_source() after taking the socket lock in the bottom-half path,\nand recheck after lock_sock() in the workqueue path. Listening sockets\ncontinue to accept packets from any source.\n\nReply with a RST addressed from the received packet before dropping a\nsource that fails validation. This preserves the existing reset behavior\nfor bound non-listening and concurrently closed sockets without directing\nthe reset to a connected socket's stored peer.","state":"PUBLISHED","assigner":"Linux","published_at":"2026-10-28 11:17:31","updated_at":"2026-11-10 19:22:30"},"problem_types":[],"metrics":[{"version":"3.1","source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","type":"Secondary","score":"7.3","severity":"HIGH","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:H","data":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:H","baseScore":7.3,"baseSeverity":"HIGH","attackVector":"LOCAL","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"CHANGED","confidentialityImpact":"LOW","integrityImpact":"NONE","availabilityImpact":"HIGH"}},{"version":"3.1","source":"CNA","type":"DECLARED","score":"7.3","severity":"HIGH","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:H","data":{"baseScore":7.3,"baseSeverity":"HIGH","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:H","version":"3.1"}}],"references":[{"url":"https://git.kernel.org/stable/c/90c423b62ec9be08177f74b07a47937ca8d2035b","name":"https://git.kernel.org/stable/c/90c423b62ec9be08177f74b07a47937ca8d2035b","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/cdd1f99eaa4d4db82d506eb50e724460671c7cac","name":"https://git.kernel.org/stable/c/cdd1f99eaa4d4db82d506eb50e724460671c7cac","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/c027f8b429dbb2157fc1b503df196e272d947c89","name":"https://git.kernel.org/stable/c/c027f8b429dbb2157fc1b503df196e272d947c89","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/ad9a7da3fa39c2d616ec0dd3cf6e30531d032fe7","name":"https://git.kernel.org/stable/c/ad9a7da3fa39c2d616ec0dd3cf6e30531d032fe7","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-99122","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-99122","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected d021c344051af91f42c5ba9fdedc176740cbd238 cdd1f99eaa4d4db82d506eb50e724460671c7cac git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected d021c344051af91f42c5ba9fdedc176740cbd238 c027f8b429dbb2157fc1b503df196e272d947c89 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected d021c344051af91f42c5ba9fdedc176740cbd238 90c423b62ec9be08177f74b07a47937ca8d2035b git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected d021c344051af91f42c5ba9fdedc176740cbd238 ad9a7da3fa39c2d616ec0dd3cf6e30531d032fe7 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 3.9","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 3.9 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.12.117 6.12.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.18.59 6.18.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.2.13 7.2.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.3 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":{"cve_year":"2026","cve_id":"99122","cve":"CVE-2026-99122","epss":"0.001200000","percentile":"0.018490000","score_date":"2026-11-10","updated_at":"2026-11-11 00:08:19"},"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"defaultStatus":"unaffected","product":"Linux","programFiles":["net/vmw_vsock/vmci_transport.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"lessThan":"cdd1f99eaa4d4db82d506eb50e724460671c7cac","status":"affected","version":"d021c344051af91f42c5ba9fdedc176740cbd238","versionType":"git"},{"lessThan":"c027f8b429dbb2157fc1b503df196e272d947c89","status":"affected","version":"d021c344051af91f42c5ba9fdedc176740cbd238","versionType":"git"},{"lessThan":"90c423b62ec9be08177f74b07a47937ca8d2035b","status":"affected","version":"d021c344051af91f42c5ba9fdedc176740cbd238","versionType":"git"},{"lessThan":"ad9a7da3fa39c2d616ec0dd3cf6e30531d032fe7","status":"affected","version":"d021c344051af91f42c5ba9fdedc176740cbd238","versionType":"git"}]},{"defaultStatus":"affected","product":"Linux","programFiles":["net/vmw_vsock/vmci_transport.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"status":"affected","version":"3.9"},{"lessThan":"3.9","status":"unaffected","version":"0","versionType":"semver"},{"lessThanOrEqual":"6.12.*","status":"unaffected","version":"6.12.117","versionType":"semver"},{"lessThanOrEqual":"6.18.*","status":"unaffected","version":"6.18.59","versionType":"semver"},{"lessThanOrEqual":"7.2.*","status":"unaffected","version":"7.2.13","versionType":"semver"},{"lessThanOrEqual":"*","status":"unaffected","version":"7.3","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.12.117","versionStartIncluding":"3.9","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.18.59","versionStartIncluding":"3.9","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.2.13","versionStartIncluding":"3.9","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.3","versionStartIncluding":"3.9","vulnerable":true}],"negate":false,"operator":"OR"}]}],"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nvsock/vmci: validate packet source for connected sockets\n\nvmci_transport_recv_stream_cb() looks up sockets first by the full source\nand destination tuple, then by destination only in the bound table. The\nfallback can select a non-listening socket without checking whether the\npacket came from its stored peer.\n\nThis was reproduced with two VMCI contexts. A RST from the context not\nstored in a TCP_SYN_SENT socket reset that socket after it was selected by\nthe destination-only lookup.\n\nVMCI can process notification packets in bottom-half context when the\nsocket is not owned by user context, or defer packets to a workqueue. Use\nvsock_check_source() after taking the socket lock in the bottom-half path,\nand recheck after lock_sock() in the workqueue path. Listening sockets\ncontinue to accept packets from any source.\n\nReply with a RST addressed from the received packet before dropping a\nsource that fails validation. This preserves the existing reset behavior\nfor bound non-listening and concurrently closed sockets without directing\nthe reset to a connected socket's stored peer."}],"metrics":[{"cvssV3_1":{"baseScore":7.3,"baseSeverity":"HIGH","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:H","version":"3.1"},"scenarios":[{"lang":"en","value":"AV:L - A local VMCI endpoint supplies the forged control datagram through IOCTL_VMCI_DATAGRAM_SEND, reaching vmci_datagram_dispatch() and the patched vmci_transport_recv_stream_cb(); vsock is therefore Local rather than a routable network vector.\nAC:L - vsock_diag_dump() exposes socket CIDs, ports, and state without an authorization check, after which a chosen RST deterministically misses vsock_find_connected_socket() and reaches the victim through vsock_find_bound_socket(); no race or uncontrolled condition is required.\nPR:L - vmci_host_open(), IOCTL_VMCI_INIT_CONTEXT, and IOCTL_VMCI_DATAGRAM_SEND contain no capability check, allowing a low-privilege VMX/local process with ordinary VMCI-device access to create an unrestricted context and submit the packet.\nUI:N - After the victim process has an ordinary bound connecting or established socket, the attacker's datagram alone drives vmci_transport_recv_pkt_work() and the reset handler; no victim user action is required.\nS:C - A packet owned by an attacker-controlled guest/VMX VMCI context is applied to a host-context socket by vmci_transport_recv_connecting_client() or vmci_transport_recv_connected(), crossing the VMCI virtualization or VMM-sandbox boundary.\nC:L - On an established socket, a forged WAITING_READ reaches vmci_transport_handle_waiting_read(), which conditionally returns WROTE to the foreign source based on vmci_qpair_produce_buf_ready(); this exposes limited queue-occupancy and traffic-state information, not payload bytes.\nI:N - The demonstrated RST and forged notification paths do not write application payloads, alter the intended VMCI queue pair, or corrupt memory; their changes to sk_state, peer_shutdown, and notification flags implement connection disruption rather than data modification.\nA:H - vmci_transport_recv_connecting_client() sets TCP_CLOSE and ECONNRESET, while vmci_transport_recv_connected() sets SOCK_DONE, SHUTDOWN_MASK, and TCP_CLOSING. Because tuples can be re-enumerated and RST injection repeated, the attacker can continuously terminate targeted VMCI client connections and fully deny their service."}]}],"providerMetadata":{"dateUpdated":"2026-11-10T18:15:25.472Z","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux"},"references":[{"url":"https://git.kernel.org/stable/c/cdd1f99eaa4d4db82d506eb50e724460671c7cac"},{"url":"https://git.kernel.org/stable/c/c027f8b429dbb2157fc1b503df196e272d947c89"},{"url":"https://git.kernel.org/stable/c/90c423b62ec9be08177f74b07a47937ca8d2035b"},{"url":"https://git.kernel.org/stable/c/ad9a7da3fa39c2d616ec0dd3cf6e30531d032fe7"}],"title":"vsock/vmci: validate packet source for connected sockets","x_generator":{"engine":"bippy-1.2.0"}}},"cveMetadata":{"assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","assignerShortName":"Linux","cveId":"CVE-2026-99122","datePublished":"2026-10-28T10:34:37.859Z","dateReserved":"2026-09-25T10:25:14.393Z","dateUpdated":"2026-11-10T18:15:25.472Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-10-28 11:17:31","lastModifiedDate":"2026-11-10 19:22:30","problem_types":[],"metrics":{"cvssMetricV31":[{"source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","type":"Secondary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:H","baseScore":7.3,"baseSeverity":"HIGH","attackVector":"LOCAL","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"CHANGED","confidentialityImpact":"LOW","integrityImpact":"NONE","availabilityImpact":"HIGH"},"exploitabilityScore":2,"impactScore":4.7}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"99122","Ordinal":"1","Title":"vsock/vmci: validate packet source for connected sockets","CVE":"CVE-2026-99122","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"99122","Ordinal":"1","NoteData":"In the Linux kernel, the following vulnerability has been resolved:\n\nvsock/vmci: validate packet source for connected sockets\n\nvmci_transport_recv_stream_cb() looks up sockets first by the full source\nand destination tuple, then by destination only in the bound table. The\nfallback can select a non-listening socket without checking whether the\npacket came from its stored peer.\n\nThis was reproduced with two VMCI contexts. A RST from the context not\nstored in a TCP_SYN_SENT socket reset that socket after it was selected by\nthe destination-only lookup.\n\nVMCI can process notification packets in bottom-half context when the\nsocket is not owned by user context, or defer packets to a workqueue. Use\nvsock_check_source() after taking the socket lock in the bottom-half path,\nand recheck after lock_sock() in the workqueue path. Listening sockets\ncontinue to accept packets from any source.\n\nReply with a RST addressed from the received packet before dropping a\nsource that fails validation. This preserves the existing reset behavior\nfor bound non-listening and concurrently closed sockets without directing\nthe reset to a connected socket's stored peer.","Type":"Description","Title":"vsock/vmci: validate packet source for connected sockets"}]}}}