Look up another CVE · open CVE-2026-72247 in the interactive tracker
CVE-2026-72247
netfilter: nf_conncount: fix zone comparison in tuple dedup
Published 2026-08-15 (2 months ago) by the Linux kernel CNA. Subsystem net/netfilter. Debian urgency: not yet assigned.
What to do, per Debian release
Debian's own status for CVE-2026-72247 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source
| Release | Status | Version | What this means |
|---|---|---|---|
| Debian 12bookworm | fixed | 6.1.180-1 | Update the kernel and reboot. Fixed in 6.1.180-1. A running kernel keeps the old code until the machine restarts. |
| Debian 13trixie | fixed | 6.12.100-1 | Update the kernel and reboot. Fixed in 6.12.100-1. A running kernel keeps the old code until the machine restarts. |
| Debian 14forky | fixed | 7.1.5-1 | Update the kernel and reboot. Fixed in 7.1.5-1. A running kernel keeps the old code until the machine restarts. |
| Debian unstablesid | fixed | 7.1.5-1 | Update the kernel and reboot. Fixed in 7.1.5-1. A running kernel keeps the old code until the machine restarts. |
The vulnerability
What the bug is
The "already exists" dedup logic in __nf_conncount_add() decides whether a connection has already been counted and can be skipped instead of incrementing the connlimit count. It compares the conntrack zone of a list entry with the zone of the connection being added using nf_ct_zone_id() and nf_ct_zone_equal(), passing conn->zone.dir or zone->dir as the direction argument. Those helpers take enum ip_conntrack_dir values: IP_CT_DIR_ORIGINAL is 0 and IP_CT_DIR_REPLY is 1. However, zone->dir is a u8 bitmask: NF_CT_ZONE_DIR_ORIG is 1, NF_CT_ZONE_DIR_REPL is 2 and NF_CT_DEFAULT_ZONE_DIR is 3. Passing that bitmask as the enum direction shifts the meaning of every non-zero value. An ORIG-only zone passes 1 and is tested as REPLY, while REPL-only and default zones pass 2 or 3 and test bits beyond the valid direction range. In those cases nf_ct_zone_id() can fall back to NF_CT_DEFAULT_ZONE_ID instead of using the real zone id, so different zones can be treated as equal and dedup collapses to tuple equality alone. nf_conncount stores and compares the original-direction tuple for a connection. If an skb already has an attached conntrack entry, get_ct_or_tuple_from_skb() explicitly copies ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple, regardless of the packet's ctinfo. Therefore the zone comparison in the tuple dedup path must use IP_CT_DIR_ORIGINAL as well; the zone direction bitmask describes where a zone id applies, not which direction this conncount tuple represents. Fix the two dedup comparisons by passing IP_CT_DIR_ORIGINAL directly. Do not special-case NF_CT_DEFAULT_ZONE_DIR and do not compare raw zone ids: using the existing helpers with IP_CT_DIR_ORIGINAL preserves the direction-aware NF_CT_DEFAULT_ZONE_ID fallback. A default bidirectional zone contains the ORIG bit, so it naturally returns the real zone id; reply-only zones continue to fall back for original-direction tuple comparisons.
Where it lives
The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.
net/netfilter/nf_conncount.c
- What this is
- NETFILTERMAINTAINERS section matched on net/netfilter/ · netfilter-devel@vger.kernel.org · Maintained
- Kernel module
- nf_conncount
Check it on the machine
grep -wE 'CONFIG_NETFILTER|CONFIG_NETFILTER_CONNCOUNT' /boot/config-$(uname -r)Reads the booted kernel's own configuration, on the machine and nowhere else. =y is built in, =m is a module, and an is not set line means the code is not there.
lsmod | grep -w nf_conncountPrints a line if that module is loaded right now, and nothing if it is not. One that is not loaded can still be loaded later by anything that needs it.
Show whether Debian builds this, per release
Debian builds this as a loadable module. Every release below compiles it as a module on every flavour, so whether the code is in the running kernel depends on whether that module is loaded.
- bookworm, trixie, forky, sidm
- m
- a loadable module on every flavour - check lsmod, can be blacklisted
- Build switches
- CONFIG_NETFILTER, CONFIG_NETFILTER_CONNCOUNT
- Reads as
- all on means the file is compiled; any one off means it is not.
From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS kbuild Makefiles Debian linux-config packages
Signals
- Published
- 2026-08-15 (2 months ago)source
- CVSS
- 7.5 high
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:Hsource recompute it - Attack vector
- network (AV:N)source
- EPSS
- 0.70%, higher than 52.1% of all CVEssource
- CISA KEV
- not listedthe KEV catalogue
- Debian urgency
- not yet assignedsource
- Subsystem
- net/netfilter
Upstream fixes
The versions the CNA records as introducing and fixing this, and the commit for each. source
| Introduced | Fixed in | Commit |
|---|---|---|
| 4.18 | 5.10.261 | 82fc35e0da9a |
| 4.18 | 5.15.212 | 78b5d6dbc860 |
| 4.18 | 6.1.178 | 4f30a89c0ed2 |
| 4.18 | 6.6.145 | 7bdc3c0985ec |
| 4.18 | 6.12.97 | 35a56e2a46b9 |
| 4.18 | 6.18.40 | 3cd9a5792cbe |
| 4.18 | 7.1.5 | 6ff07ac5405b |
| 4.18 | 7.2 | f62c41b4910e |
| 4.14.92 | 0 | 0 |
| 4.14.92 | 0 | 0 |
Why the CNA scored it this way
Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source
- AV:NAttack vector, network
- The bug is in __nf_conncount_add() on the netfilter packet path; remote peers drive it by sending traffic that hits xt_connlimit, nft_connlimit, or Open vSwitch conntrack zone-limit rules on internet-facing gateways and cloud hypervisors.
- AC:LAttack complexity, low
- Once connlimit or OVS zone limits are deployed, an attacker can deterministically skew counts by opening many connections across conntrack zones; zone bitmask misuse makes different zones compare equal without races or victim-specific state.
- PR:NPrivileges required, none
- Triggering requires only unauthenticated inbound packets matching existing connlimit rules; the attacker needs no credentials or capabilities on the target, only network reachability to the protected service.
- UI:NUser interaction, none
- Exploitation needs no action from any user or administrator beyond normal background connlimit deployment; the attacker autonomously sends connection traffic to provoke incorrect deduplication.
- S:UScope, unchanged
- Impact is confined to incorrect per-zone connection accounting inside the kernel netfilter/conntrack stack; it does not cross VM, container, or IOMMU security boundaries.
- C:NConfidentiality impact, none
- This is a logic error in zone-aware tuple deduplication with no memory corruption, out-of-bounds access, use-after-free, or other information-disclosure primitive.
- I:NIntegrity impact, none
- No attacker-controlled kernel or application data is modified; only internal connection counters are wrong, with no memory writes or code-execution primitive.
- A:HAvailability impact, high
- Undercounting lets attackers bypass per-zone connlimit/OVS limits and exhaust conntrack or service resources; overcounting can falsely hit limits and drop or reject legitimate new connections, causing sustained denial of service.