{"api_version":"1","generated_at":"2026-08-23T21:52:49+00:00","cve":"CVE-2026-72255","urls":{"html":"https://cve.report/CVE-2026-72255","api":"https://cve.report/api/cve/CVE-2026-72255.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-72255","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-72255"},"summary":{"title":"netfilter: nf_queue: pin bridge device while NFQUEUE holds fake dst","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nnetfilter: nf_queue: pin bridge device while NFQUEUE holds fake dst\n\nThe br_netfilter fake rtable is embedded in struct net_bridge and is\nattached to bridged packets with skb_dst_set_noref(). If such a packet is\nqueued to NFQUEUE, __nf_queue() upgrades that fake dst with\nskb_dst_force().\n\nAt that point the queued skb can hold a real dst reference after bridge\nteardown has started. The problem is not that every bridged packet needs\nits own dst reference. The problem is that NFQUEUE can keep the bridge\nprivate fake dst alive after unregister begins.\n\nFix this by keeping the bridge fake dst model unchanged and pinning the\nbridge master device only while the packet sits in NFQUEUE. Record the\nbridge device in nf_queue_entry when the queued skb carries a bridge fake\ndst, take a device reference for the queue lifetime, and drop it when the\nqueue entry is freed.\n\nAlso make sure queued entries are reaped when that bridge device goes\ndown, and drop the redundant nf_bridge_info_exists() test from the fake\ndst detection.\n\nThis keeps netdev_priv(br->dev) alive until verdict completion, so the\nembedded fake rtable and its metrics backing storage cannot be freed out\nfrom under dst_release(). It also avoids the constant refcount bump and\navoids using ipv4-specific dst helpers for IPv6 bridge traffic.","state":"PUBLISHED","assigner":"Linux","published_at":"2026-08-15 06:21:53","updated_at":"2026-08-23 13:16:42"},"problem_types":[],"metrics":[{"version":"3.1","source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","type":"Secondary","score":"7.8","severity":"HIGH","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","data":{"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","attackVector":"LOCAL","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"HIGH"}},{"version":"3.1","source":"CNA","type":"DECLARED","score":"7.8","severity":"HIGH","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","data":{"baseScore":7.8,"baseSeverity":"HIGH","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","version":"3.1"}}],"references":[{"url":"https://git.kernel.org/stable/c/47b3af24de5fbed4bf2952de0f5294ef1a338a26","name":"https://git.kernel.org/stable/c/47b3af24de5fbed4bf2952de0f5294ef1a338a26","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/01ace27af47801dd7f6b839e782b62863af979cc","name":"https://git.kernel.org/stable/c/01ace27af47801dd7f6b839e782b62863af979cc","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/0ca505346c5e2905ab7b5313af801fcf38f594a8","name":"https://git.kernel.org/stable/c/0ca505346c5e2905ab7b5313af801fcf38f594a8","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/8dc51351472825500145eed5bddfb88b2ec32008","name":"https://git.kernel.org/stable/c/8dc51351472825500145eed5bddfb88b2ec32008","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/3f03a2d225c668283110ad5f9ff159ba4591e2c7","name":"https://git.kernel.org/stable/c/3f03a2d225c668283110ad5f9ff159ba4591e2c7","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/430521af7fe8a9c08f5a2554224a35f11f51d99e","name":"https://git.kernel.org/stable/c/430521af7fe8a9c08f5a2554224a35f11f51d99e","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/c9c9b37f8c5505224e8d206184df3bb668ee00cf","name":"https://git.kernel.org/stable/c/c9c9b37f8c5505224e8d206184df3bb668ee00cf","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-72255","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-72255","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 34666d467cbf1e2e3c7bb15a63eccfb582cdd71f 8dc51351472825500145eed5bddfb88b2ec32008 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 34666d467cbf1e2e3c7bb15a63eccfb582cdd71f 430521af7fe8a9c08f5a2554224a35f11f51d99e git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 34666d467cbf1e2e3c7bb15a63eccfb582cdd71f 3f03a2d225c668283110ad5f9ff159ba4591e2c7 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 34666d467cbf1e2e3c7bb15a63eccfb582cdd71f 01ace27af47801dd7f6b839e782b62863af979cc git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 34666d467cbf1e2e3c7bb15a63eccfb582cdd71f 0ca505346c5e2905ab7b5313af801fcf38f594a8 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 34666d467cbf1e2e3c7bb15a63eccfb582cdd71f 47b3af24de5fbed4bf2952de0f5294ef1a338a26 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 34666d467cbf1e2e3c7bb15a63eccfb582cdd71f c9c9b37f8c5505224e8d206184df3bb668ee00cf git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 3.18","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 3.18 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 5.15.217 5.15.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.1.178 6.1.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.6.145 6.6.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.12.97 6.12.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.18.40 6.18.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.1.5 7.1.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.2 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":{"cve_year":"2026","cve_id":"72255","cve":"CVE-2026-72255","epss":"0.001640000","percentile":"0.061030000","score_date":"2026-08-17","updated_at":"2026-08-18 00:11:47"},"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"defaultStatus":"unaffected","product":"Linux","programFiles":["include/net/netfilter/nf_queue.h","net/netfilter/nf_queue.c","net/netfilter/nfnetlink_queue.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"lessThan":"8dc51351472825500145eed5bddfb88b2ec32008","status":"affected","version":"34666d467cbf1e2e3c7bb15a63eccfb582cdd71f","versionType":"git"},{"lessThan":"430521af7fe8a9c08f5a2554224a35f11f51d99e","status":"affected","version":"34666d467cbf1e2e3c7bb15a63eccfb582cdd71f","versionType":"git"},{"lessThan":"3f03a2d225c668283110ad5f9ff159ba4591e2c7","status":"affected","version":"34666d467cbf1e2e3c7bb15a63eccfb582cdd71f","versionType":"git"},{"lessThan":"01ace27af47801dd7f6b839e782b62863af979cc","status":"affected","version":"34666d467cbf1e2e3c7bb15a63eccfb582cdd71f","versionType":"git"},{"lessThan":"0ca505346c5e2905ab7b5313af801fcf38f594a8","status":"affected","version":"34666d467cbf1e2e3c7bb15a63eccfb582cdd71f","versionType":"git"},{"lessThan":"47b3af24de5fbed4bf2952de0f5294ef1a338a26","status":"affected","version":"34666d467cbf1e2e3c7bb15a63eccfb582cdd71f","versionType":"git"},{"lessThan":"c9c9b37f8c5505224e8d206184df3bb668ee00cf","status":"affected","version":"34666d467cbf1e2e3c7bb15a63eccfb582cdd71f","versionType":"git"}]},{"defaultStatus":"affected","product":"Linux","programFiles":["include/net/netfilter/nf_queue.h","net/netfilter/nf_queue.c","net/netfilter/nfnetlink_queue.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"status":"affected","version":"3.18"},{"lessThan":"3.18","status":"unaffected","version":"0","versionType":"semver"},{"lessThanOrEqual":"5.15.*","status":"unaffected","version":"5.15.217","versionType":"semver"},{"lessThanOrEqual":"6.1.*","status":"unaffected","version":"6.1.178","versionType":"semver"},{"lessThanOrEqual":"6.6.*","status":"unaffected","version":"6.6.145","versionType":"semver"},{"lessThanOrEqual":"6.12.*","status":"unaffected","version":"6.12.97","versionType":"semver"},{"lessThanOrEqual":"6.18.*","status":"unaffected","version":"6.18.40","versionType":"semver"},{"lessThanOrEqual":"7.1.*","status":"unaffected","version":"7.1.5","versionType":"semver"},{"lessThanOrEqual":"*","status":"unaffected","version":"7.2","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"5.15.217","versionStartIncluding":"3.18","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.1.178","versionStartIncluding":"3.18","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.6.145","versionStartIncluding":"3.18","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.12.97","versionStartIncluding":"3.18","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.18.40","versionStartIncluding":"3.18","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.1.5","versionStartIncluding":"3.18","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.2","versionStartIncluding":"3.18","vulnerable":true}],"negate":false,"operator":"OR"}]}],"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nnetfilter: nf_queue: pin bridge device while NFQUEUE holds fake dst\n\nThe br_netfilter fake rtable is embedded in struct net_bridge and is\nattached to bridged packets with skb_dst_set_noref(). If such a packet is\nqueued to NFQUEUE, __nf_queue() upgrades that fake dst with\nskb_dst_force().\n\nAt that point the queued skb can hold a real dst reference after bridge\nteardown has started. The problem is not that every bridged packet needs\nits own dst reference. The problem is that NFQUEUE can keep the bridge\nprivate fake dst alive after unregister begins.\n\nFix this by keeping the bridge fake dst model unchanged and pinning the\nbridge master device only while the packet sits in NFQUEUE. Record the\nbridge device in nf_queue_entry when the queued skb carries a bridge fake\ndst, take a device reference for the queue lifetime, and drop it when the\nqueue entry is freed.\n\nAlso make sure queued entries are reaped when that bridge device goes\ndown, and drop the redundant nf_bridge_info_exists() test from the fake\ndst detection.\n\nThis keeps netdev_priv(br->dev) alive until verdict completion, so the\nembedded fake rtable and its metrics backing storage cannot be freed out\nfrom under dst_release(). It also avoids the constant refcount bump and\navoids using ipv4-specific dst helpers for IPv6 bridge traffic."}],"metrics":[{"cvssV3_1":{"baseScore":7.8,"baseSeverity":"HIGH","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","version":"3.1"},"scenarios":[{"lang":"en","value":"AV:L - The bug is reached via netfilter NFQUEUE and local bridge/rtnetlink setup (__nf_queue skb_dst_force on br_netfilter's embedded fake rtable, then bridge teardown while packets remain queued), not from unauthenticated remote input alone; kernel guidance classifies netfilter/nftables paths as Local.\nAC:L - With CAP_NET_ADMIN in a user namespace, an attacker can bind NFQUEUE, queue br_netfilter bridged packets, and delete the bridge while packets sit in the queue, deterministically hitting nfqnl_dev_drop/dst_release after struct net_bridge is freed.\nPR:L - Configuring NFQUEUE/nftables rules, loading br_netfilter, creating/deleting bridges, and binding nfnetlink queues require CAP_NET_ADMIN, obtainable by unprivileged users via user/network namespaces (unshare -Urn), not init-namespace root.\nUI:N - Exploitation requires only the attacker's own netlink, nftables, and traffic generation; no victim must mount filesystems, open files, or perform other interactive actions beyond the attacker's programmatic setup.\nS:U - Impact is kernel heap corruption in the same host security domain via freed embedded fake_rtable/metrics inside struct net_bridge; this is standard kernel UAF/privilege-escalation territory, not a VM, IOMMU, or sandbox boundary escape.\nC:H - skb_dst_force in __nf_queue holds a dst reference to fake_rtable storage embedded in struct net_bridge; after bridge unregister frees that object, dst_release operates on freed kmalloc memory—a UAF that can disclose kernel memory via slab reuse.\nI:H - The dangling fake rtable/metrics pointer in queued skbs can be combined with heap grooming to obtain arbitrary kernel writes or control-flow hijack during dst_destroy/netdev_put, consistent with kernel UAF integrity guidance.\nA:H - Freeing queued NFQUEUE entries after bridge teardown dereferences freed net_bridge/fake_rtable in dst_release, causing kernel oops/panic-class faults; repeated triggering yields reliable denial of service on bridge/NFQUEUE deployments."}]}],"providerMetadata":{"dateUpdated":"2026-08-23T12:47:09.141Z","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux"},"references":[{"url":"https://git.kernel.org/stable/c/8dc51351472825500145eed5bddfb88b2ec32008"},{"url":"https://git.kernel.org/stable/c/430521af7fe8a9c08f5a2554224a35f11f51d99e"},{"url":"https://git.kernel.org/stable/c/3f03a2d225c668283110ad5f9ff159ba4591e2c7"},{"url":"https://git.kernel.org/stable/c/01ace27af47801dd7f6b839e782b62863af979cc"},{"url":"https://git.kernel.org/stable/c/0ca505346c5e2905ab7b5313af801fcf38f594a8"},{"url":"https://git.kernel.org/stable/c/47b3af24de5fbed4bf2952de0f5294ef1a338a26"},{"url":"https://git.kernel.org/stable/c/c9c9b37f8c5505224e8d206184df3bb668ee00cf"}],"title":"netfilter: nf_queue: pin bridge device while NFQUEUE holds fake dst","x_generator":{"engine":"bippy-1.2.0"}}},"cveMetadata":{"assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","assignerShortName":"Linux","cveId":"CVE-2026-72255","datePublished":"2026-08-15T05:54:42.972Z","dateReserved":"2026-08-09T03:40:39.915Z","dateUpdated":"2026-08-23T12:47:09.141Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-08-15 06:21:53","lastModifiedDate":"2026-08-23 13:16:42","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:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH","attackVector":"LOCAL","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"HIGH"},"exploitabilityScore":1.8,"impactScore":5.9}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"72255","Ordinal":"1","Title":"netfilter: nf_queue: pin bridge device while NFQUEUE holds fake ","CVE":"CVE-2026-72255","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"72255","Ordinal":"1","NoteData":"In the Linux kernel, the following vulnerability has been resolved:\n\nnetfilter: nf_queue: pin bridge device while NFQUEUE holds fake dst\n\nThe br_netfilter fake rtable is embedded in struct net_bridge and is\nattached to bridged packets with skb_dst_set_noref(). If such a packet is\nqueued to NFQUEUE, __nf_queue() upgrades that fake dst with\nskb_dst_force().\n\nAt that point the queued skb can hold a real dst reference after bridge\nteardown has started. The problem is not that every bridged packet needs\nits own dst reference. The problem is that NFQUEUE can keep the bridge\nprivate fake dst alive after unregister begins.\n\nFix this by keeping the bridge fake dst model unchanged and pinning the\nbridge master device only while the packet sits in NFQUEUE. Record the\nbridge device in nf_queue_entry when the queued skb carries a bridge fake\ndst, take a device reference for the queue lifetime, and drop it when the\nqueue entry is freed.\n\nAlso make sure queued entries are reaped when that bridge device goes\ndown, and drop the redundant nf_bridge_info_exists() test from the fake\ndst detection.\n\nThis keeps netdev_priv(br->dev) alive until verdict completion, so the\nembedded fake rtable and its metrics backing storage cannot be freed out\nfrom under dst_release(). It also avoids the constant refcount bump and\navoids using ipv4-specific dst helpers for IPv6 bridge traffic.","Type":"Description","Title":"netfilter: nf_queue: pin bridge device while NFQUEUE holds fake "}]}}}