{"dataType":"CVE_RECORD","cveMetadata":{"cveId":"CVE-2024-35884","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2024-05-17T13:50:33.112Z","datePublished":"2024-05-19T08:34:40.948Z","dateUpdated":"2026-08-05T11:30:40.216Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-05T11:30:40.216Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nudp: do not accept non-tunnel GSO skbs landing in a tunnel\n\nWhen rx-udp-gro-forwarding is enabled UDP packets might be GROed when\nbeing forwarded. If such packets might land in a tunnel this can cause\nvarious issues and udp_gro_receive makes sure this isn't the case by\nlooking for a matching socket. This is performed in\nudp4/6_gro_lookup_skb but only in the current netns. This is an issue\nwith tunneled packets when the endpoint is in another netns. In such\ncases the packets will be GROed at the UDP level, which leads to various\nissues later on. The same thing can happen with rx-gro-list.\n\nWe saw this with geneve packets being GROed at the UDP level. In such\ncase gso_size is set; later the packet goes through the geneve rx path,\nthe geneve header is pulled, the offset are adjusted and frag_list skbs\nare not adjusted with regard to geneve. When those skbs hit\nskb_fragment, it will misbehave. Different outcomes are possible\ndepending on what the GROed skbs look like; from corrupted packets to\nkernel crashes.\n\nOne example is a BUG_ON[1] triggered in skb_segment while processing the\nfrag_list. Because gso_size is wrong (geneve header was pulled)\nskb_segment thinks there is \"geneve header size\" of data in frag_list,\nalthough it's in fact the next packet. The BUG_ON itself has nothing to\ndo with the issue. This is only one of the potential issues.\n\nLooking up for a matching socket in udp_gro_receive is fragile: the\nlookup could be extended to all netns (not speaking about performances)\nbut nothing prevents those packets from being modified in between and we\ncould still not find a matching socket. It's OK to keep the current\nlogic there as it should cover most cases but we also need to make sure\nwe handle tunnel packets being GROed too early.\n\nThis is done by extending the checks in udp_unexpected_gso: GSO packets\nlacking the SKB_GSO_UDP_TUNNEL/_CSUM bits and landing in a tunnel must\nbe segmented.\n\n[1] kernel BUG at net/core/skbuff.c:4408!\n    RIP: 0010:skb_segment+0xd2a/0xf70\n    __udp_gso_segment+0xaa/0x560"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","baseScore":9.8,"baseSeverity":"CRITICAL"},"scenarios":[{"lang":"en","value":"AV:N - The bug is triggered entirely by UDP datagrams received from the network on the GRO/forwarding path (`udp4/6_gro_receive` → `udp_queue_rcv_skb` → geneve/vxlan `encap_rcv`), with no local access required. Any remote host able to send UDP to the tunnel port (geneve 6081, vxlan 4789) of a forwarding router reaches the vulnerable code.\nAC:L - The attacker fully controls the 4-tuple, packet sizes and burst rate needed to force GRO coalescing and to produce the length mismatch after the geneve header is pulled; there is no race or unknowable memory state involved. The enabling condition is either a documented ethtool setting deployed in overlay/container networking, or can be created outright by any unprivileged `UDP_GRO` socket, which requires no capability.\nPR:N - UDP tunnel protocols (geneve/vxlan/bareudp) perform no authentication, and `udp_gro_receive` runs before any socket-level filtering — the vulnerable path is entered with `sk == NULL` by design. No credentials of any kind are needed.\nUI:N - Packets are processed automatically in softirq/NAPI context on receipt; no action by any local user or administrator is required at attack time.\nS:U - Although the aggregation happens in one netns and the damage manifests in another, network namespaces share a single kernel security authority. This is a standard in-kernel memory/packet-handling defect with no hypervisor or IOMMU boundary crossed.\nC:H - With a stale `gso_size` and unadjusted `frag_list` skbs, `skb_segment()` builds segments from wrong offsets and sets `nskb->data_len = len - hsize` overstating the real payload, so bytes belonging to adjacent packets (and skb/page memory beyond the intended content) are emitted onto the wire. In a multi-tenant overlay this leaks one flow's decapsulated data into another's stream.\nI:H - The commit explicitly states outcomes range \"from corrupted packets to kernel crashes\" — the offset/length confusion lets attacker-influenced bytes be spliced into another packet's decapsulated payload, corrupting forwarded traffic. The same inconsistent skb length accounting is the classic primitive for skb-layer out-of-bounds writes.\nA:H - The reported outcome is `kernel BUG at net/core/skbuff.c:4408` in `skb_segment()` reached from `__udp_gso_segment()`, i.e. a BUG()/oops taken in softirq context leading to kernel panic. A remote unauthenticated attacker can retrigger it at will by resending crafted UDP bursts."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["include/linux/udp.h","net/ipv4/udp.c","net/ipv4/udp_offload.c","net/ipv6/udp.c"],"versions":[{"version":"9fd1ff5d2ac7181844735806b0a703c942365291","lessThan":"3391b157780bbedf8ef9f202cbf10ee90bf6b0f8","status":"affected","versionType":"git"},{"version":"9fd1ff5d2ac7181844735806b0a703c942365291","lessThan":"d49ae15a5767d4e9ef8bbb79e42df1bfebc94670","status":"affected","versionType":"git"},{"version":"9fd1ff5d2ac7181844735806b0a703c942365291","lessThan":"d12245080cb259d82b34699f6cd4ec11bdb688bd","status":"affected","versionType":"git"},{"version":"9fd1ff5d2ac7181844735806b0a703c942365291","lessThan":"3001e7aa43d6691db2a878b0745b854bf12ddd19","status":"affected","versionType":"git"},{"version":"9fd1ff5d2ac7181844735806b0a703c942365291","lessThan":"35fe0e0b5c00bef7dde74842a2564c43856fbce4","status":"affected","versionType":"git"},{"version":"9fd1ff5d2ac7181844735806b0a703c942365291","lessThan":"3d010c8031e39f5fa1e8b13ada77e0321091011f","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/linux/udp.h","net/ipv4/udp.c","net/ipv4/udp_offload.c","net/ipv6/udp.c"],"versions":[{"version":"5.6","status":"affected"},{"version":"0","lessThan":"5.6","status":"unaffected","versionType":"semver"},{"version":"5.10.215","lessThanOrEqual":"5.10.*","status":"unaffected","versionType":"semver"},{"version":"5.15.154","lessThanOrEqual":"5.15.*","status":"unaffected","versionType":"semver"},{"version":"6.1.85","lessThanOrEqual":"6.1.*","status":"unaffected","versionType":"semver"},{"version":"6.6.26","lessThanOrEqual":"6.6.*","status":"unaffected","versionType":"semver"},{"version":"6.8.5","lessThanOrEqual":"6.8.*","status":"unaffected","versionType":"semver"},{"version":"6.9","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":"5.6","versionEndExcluding":"5.10.215"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"5.15.154"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"6.1.85"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"6.6.26"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"6.8.5"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"6.9"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/3391b157780bbedf8ef9f202cbf10ee90bf6b0f8"},{"url":"https://git.kernel.org/stable/c/d49ae15a5767d4e9ef8bbb79e42df1bfebc94670"},{"url":"https://git.kernel.org/stable/c/d12245080cb259d82b34699f6cd4ec11bdb688bd"},{"url":"https://git.kernel.org/stable/c/3001e7aa43d6691db2a878b0745b854bf12ddd19"},{"url":"https://git.kernel.org/stable/c/35fe0e0b5c00bef7dde74842a2564c43856fbce4"},{"url":"https://git.kernel.org/stable/c/3d010c8031e39f5fa1e8b13ada77e0321091011f"}],"title":"udp: do not accept non-tunnel GSO skbs landing in a tunnel","x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"problemTypes":[{"descriptions":[{"type":"CWE","lang":"en","description":"CWE-noinfo Not enough information"}]}],"metrics":[{"cvssV3_1":{"scope":"UNCHANGED","version":"3.1","baseScore":8.8,"attackVector":"NETWORK","baseSeverity":"HIGH","vectorString":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","integrityImpact":"HIGH","userInteraction":"NONE","attackComplexity":"LOW","availabilityImpact":"HIGH","privilegesRequired":"LOW","confidentialityImpact":"HIGH"}},{"other":{"type":"ssvc","content":{"timestamp":"2024-05-28T19:37:18.298363Z","id":"CVE-2024-35884","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"role":"CISA Coordinator","version":"2.0.3"}}}],"title":"CISA ADP Vulnrichment","providerMetadata":{"orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","shortName":"CISA-ADP","dateUpdated":"2024-11-13T18:46:28.924Z"}},{"providerMetadata":{"orgId":"af854a3a-2127-422b-91ae-364da2661108","shortName":"CVE","dateUpdated":"2024-08-02T03:21:48.465Z"},"title":"CVE Program Container","references":[{"url":"https://git.kernel.org/stable/c/3391b157780bbedf8ef9f202cbf10ee90bf6b0f8","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/d49ae15a5767d4e9ef8bbb79e42df1bfebc94670","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/d12245080cb259d82b34699f6cd4ec11bdb688bd","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/3001e7aa43d6691db2a878b0745b854bf12ddd19","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/35fe0e0b5c00bef7dde74842a2564c43856fbce4","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/3d010c8031e39f5fa1e8b13ada77e0321091011f","tags":["x_transferred"]},{"url":"https://lists.debian.org/debian-lts-announce/2024/06/msg00017.html","tags":["x_transferred"]}]},{"x_adpType":"supplier","providerMetadata":{"orgId":"0b142b55-0307-4c5a-b3c9-f314f3fb7c5e","shortName":"siemens-SADP","dateUpdated":"2026-05-12T11:52:18.997Z"},"affected":[{"vendor":"Siemens","product":"SIMATIC S7-1500 TM MFP - GNU/Linux subsystem","versions":[{"status":"affected","version":"0","lessThan":"*","versionType":"custom"}],"defaultStatus":"unknown"}],"references":[{"url":"https://cert-portal.siemens.com/productcert/html/ssa-265688.html"}]}]},"dataVersion":"5.2"}