Skip to main content

Linux Kernel EUVDEUVD-2026-81839

| CVE-2026-90246 HIGH
2026-09-17 Linux GHSA-jvqw-3p6q-2fgx
7.1
CVSS 3.1 · Vendor: Linux
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Local user creates nested user namespace
  2. Delivery
    Craft policy blob with tagset count near U32_MAX
  3. Exploit
    Load policy via aa_replace_profiles
  4. Execution
    i+cnt bounds check wraps and passes
  5. Persist
    verify_tags walks sets.table past allocation
  6. Impact
    Out-of-bounds read faults, kernel crash (DoS)

Vulnerability Assessment

Exploitation Conditions

Requires local access and the ability to load an AppArmor policy blob. Exploitation is gated by aa_may_manage_policy(), which checks CAP_MAC_ADMIN relative to the caller's own user namespace; with the distribution default unprivileged_userns_apparmor_policy=1 an unprivileged user in a matched-level nested user namespace can reach the path, otherwise CAP_MAC_ADMIN in the init namespace is required. The attacker must supply a crafted policy blob containing a tagset with a count value near U32_MAX (e.g. sets.size=2, table={0, 0xffffffff}) to trigger the i+cnt wrap; unpack_tags() runs before perms/DFA tables, so no other table needs to be well-formed. Limiting factors: local-only vector, requires either the non-guaranteed default userns policy setting or CAP_MAC_ADMIN, and the outcome is predominantly a kernel crash rather than data exposure.

Impact

The CVSS 3.1 vector (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H, base 7.1) frames this as a locally exploitable, low-privilege memory-safety flaw. All exploitation signals point to LOW real-world urgency despite the High rating: no EPSS score is provided, the CVE is not on CISA KEV, and no public exploit code is identified - so the correct status is 'no public exploit identified at time of analysis.' The technical reality is an integer-overflow-driven out-of-bounds READ on the AppArmor policy-load path; the walk continues reading table entries until a value fails a bound or the access faults, so the primary observable outcome is a kernel crash/DoS (A:H), while the vendor's C:H (confidentiality) is optimistic - the out-of-bounds words are compared internally against hdrs.size rather than being returned to the attacker, making any information disclosure marginal. My independent assessment is closer to C:L/I:N/A:H (~5.4-6.1). One genuinely notable factor raising reachability above a typical local bug: with the distro-default unprivileged_userns_apparmor_policy=1, aa_may_manage_policy() checks CAP_MAC_ADMIN against the subject's own (nested) user namespace, so an unprivileged local user in a matched-level userns can load the crafted policy - consistent with PR:L, not PR:N. CWE is listed as N/A but should be CWE-190 (integer overflow) leading to CWE-125 (out-of-bounds read).

Exploit ScenarioDerived

An unprivileged local user creates a nested user namespace (default-enabled on Ubuntu/SUSE via unprivileged_userns_apparmor_policy=1) and calls the AppArmor policy-replace interface with a crafted policy blob whose tagset table contains a count near 0xFFFFFFFF. The bounds check i+cnt >= sets.size wraps to a small value and passes, and verify_tags() walks past the end of the kcalloc'd table, producing an out-of-bounds read that typically faults and crashes the kernel (DoS). No public exploit code is identified at time of analysis.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 18, 2026

An integer overflow in the Linux kernel's AppArmor verify_tags() bounds check allows an authenticated local attacker with low privileges to trigger an out-of-bounds read by loading a crafted AppArmor policy blob, primarily causing a kernel crash and limited potential information disclosure. Reachability requires the ability to manage AppArmor policy; under the default unprivileged_userns_apparmor_policy=1 setting an unprivileged user in a matched-level nested user namespace can reach the path, otherwise CAP_MAC_ADMIN in the initial user namespace is required. The assessed vector is AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:H, no public exploit was identified at time of analysis, and vendor patches exist.

RemediationAI

Apply the vendor patch by upgrading to Linux 7.2.6 or 7.3-rc1 (or later), or by cherry-picking the stable fixes at commits ef79a405f83993f0fda5efde371d98433f7d7a47 and 465946d3c560c0137e6a180ba054dddc4d049f5a; vendor-released patch: 7.2.6 and 7.3-rc1. If immediate patching is not possible, note that the only reachable path is AppArmor policy loading, so restrict that capability: ensure aa_may_manage_policy() requires CAP_MAC_ADMIN in the initial user namespace rather than a nested one, for example by disabling the default unprivileged_userns_apparmor_policy=1 setting where available; the trade-off is that unprivileged user namespaces may lose the ability to load AppArmor policy, which can break container or sandbox use cases that rely on that behavior. Also avoid loading untrusted AppArmor policy blobs and, where feasible, keep AppArmor policy management limited to privileged init-namespace processes. No vendor patch was identified as missing; the primary remediation is the patched kernel version.

Affected VersionsENISA

Linux 3d28e2397af7a89ac3de33c686ed404cda59b5d5 <ef79a405f83993f0fda5efde371d98433f7d7a47
Linux patch: 7.3-rc1
Linux 3d28e2397af7a89ac3de33c686ed404cda59b5d5 <465946d3c560c0137e6a180ba054dddc4d049f5a
Linux patch: 7.2.6
Linux 7.0
Linux patch: 0

Affected Packages

euvd linux no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The flaw is an integer overflow (u32 wraparound) in AppArmor's verify_tags() function, which validates the tagset table unpacked from a policy blob. verify_tags() reads a count from tags->sets.table[i] and checks whether i+cnt >= tags->sets.size, but all three operands are u32, so i+cnt is evaluated modulo 2^32. sets.table[] entries are populated by unpack_tagsets() via aa_unpack_u32(), meaning each entry is an attacker-controlled raw 32-bit value. A count near U32_MAX makes the sum wrap to a small value, bypassing the guard and allowing the inner loop to walk past the kcalloc(size, sizeof(u32)) allocation. Although sets.size is bounded to 65535 because unpack_tagsets() reads it as a u16 via aa_unpack_array(), the wrap is reached purely through the attacker-supplied count. The vulnerable path is aa_replace_profiles -> aa_unpack -> unpack_policydb -> unpack_tags -> verify_tags, and unpack_tags() runs before the perms and DFA tables, so no other table needs to be well formed. Policy load is gated by aa_may_manage_policy(), which checks CAP_MAC_ADMIN relative to the caller's own user namespace; with the default unprivileged_userns_apparmor_policy=1, an unprivileged task in a matched-level nested namespace can reach it. The affected CPE is cpe:2.3:a:linux:linux:*:*:*:*:*:*:*:*, i.e., the Linux kernel. The root cause class is integer overflow leading to an out-of-bounds read; no CWE was provided in the input.

Know when Apparmor gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (Linux) PRIMARY 7.1 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
vuln.today AI 6.1 MEDIUM

Local crafted policy load by an unprivileged userns task (AV:L/PR:L/AC:L); out-of-bounds read is crash-primary (A:H) with only marginal, internally-compared leakage (C:L), no integrity impact.

3.1 AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:H
4.0 AV:L/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:H/SC:N/SI:N/SA:N
SUSE 5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Red Hat 5.5 MEDIUM

Primary rating from Vendor (Linux).

CVSS VectorVendor: Linux

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
High

Lifecycle Timeline

4
CVSS changed
Sep 18, 2026 - 18:22 NVD
7.1 (HIGH)
Patch available
Sep 17, 2026 - 17:19 EUVD
CVE Published
Sep 17, 2026 - 16:07 cve.org
HIGH 7.1
CVE Published
Sep 17, 2026 - 16:07 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

In the Linux kernel, the following vulnerability has been resolved:

apparmor: fix integer overflow in verify_tags() bounds check

verify_tags() validates the tagset table unpacked from a policy blob. For each set it reads a count and checks that advancing the index by that count stays inside sets.table[]:

u32 cnt = tags->sets.table[i];

if (i+cnt >= tags->sets.size) {

i, cnt and sets.size are all u32, so i+cnt is evaluated modulo 2^32. sets.table[] is filled by unpack_tagsets() with aa_unpack_u32(), so every entry is a raw unbounded 32-bit word taken from the policy blob, and verify_tags() is the function that is supposed to validate it. A count close to U32_MAX makes the sum wrap to a small value, the guard passes, and the inner loop then walks sets.table[++i] past the end of the kcalloc(size, sizeof(u32)) allocation.

Note that sets.size is bounded by 65535, because unpack_tagsets() reads it with aa_unpack_array() as a u16, so the wrap cannot be reached by growing the table; it is reached purely through the attacker-supplied count.

With sets.size = 2 and sets.table = { 0, 0xffffffff }:

i = 0: cnt = 0, guard 0 + 0 >= 2 is false, inner loop does not run i = 1: cnt = 0xffffffff, guard (1 + 0xffffffff) mod 2^32 == 0 >= 2 is false, so the guard is bypassed and the inner loop reads sets.table[2] -- one element past a two element allocation

The walk continues until an out-of-bounds value happens to be >= hdrs.size or the access faults, so a crafted policy yields an out-of-bounds read on the policy load path (aa_replace_profiles -> aa_unpack -> unpack_policydb -> unpack_tags -> verify_tags). unpack_tags() runs before the perms and DFA tables are unpacked, so no other table needs to be well formed to reach it.

Policy load is gated by aa_may_manage_policy(), which checks CAP_MAC_ADMIN relative to the subject's own user namespace rather than the init user namespace, so with the default unprivileged_userns_apparmor_policy=1 the path is reachable from an unprivileged task in a matched-level nested namespace, not only by a globally privileged one.

Perform the addition in u64 so that it cannot wrap, restoring the intended i + cnt < sets.size guarantee.

Executive ViewAI

Why It Matters

A high-severity integer overflow in the Linux kernel's AppArmor verify_tags() function could allow an authenticated local user to crash affected systems or access limited kernel memory, primarily impacting availability. Organizations using Linux kernels with AppArmor enabled-especially those relying on default unprivileged user namespace settings-are at risk because a low-privileged local attacker can trigger this flaw under certain configurations. While no public exploit identified at time of analysis, leadership should prioritize patching to prevent potential service disruptions and information leakage.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 90% exploitable
Prevalence
Medium
AppArmor ships default-enabled on Ubuntu/SUSE, but the unprivileged-userns policy-load path is niche
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact
High

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 16.0 Not-Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy