Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSend SYN to TCP listener
-
DeliveryRace retransmitted SYN on second CPU
-
ExploitChild socket frees inet_opt without RCU grace
-
ExecutionConcurrent SYNACK reads freed ireq_opt
-
PersistUse-after-free in ip_options_build
-
ImpactKernel memory corruption or crash
Vulnerability Assessment
| Exploitation Conditions | Primary issue: a remote attacker targeting any listening TCP/IPv4 socket under the default SYN_RECV ehash path (present since commit 079096f103fa), but exploitation is LIMITED by a hard concurrency requirement - the attacker must win a race on a multi-CPU system between tcp_v4_send_synack()/inet_csk_route_req() reading ireq->ireq_opt under RCU and the child socket freeing inet_opt via a non-RCU kfree() in inet_sock_destruct(). A distinct variant requires the non-default request-socket migration feature, i.e. net.ipv4.tcp_migrate_req=1 or an attached BPF_SK_REUSEPORT_SELECT_OR_MIGRATE program, where inet_reqsk_clone() shares ireq_opt and tcp_v4_reqsk_destructor() frees it with a plain kfree(). IPv6 is NOT affected by the primary issue because tcp_v6_syn_recv_sock() duplicates the options (the IPv6 CALIPSO migration case is deferred to a separate patch). No authentication or user interaction is needed, but timing precision, SMP hardware, and (for the migration path) non-default configuration meaningfully constrain real-world exploitation. |
| Impact | Signals conflict and must be weighed carefully. The input CVSS is 9.8 with AV:N/AC:L/PR:N/UI:N, implying trivial remote unauthenticated compromise, but the description itself makes clear the bug is a concurrency race: it is only reached when 'another cpu can concurrently process a retransmitted SYN for the same request socket' while a child socket is being created or freed. That contradicts AC:L - a reliable trigger requires winning a tight timing window on an SMP system, so real-world exploitability is considerably lower than 9.8 suggests (I assess AC:H). Corroborating this, EPSS is only 0.17% (5th percentile), there is no CISA KEV listing (not actively exploited), and no public exploit identified at time of analysis - the references are kernel.org fix commits and a VulDB advisory, not working exploit code. The one signal pushing urgency up is the vuln.today 'act_now' Decision label and the fact that this is a use-after-free in the Linux kernel's core TCP/IPv4 path, which is network-reachable on any listening socket. Net assessment: this is a legitimately serious kernel memory-safety bug that should be patched promptly per the act_now label, but it is a race-dependent UAF with very low observed exploitation probability, not a turnkey remote-code-execution emergency; the 9.8/AC:L rating overstates practical ease of exploitation. |
| Exploit ScenarioDerived | A remote attacker sends a SYN to a listening TCP service and then races a retransmitted SYN so that one CPU builds/sends a SYNACK (reading ireq->ireq_opt under RCU) while another CPU creates or frees the child socket, whose inet_opt is freed with a plain kfree() lacking an RCU grace period. Winning this window produces a use-after-free in ip_options_build(), which can crash the kernel or corrupt memory. No public exploit code is identified; successful exploitation requires an SMP host and precise timing. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 24, 2026
A use-after-free in the Linux kernel's IPv4 TCP request-socket handling lets a remote, unauthenticated attacker potentially free inet_opt while it is still being read during SYNACK construction, producing memory corruption in ip_options_build(). Every IPv4 TCP listener using the default SYN_RECV ehash path is in scope, but exploitation is constrained: it requires winning a race between the RSOURCE read of ireq->ireq_opt under rcu_read_lock() and the child socket's plain kfree() in inet_sock_destruct() on a multi-CPU system, and the second variant additionally requires the non-default net.ipv4.tcp_migrate_req=1 setting or an attached BPF_SK_REUSEPORT_SELECT_OR_MIGRATE program. No public exploit code has been identified at time of analysis; EPSS is low at 0.17% (5th percentile), yet the vuln.today decision label is act_now and the assessed vector (AC:H rather than the published AC:L) puts this at high impact if the race is won.
RemediationAI
Apply the vendor patch: upgrade to Linux 6.12.113, 6.18.56, 7.2.10, or 7.3-rc7, or take the listed stable commits (11a03ce3c4a62d84c10ccdfe47f8075006498568, a47406c769f72c070386985488f1c4d057df86b2, 26d4c36d318cffbbd160884a0e4cec0da4da4936, e3f33b0a1d89d738e2b913dab519226eaf76e15b), which convert the frees in inet_sock_destruct() and tcp_v4_reqsk_destructor() to kfree_rcu() so option memory survives the RCU read-side critical sections. Where immediate kernel upgrades are not possible, the migration variant can be closed by disabling request-socket migration (net.ipv4.tcp_migrate_req=0) and detaching BPF_SK_REUSEPORT_SELECT_OR_MIGRATE reuseport programs, at the cost of losing cross-CPU SYN migration and its accept-queue balancing benefit; the primary ehash-path race has no equivalent switch, so patching is the only complete fix. After the patch, IPv6 CALIPSO migration handling for ipv6_opt remains outstanding pending the separate upstream change. Track advisory status via the kernel stable commits above, https://vuldb.com/vuln/420618, and https://nvd.nist.gov/vuln/detail/CVE-2026-98432.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is an ownership-transfer/lifetime defect in the Linux networking stack's request-socket option handling. tcp_v4_syn_recv_sock() hands ireq->ireq_opt to the child socket as newinet->inet_opt without making a copy, while readers on other CPUs - tcp_v4_send_synack() and inet_csk_route_req() - access ireq->ireq_opt under only rcu_read_lock(), and ip_build_and_send_pkt()/ip_options_build() dereference opt->optlen multiple times, so an object freed underneath them yields a use-after-free. The exposure was introduced by commit 079096f103fa ("tcp/dccp: install syn_recv requests into ehash table"), which removed listener-lock protection so request sockets can be processed concurrently; TCP child sockets lack SOCK_RCU_FREE and inet_sock_destruct() released inet_opt with a bare kfree() rather than kfree_rcu(). A second, configuration-gated variant: with request-socket migration active (net.ipv4.tcp_migrate_req=1 or a BPF_SK_REUSEPORT_SELECT_OR_MIGRATE program), reqsk_timer_handler() clones the request socket via inet_reqsk_clone(), so original and clone share ireq_opt, reqsk_migrate_reset() clears the pointer in the old socket, and tcp_v4_reqsk_destructor() frees the shared options with a plain kfree() while another CPU still holds a reference. IPv6 escapes the primary flaw because tcp_v6_syn_recv_sock() duplicates the options; the analogous ipv6_opt/CALIPSO migration case is deferred to a separate patch. Other writers replacing inet_opt (do_ip_setsockopt(), cipso_v4_sock_setattr()) already used kfree_rcu(), and the fix extends that pattern to the two destructors. The trigger is a concurrency race, not a straightforward protocol-level flaw, and the CWE is not assigned in the source data.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Remote and unauthenticated (AV:N/PR:N/UI:N), but the described cross-CPU race on a shared ireq_opt makes the trigger a tight timing window, so AC:H; a kernel UAF can corrupt memory, so C/I/A:H.
Primary rating from Vendor (Linux).
CVSS VectorVendor: Linux
Lifecycle Timeline
4DescriptionCVE.org
In the Linux kernel, the following vulnerability has been resolved:
ipv4: free inet_opt and ireq_opt after an RCU grace period
tcp_v4_syn_recv_sock() transfers ownership of ireq->ireq_opt to the child socket (newinet->inet_opt) without copying it.
Another cpu can concurrently process a retransmitted SYN for the same request socket, and send a SYNACK from tcp_check_req(). tcp_v4_send_synack() and inet_csk_route_req() read ireq->ireq_opt under rcu_read_lock() only, and ip_build_and_send_pkt() and ip_options_build() then read opt->optlen twice.
Note that the SYNACK timer itself is not an issue: it holds a reference on its request socket, and inet_csk_reqsk_queue_drop() calls timer_delete_sync() before the child can be freed.
Since commit 079096f103fa ("tcp/dccp: install syn_recv requests into ehash table"), request sockets are processed without holding the listener lock, so nothing prevents the child socket from being freed while the SYNACK is still being built. TCP child sockets do not have SOCK_RCU_FREE, and inet_sock_destruct() frees inet_opt with a plain kfree(), leading to a use-after-free in ip_options_build().
A similar issue exists with request socket migration (net.ipv4.tcp_migrate_req=1, or a BPF_SK_REUSEPORT_SELECT_OR_MIGRATE program). reqsk_timer_handler() clones the request socket with inet_reqsk_clone(), so that the old request socket and its clone share the same ireq_opt, then reqsk_migrate_reset() clears the pointer in the old one. Another cpu holding a reference on the old request socket can still be using these options (sending a SYNACK, or creating a child in tcp_v4_syn_recv_sock()) when the clone is freed, and tcp_v4_reqsk_destructor() also uses a plain kfree().
Readers already use RCU, and other paths replacing inet_opt (do_ip_setsockopt(), cipso_v4_sock_setattr()...) already use kfree_rcu(). Use kfree_rcu() in inet_sock_destruct() and tcp_v4_reqsk_destructor() as well.
IPv6 is not affected by the first issue, because tcp_v6_syn_recv_sock() duplicates the options. tcp_v6_reqsk_destructor() has the same migration issue with ipv6_opt, which is only set by CALIPSO. This will be addressed in a separate patch.
Executive ViewAI
CVE-2026-98432 is a critical Linux kernel vulnerability (CVSS 9.8) in IPv4 TCP request-socket handling that, if exploited, could allow an unauthenticated remote attacker to corrupt memory on systems with multiple CPUs, potentially leading to remote code execution or denial of service. While no public exploit code has been identified at time of analysis, the severity and potential for high impact-especially given the assessed attack complexity-warrant immediate attention from security leadership. Organizations relying on Linux for critical network services could face significant operational disruption and data integrity risks if this vulnerability is left unaddressed.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
EUVD-2026-102025
GHSA-qp6h-4hvh-qqqc
NVD
CVE.org
EPSS
VulDB
Exploit-DB