Skip to main content

Linux Kernel CVE-2026-63827

| EUVDEUVD-2026-45493 HIGH
2026-07-19 Linux GHSA-gpp3-g5wp-8xhw
7.8
CVSS 3.1 · Vendor: Linux
Share

Severity by source

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

Triggering requires local AppArmor policy-load privilege (PR:H) and winning a narrow refcount race (AC:H); a kernel UAF can yield full C/I/A compromise.

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

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
High
Availability
High

Lifecycle Timeline

5
Analysis Generated
Jul 20, 2026 - 15:45 vuln.today
CVSS changed
Jul 20, 2026 - 15:22 NVD
7.8 (HIGH)
Patch available
Jul 19, 2026 - 14:17 EUVD
CVE Published
Jul 19, 2026 - 12:02 cve.org
HIGH 7.8
CVE Published
Jul 19, 2026 - 12:02 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

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

apparmor: fix use-after-free in rawdata dedup loop

aa_replace_profiles() walks ns->rawdata_list to dedup the incoming policy blob against entries already attached to existing profiles. Per the kernel-doc on struct aa_loaddata, list membership does not hold a reference: profiles hold pcount, and when the last pcount drops, do_ploaddata_rmfs() is queued on a workqueue that takes ns->lock and removes the entry. Between dropping the last pcount and the workqueue running, an entry remains on the list with pcount == 0.

aa_get_profile_loaddata() is an unconditional kref_get() on pcount, so when the dedup loop hits such an entry, refcount hardening reports

refcount_t: addition on 0; use-after-free.

inside aa_replace_profiles(), and the poisoned counter then trips "saturated" and "underflow" warnings on the subsequent uses of the same loaddata.

Before commit a0b7091c4de4 ("apparmor: fix race on rawdata dereference") the dedup path used a get_unless_zero-style helper on a single counter, so the existing "if (tmp)" guard was meaningful. The split-refcount refactor introduced aa_get_profile_loaddata(), which has plain kref_get() semantics, and the guard quietly became a no-op.

Introduce aa_get_profile_loaddata_not0(), matching the existing _not0 convention used by aa_get_profile_not0(), and use it for the rawdata_list dedup lookup so dying entries are skipped.

Reproduced on x86_64 with v7.1-rc5 in QEMU+KVM running Ubuntu 24.04 + stress-ng 0.17.06:

stress-ng --apparmor 1 --klog-check --timeout 60s

Without this patch the three refcount_t warnings fire within a few seconds. With it the same 60 s run is clean. Coverage is a smoke-test only; a longer soak with CONFIG_KASAN, CONFIG_KCSAN and CONFIG_PROVE_LOCKING would be welcome from anyone with the cycles.

AnalysisAI

Local privilege-escalation-class memory corruption in the Linux kernel's AppArmor LSM affects the policy-replacement path (aa_replace_profiles) across a wide span of stable branches (5.10 through 7.1). During the rawdata deduplication loop, aa_get_profile_loaddata() performs an unconditional kref_get() on struct aa_loaddata entries whose pcount has already dropped to zero but which remain briefly on ns->rawdata_list before the deferred do_ploaddata_rmfs() workqueue frees them, producing a refcount 'addition on 0' use-after-free. Exploitation requires local access with the ability to load AppArmor policy and winning a narrow race; there is no public exploit identified at time of analysis and EPSS risk is low (0.16%, 6th percentile).

Technical ContextAI

The affected component is AppArmor, a Linux Security Module used to confine processes via loadable policy profiles. The root cause is a lifetime/refcounting defect (CWE-416 Use-After-Free, though the NVD CWE field is N/A) in the split-refcount design of struct aa_loaddata: profiles hold a 'pcount' reference, and mere membership on ns->rawdata_list does NOT hold a reference. When the last pcount is dropped, do_ploaddata_rmfs() is queued on a workqueue that later takes ns->lock to unlink the entry, leaving a window where a pcount==0 object is still list-reachable. The regression was introduced by commit a0b7091c4de4 ('apparmor: fix race on rawdata dereference'), whose split-refcount refactor replaced a get_unless_zero-style single-counter helper with a plain kref_get() in aa_get_profile_loaddata(), silently neutering the existing 'if (tmp)' guard in the dedup path. The CPE data (cpe:2.3:a:linux:linux) identifies the mainline Linux kernel as the affected product; the fix adds aa_get_profile_loaddata_not0() following the existing _not0 convention so dying entries are skipped.

RemediationAI

Vendor-released patch: upgrade to a fixed stable kernel for your branch - 6.1.177, 6.6.144, 6.12.95, 6.18.38, or 7.1.3 (mainline 7.2-rc1), whichever matches your series, then reboot to activate the new kernel. On distributions, apply the corresponding distro kernel update (e.g. Ubuntu/SUSE security updates) rather than building from source. The fix commits are available at git.kernel.org (https://git.kernel.org/stable/c/6f060496d03e4dc560a40f73770bd08335cb7a27, https://git.kernel.org/stable/c/5e34fa9f6f7cd688ae153fff13139a5cf2d42339, https://git.kernel.org/stable/c/c3ca2631073b2cef06824fd2bfc452ff7a1023de). If you cannot patch immediately, the practical compensating control is to restrict who can load or replace AppArmor policy: ensure no untrusted or unprivileged users hold CAP_MAC_ADMIN and disallow unprivileged user-namespace policy loading, which removes the attacker's ability to reach aa_replace_profiles (side effect: legitimate confined-container tooling that reloads profiles will be blocked). Disabling AppArmor entirely also closes the path but removes all MAC confinement and is generally not advisable on Ubuntu/SUSE systems that depend on it.

Vendor StatusVendor

SUSE

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

Share

CVE-2026-63827 vulnerability details – vuln.today

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