CVE-2026-23111
Last modified
CVE-2026-23111 is a high-severity vulnerability rated 7.8/10 on the CVSS scale. In the Linux kernel, the following vulnerability has been resolved: netfilter: nf_tables: fix inverted genmask check in nft_map_catchall_activate() nft_map_catchall_activate() has an inverted element activity check compared to its non-catchall counterpart nft_mapelem_activate() and compared to what is logically required. nft_map_catchall_activate() is called from the abort path to re-activate catchall map elements that were deactivated during a failed transaction. It should skip elements that are already active (they don't need re-activation) and process elements that are inactive (they need to be restored). Instead, the current code does the opposite: it skips inactive elements and processes active ones. Compare the non-catchall activate callback, which is correct: nft_mapelem_activate(): if (nft_set_elem_active(ext, iter->genmask)) return 0; /* skip active, process inactive */ With the buggy catchall version: nft_map_catchall_activate(): if (!nft_set_elem_active(ext, genmask)) continue; /* skip inactive, process active */ The consequence is that when a DELSET operation is aborted, nft_setelem_data_activate() is never called for the catchall element. For NFT_GOTO verdict elements, this means nft_data_hold() is never called to restore the chain->use reference count. EPSS estimates a 0.34% chance of exploitation in the next 30 days.
Description
In the Linux kernel, the following vulnerability has been resolved: netfilter: nf_tables: fix inverted genmask check in nft_map_catchall_activate() nft_map_catchall_activate() has an inverted element activity check compared to its non-catchall counterpart nft_mapelem_activate() and compared to what is logically required. nft_map_catchall_activate() is called from the abort path to re-activate catchall map elements that were deactivated during a failed transaction. It should skip elements that are already active (they don't need re-activation) and process elements that are inactive (they need to be restored). Instead, the current code does the opposite: it skips inactive elements and processes active ones. Compare the non-catchall activate callback, which is correct: nft_mapelem_activate(): if (nft_set_elem_active(ext, iter->genmask)) return 0; /* skip active, process inactive */ With the buggy catchall version: nft_map_catchall_activate(): if (!nft_set_elem_active(ext, genmask)) continue; /* skip inactive, process active */ The consequence is that when a DELSET operation is aborted, nft_setelem_data_activate() is never called for the catchall element. For NFT_GOTO verdict elements, this means nft_data_hold() is never called to restore the chain->use reference count. Each abort cycle permanently decrements chain->use. Once chain->use reaches zero, DELCHAIN succeeds and frees the chain while catchall verdict elements still reference it, resulting in a use-after-free. This is exploitable for local privilege escalation from an unprivileged user via user namespaces + nftables on distributions that enable CONFIG_USER_NS and CONFIG_NF_TABLES. Fix by removing the negation so the check matches nft_mapelem_activate(): skip active elements, process inactive ones.
Metrics
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weakness Enumeration
Affected Software
| Vendor | Product | Versions | Update |
|---|---|---|---|
| Linux | Linux Kernel | >= 4.19.316, < 4.20 | — |
| Linux | Linux Kernel | >= 5.4.262, < 5.5 | — |
| Linux | Linux Kernel | >= 5.10.188, < 5.11 | — |
| Linux | Linux Kernel | >= 5.15.121, < 5.15.200 | — |
| Linux | Linux Kernel | >= 6.1.36, < 6.1.163 | — |
| Linux | Linux Kernel | >= 6.3.10, < 6.4 | — |
| Linux | Linux Kernel | >= 6.4.1, < 6.6.124 | — |
| Linux | Linux Kernel | >= 6.7, < 6.12.70 | — |
| Linux | Linux Kernel | >= 6.13, < 6.18.10 | — |
| Linux | Linux Kernel | 6.4 | — |
| Linux | Linux Kernel | 6.19 | Rc1 |
References
Timeline
- Published
- Last Modified
- Status
- Modified
Frequently Asked Questions
What is CVE-2026-23111?
How severe is CVE-2026-23111?
How do I fix CVE-2026-23111?
How Strix Helps
- How Strix found a critical auth bypass in etcdStrix autonomously discovered a critical authentication bypass in etcd, later designated CVE-2026-33413.
- Autonomous PentestingAI agents that find and validate exploitable vulnerabilities like this one across your applications.
- PR ReviewsPentest every pull request so vulnerable code is caught before it ships to production.
- AI Penetration TestingHow AI-driven penetration testing continuously covers your attack surface.
Related CVEs from 2026
- CVE-2026-23106In the Linux kernel, the following vulnerability has been re…5.5
- CVE-2026-23107In the Linux kernel, the following vulnerability has been re…5.5
- CVE-2026-23108In the Linux kernel, the following vulnerability has been re…5.5
- CVE-2026-23109In the Linux kernel, the following vulnerability has been re…5.5
- CVE-2026-2311IBM i 7.6, 7.5, 7.4, 7.3, and 7.2 s vulnerable to privilege …9.8
- CVE-2026-23110In the Linux kernel, the following vulnerability has been re…4.7
- CVE-2026-23112In the Linux kernel, the following vulnerability has been re…9.8
- CVE-2026-23113In the Linux kernel, the following vulnerability has been re…5.5
- CVE-2026-23114In the Linux kernel, the following vulnerability has been re…5.5
- CVE-2026-23115In the Linux kernel, the following vulnerability has been re…4.7
- CVE-2026-23116In the Linux kernel, the following vulnerability has been re…5.5
- CVE-2026-23117In the Linux kernel, the following vulnerability has been re…5.5
Are you affected by CVE-2026-23111?
Run a free Strix scan to check your systems for this vulnerability.
Scan your code nowSource: NVD / NIST
