{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2024-50036","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2024-10-21T12:17:06.070Z","datePublished":"2024-10-21T19:39:37.135Z","dateUpdated":"2026-08-05T11:41:09.713Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-05T11:41:09.713Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nnet: do not delay dst_entries_add() in dst_release()\n\ndst_entries_add() uses per-cpu data that might be freed at netns\ndismantle from ip6_route_net_exit() calling dst_entries_destroy()\n\nBefore ip6_route_net_exit() can be called, we release all\nthe dsts associated with this netns, via calls to dst_release(),\nwhich waits an rcu grace period before calling dst_destroy()\n\ndst_entries_add() use in dst_destroy() is racy, because\ndst_entries_destroy() could have been called already.\n\nDecrementing the number of dsts must happen sooner.\n\nNotes:\n\n1) in CONFIG_XFRM case, dst_destroy() can call\n   dst_release_immediate(child), this might also cause UAF\n   if the child does not have DST_NOCOUNT set.\n   IPSEC maintainers might take a look and see how to address this.\n\n2) There is also discussion about removing this count of dst,\n   which might happen in future kernels."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The trigger is network-namespace dismantle — a local operation (`unshare -Urn` then exit, or `ip netns del`) that drives `cleanup_net()` → `ip6_route_net_exit()`; a remote peer can populate the counted IPv6 dsts but cannot cause the teardown itself.\nAC:L - The attacker controls both sides — it creates the counted dsts and triggers the teardown — and the \"race\" is structurally biased in the attacker's favor since `fib6_net_exit()`'s `dst_release()` calls precede `ip6_route_net_exit()` by microseconds while the deferred `dst_destroy()` waits a full RCU grace period; automated CI hit it accidentally, and the loop can be repeated indefinitely.\nPR:L - An unprivileged local user obtains CAP_NET_ADMIN in a private netns via user namespaces (`unshare -Urn`, enabled by default on Debian/Ubuntu/Fedora and inherent to container runtimes), which is sufficient to create the IPv6 dsts and destroy the namespace; no real root is needed.\nUI:N - The attacker performs every step itself — namespace creation, IPv6 traffic/exception-route generation, and namespace teardown — with no victim action required.\nS:U - The freed per-cpu memory and the resulting corruption are kernel objects within the same security authority; no hypervisor, IOMMU, or sandbox boundary is crossed.\nC:H - This is a use-after-free: `percpu_counter_add_batch()` reads `this_cpu_read(*fbc->counters)` from `free_percpu()`'d memory that another subsystem has since reallocated, and the slow path folds that stolen value into `fbc->count`, which is observable via `dst_entries_get_slow()`; escalating the per-cpu `percpu_ref` decrement to a real object UAF yields arbitrary kernel read.\nI:H - The same code path performs a `this_cpu_try_cmpxchg` **write** into the freed/reallocated per-cpu slot — a groomable, repeatable decrement primitive on arbitrary per-cpu state — and once `fbc->counters` is NULLed it writes at per-cpu offset 0, corrupting `pcpu_hot.current_task` on x86_64, which is directly leveragable for control-flow hijack and privilege escalation.\nA:H - The reported failure is a KASAN use-after-free splat during netns dismantle, and corrupting freed per-cpu memory or the `current_task` pointer reliably produces an oops/panic; the teardown loop can be repeated at will."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/core/dst.c"],"versions":[{"version":"f88649721268999bdff09777847080a52004f691","lessThan":"547087307bc19417b4f2bc85ba9664a3e8db5a6a","status":"affected","versionType":"git"},{"version":"f88649721268999bdff09777847080a52004f691","lessThan":"e3915f028b1f1c37e87542e5aadd33728c259d96","status":"affected","versionType":"git"},{"version":"f88649721268999bdff09777847080a52004f691","lessThan":"a60db84f772fc3a906c6c4072f9207579c41166f","status":"affected","versionType":"git"},{"version":"f88649721268999bdff09777847080a52004f691","lessThan":"eae7435b48ffc8e9be0ff9cfeae40af479a609dd","status":"affected","versionType":"git"},{"version":"f88649721268999bdff09777847080a52004f691","lessThan":"3c7c918ec0aa3555372c5a57f18780b7a96c5cfc","status":"affected","versionType":"git"},{"version":"f88649721268999bdff09777847080a52004f691","lessThan":"ac888d58869bb99753e7652be19a151df9ecb35d","status":"affected","versionType":"git"},{"version":"86e48c03d774e01ccd71ecba4fc4b5c2bc0b5b41","status":"affected","versionType":"git"},{"version":"591b1e1bb40152e22cee757f493046a0ca946bf8","status":"affected","versionType":"git"},{"version":"df90819dafcd6b97fc665f63a15752a570e227a2","status":"affected","versionType":"git"},{"version":"9a4fe697023dbe6c25caa1f8b2153af869a29bd2","status":"affected","versionType":"git"},{"version":"3.10.50","lessThan":"3.11","status":"affected","versionType":"semver"},{"version":"3.12.26","lessThan":"3.13","status":"affected","versionType":"semver"},{"version":"3.14.14","lessThan":"3.15","status":"affected","versionType":"semver"},{"version":"3.15.7","lessThan":"3.16","status":"affected","versionType":"semver"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/core/dst.c"],"versions":[{"version":"3.16","status":"affected"},{"version":"0","lessThan":"3.16","status":"unaffected","versionType":"semver"},{"version":"5.10.230","lessThanOrEqual":"5.10.*","status":"unaffected","versionType":"semver"},{"version":"5.15.172","lessThanOrEqual":"5.15.*","status":"unaffected","versionType":"semver"},{"version":"6.1.117","lessThanOrEqual":"6.1.*","status":"unaffected","versionType":"semver"},{"version":"6.6.57","lessThanOrEqual":"6.6.*","status":"unaffected","versionType":"semver"},{"version":"6.11.4","lessThanOrEqual":"6.11.*","status":"unaffected","versionType":"semver"},{"version":"6.12","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":"3.16","versionEndExcluding":"5.10.230"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.16","versionEndExcluding":"5.15.172"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.16","versionEndExcluding":"6.1.117"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.16","versionEndExcluding":"6.6.57"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.16","versionEndExcluding":"6.11.4"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.16","versionEndExcluding":"6.12"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.10.50"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.12.26"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.14.14"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.15.7"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/547087307bc19417b4f2bc85ba9664a3e8db5a6a"},{"url":"https://git.kernel.org/stable/c/e3915f028b1f1c37e87542e5aadd33728c259d96"},{"url":"https://git.kernel.org/stable/c/a60db84f772fc3a906c6c4072f9207579c41166f"},{"url":"https://git.kernel.org/stable/c/eae7435b48ffc8e9be0ff9cfeae40af479a609dd"},{"url":"https://git.kernel.org/stable/c/3c7c918ec0aa3555372c5a57f18780b7a96c5cfc"},{"url":"https://git.kernel.org/stable/c/ac888d58869bb99753e7652be19a151df9ecb35d"}],"title":"net: do not delay dst_entries_add() in dst_release()","x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2024-50036","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"version":"2.0.3","timestamp":"2024-10-22T13:25:25.259782Z"}}}],"title":"CISA ADP Vulnrichment","providerMetadata":{"orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","shortName":"CISA-ADP","dateUpdated":"2024-10-22T13:28:44.921Z"}},{"title":"CVE Program Container","references":[{"url":"https://lists.debian.org/debian-lts-announce/2025/03/msg00002.html"},{"url":"https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html"}],"providerMetadata":{"orgId":"af854a3a-2127-422b-91ae-364da2661108","shortName":"CVE","dateUpdated":"2025-11-03T22:24:42.427Z"}}]}}