FR
live
Networking Critical CVSS 9.8

SCTPhantom, the 18-Year-Old Linux SCTP Flaw That Hands Attackers Root and Breaks Container Isolation

A use-after-free bug in the Linux kernel’s SCTP stack, dormant for 18 years and now tracked as CVE-2026-64564, lets a local attacker escalate to root and escape containers. Patches landed August 4, 2026 — kernel updates are not optional.

SCTPhantom vulnerability in the Linux kernel — ETTAYEB illustration

On August 4, 2026, the TencentOS Security Team disclosed CVE-2026-64564, a Linux kernel vulnerability now called SCTPhantom. The vulnerable code was introduced in Linux 2.6.25, shipped in December 2007 — it took nearly 18 years to find. The flaw yields local privilege escalation to root and, more critically, reliable container-to-host escape. It was validated against Ubuntu 24.04, Debian 13, Rocky Linux 9, and kernels from 5.14 up through a 7.2 release candidate, earning a CVSS 4.0 score of 8.5.

The culprit is SCTP (Stream Control Transmission Protocol), a lesser-known TCP cousin designed for telecom signaling that almost nobody uses — but nearly everyone compiles into their kernel anyway.

An Identity Mismatch Inside ASCONF

The bug lives in SCTP’s Dynamic Address Reconfiguration feature, defined by RFC 5061. This extension lets an SCTP association add, remove, or reconfigure network paths on the fly via ASCONF chunks. The address-deletion logic (DEL-IP) validates the delete operation using the packet’s source address, while a separate cached pointer relies on the address parameter that was used to select the actual network transport.

A local attacker can craft an ordered ASCONF sequence: specify an address, request its deletion, then send a wildcard delete. The kernel removes the corresponding transport, but a stale pointer remains in the association’s active path and primary path fields. A subsequent socket operation dereferences this freed memory — the use-after-free condition is live.

TencentOS researchers, armed with their autonomous vulnerability-hunting system Corvus AI, turned this raw memory bug into a full exploit chain. Their approach reclaims the freed transport using a packet socket ring buffer, which leaks a kernel memory address in the process. That leak enables a repeatable four-byte kernel read, used to defeat KASLR by inspecting the interrupt descriptor table (IDT).

A second use-after-free is then triggered with attacker-controlled SCTP authentication key data, constructing a fake kernel object graph that ultimately calls commit_creds — granting global root, all without shellcode or a traditional ROP chain.

Container Escape Is the Real Threat

The most troubling demonstration is the container escape. By using per-socket SCTP options instead of system-wide sysctls, the exploit avoided needing elevated capabilities. It broke out of containers running default seccomp profiles in six out of eight attempts, ultimately triggering a usermode-helper process executing in the host’s initial namespace.

For a multi-tenant Kubernetes node, this means a single compromised container lets an attacker pivot to every other workload on that node, then to the host itself.

The affected surface is broad because SCTP is enabled by default in virtually every distribution kernel. The good news: the fix was merged upstream as commit 9b2854f86f0b and backported to stable branches 6.6.148, 6.12.101, 6.18.42, and 7.1.6.

Immediate Action Plan

ContextPriority Action
Kernel < 6.6.148Update immediately — exploitable without special capabilities
Kernel 6.12.xUpgrade to ≥ 6.12.101
Kernel 7.xUpgrade to ≥ 7.1.6
Multi-tenant Kubernetes nodesApply patch + audit seccomp profiles
Shared bare-metal serversCritical priority — any local user can become root

If you cannot update immediately, disable the sctp module (modprobe -r sctp then blacklist it in /etc/modprobe.d/) if your workload allows. In Kubernetes, deploy a PodSecurityPolicy or seccomp profile that blocks SCTP syscalls (socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)).

SCTPhantom surfaces an uncomfortable truth: the Linux kernel’s networking code is a living museum. Every protocol you leave compiled in “just in case” is an attack surface that can sleep for two decades. Configuration minimalism is not an aesthetic preference — it is a security policy.

References

cve

Linked vulnerabilities

CVE-2026-64564In the Linux kernel, the following vulnerability has been resolved: sctp: don't free the ASCONF's own transport in DEL-IP processing sctp_process_asconf() caches the transport the ASCONF chunk is processed against in asconf->transport (== chunk->transport, set once in sctp_rcv()). For an ASCONF located through its Address Parameter by __sctp_rcv_asconf_lookup(), that cached transport corresponds to the Address Parameter, which need not be the packet's source address. sctp_process_asconf_param() rejects a DEL-IP for the packet source address (ADDIP D8, SCTP_ERROR_DEL_SRC_IP), but nothing protects asconf->transport. A single ASCONF can therefore carry, in order: [Address Parameter L] [DEL-IP L] [DEL-IP 0.0.0.0] where L differs from the source. The DEL-IP for L passes the D8 check and calls sctp_assoc_rm_peer() on the transport that asconf->transport still points at, freeing it (RCU-deferred). The following wildcard DEL-IP then reuses the now-dangling asconf->transport in sctp_assoc_set_primary() and sctp_assoc_del_nonprimary_peers(): set_primary() dereferences the freed transport (->ipaddr, ->state) and plants the dangling pointer into asoc->peer.primary_path / active_path, and del_nonprimary_peers(), keeping only the pointer that is no longer on the list, removes every real transport, leaving the association with a transport_count of 0 and primary_path/active_path pointing at freed memory. Reject a DEL-IP that targets the transport the ASCONF is being processed against, mirroring the existing source-address guard, so the wildcard branch can never reuse a freed transport. Critical CVSS 9.8 04/08

The cyber brief, every Tuesday

The flaws that matter and the patches to apply, in a ten-minute read.

No spam. One-click unsubscribe.
read next

On the same topic

BIND 9 patches 14 flaws that enable DNS cache poisoning and DNSSEC bypass

On 16 September 2026, ISC shipped BIND 9.20.29 and 9.21.26, fixing 14 vulnerabilities including DNS cache-poisoning flaws and DNSSEC-validation bypasses. Upgrade exposed recursive resolvers and lock down recursion before a forged response redirects your users.

Two unpatched Citrix NetScaler zero-days are exploited with no fix published

watchTowr has documented two remote-code-execution zero-days in Citrix NetScaler ADC and Gateway, already exploited before any fix existed. With nothing published by Citrix, the only defense is isolation: preserve evidence, cut the appliance off the network and keep management off the internet.

← Back to the feed

Type at least two characters.

↑ ↓ navigate ↵ open esc dismiss