Skip to main content

Linux Kernel CVE-2026-53259

| EUVDEUVD-2026-39210 HIGH
Use After Free (CWE-416)
2026-06-25 416baaa9-dc9f-4396-8d5f-8c081fb06d67 GHSA-hqjh-c323-5jv8
7.8
CVSS 3.1 · Vendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Share

Severity by source

Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67) PRIMARY
7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI
7.0 HIGH

Local access with low privilege (CAP_NET_ADMIN via user namespace) is needed, and the trigger is a narrow multi-CPU race so AC:H; a kernel UAF yields high C/I/A.

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:L/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/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
7.0 MEDIUM
qualitative

Primary rating from Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67).

CVSS VectorVendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

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
Jun 28, 2026 - 09:46 vuln.today
CVSS changed
Jun 28, 2026 - 08:22 NVD
7.8 (HIGH)
Patch available
Jun 25, 2026 - 10:32 EUVD
CVE Published
Jun 25, 2026 - 09:16 cve.org
HIGH 7.8
CVE Published
Jun 25, 2026 - 09:16 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

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

ipv6: anycast: insert aca into global hash under idev->lock

syzbot reported a splat [1]: a slab-use-after-free in ipv6_chk_acast_addr(), which walks the global inet6_acaddr_lst[] hash under RCU and dereferences a struct ifacaddr6 that has already been freed while still linked in the hash, so a later reader walks into a dangling node.

In __ipv6_dev_ac_inc() the aca is allocated with refcount 1, then aca_get() bumps it to 2 to keep it alive across the unlocked region. It is published to idev->ac_list under idev->lock, but ipv6_add_acaddr_hash() runs after write_unlock_bh(). A concurrent teardown (ipv6_ac_destroy_dev() from addrconf_ifdown(), under RTNL) can slip into that window:

CPU0 __ipv6_dev_ac_inc CPU1 ipv6_ac_destroy_dev (RTNL) ------------------------------ ------------------------------------ aca_alloc() refcnt 1 aca_get() refcnt 2 write_lock_bh(idev->lock) add aca to ac_list write_unlock_bh(idev->lock) write_lock_bh(idev->lock) pull aca off ac_list write_unlock_bh(idev->lock) ipv6_del_acaddr_hash(aca) hlist_del_init_rcu() is a no-op, aca is not in the hash yet aca_put() refcnt 2->1 ipv6_add_acaddr_hash(aca) aca now inserted into the hash aca_put() refcnt 1->0 call_rcu(aca_free_rcu) -> kfree(aca)

The hash removal becomes a no-op because the insertion has not happened yet, so once CPU0 inserts and drops the last reference, the aca is freed while still linked in inet6_acaddr_lst[], and readers dereference freed memory after the slab slot is reused.

This window opened once RTNL stopped serializing the join path against device teardown. Move ipv6_add_acaddr_hash() inside the idev->lock section so the ac_list and hash insertions are atomic with respect to teardown: a racing remover now either misses the aca entirely or finds it in both lists.

acaddr_hash_lock is now nested under idev->lock, which is acquired in softirq context, so switch all acaddr_hash_lock sites to spin_lock_bh() to avoid the irq lock inversion reported in [2].

[1] https://syzkaller.appspot.com/bug?extid=a01df04303c131efbf3a [2] https://lore.kernel.org/netdev/6a194ef7.ba3b1513.1890b4.0000.GAE@google.com/

AnalysisAI

Memory corruption via a use-after-free in the Linux kernel's IPv6 anycast subsystem allows a local attacker to read freed slab memory and potentially corrupt kernel state. The flaw lives in __ipv6_dev_ac_inc()/ipv6_add_acaddr_hash(), where an ifacaddr6 (aca) object is published into the global inet6_acaddr_lst[] hash outside idev->lock, opening a race with device teardown (ipv6_ac_destroy_dev) that frees the object while it is still linked in the RCU-walked hash. EPSS is low (0.16%, 6th percentile) and there is no public exploit identified at time of analysis, but the vendor has shipped a fix.

Technical ContextAI

The affected technology is the kernel IPv6 networking stack, specifically anycast address management. Anycast group membership is tracked per-device on idev->ac_list (protected by idev->lock) and globally in the inet6_acaddr_lst[] hash, which is walked lockless under RCU by readers such as ipv6_chk_acast_addr(). The bug is a classic use-after-free (CWE-416): in __ipv6_dev_ac_inc() the aca is allocated with refcount 1, bumped to 2 via aca_get(), added to ac_list under idev->lock, but then inserted into the global hash only after write_unlock_bh(). A concurrent ipv6_ac_destroy_dev() can pull the aca off ac_list and call ipv6_del_acaddr_hash() - whose hlist_del_init_rcu() is a no-op because the hash insert has not yet happened - then drop a reference. When CPU0 finally inserts into the hash and drops the last reference, call_rcu(aca_free_rcu) frees the object while it remains linked in the global hash, so RCU readers dereference freed memory after the slab slot is reused. The window opened once RTNL stopped serializing the anycast join path against device teardown. The fix moves the hash insertion inside the idev->lock section so ac_list and hash insertion are atomic with respect to teardown, and converts acaddr_hash_lock sites to spin_lock_bh() to avoid an IRQ lock inversion. No CWE was assigned in the source data, but the description unambiguously describes a use-after-free.

RemediationAI

Vendor-released patch: upgrade to Linux 6.18.36, 7.0.13, or 7.1, or later within your maintained branch; distribution users should apply the corresponding distro kernel update that backports stable commits 15be7e9fdbff831fb3e89b83cc337a4f85ad3310, 3a967c498baa976b11d4800dda224c507416e97c, or f723ccaff2fb72b71ae8a9fd283f0dee4d9ae7a3 (see https://git.kernel.org/stable/c/f723ccaff2fb72b71ae8a9fd283f0dee4d9ae7a3 and the sibling commits). Because the trigger requires the ability to add/remove IPv6 anycast addresses and to race device teardown, an interim compensating control is to restrict unprivileged access to network configuration: disable unprivileged user namespaces (sysctl kernel.unprivileged_userns_clone=0 or user.max_user_namespaces=0) so untrusted local users cannot obtain CAP_NET_ADMIN in a private netns - note this can break container runtimes and sandboxed applications that rely on user namespaces. Reducing churn of IPv6-enabled interfaces and limiting local shell access to untrusted users further narrows the race window, but these are mitigations only; patching is the reliable fix.

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 Performance Computing 15 SP7 Not-Affected

Share

CVE-2026-53259 vulnerability details – vuln.today

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