CVE
CVE-2026-64564
CWE
CWE-416
Affected Surface
- Linux kernel SCTP implementations from the `2.6.25` introduction of the vulnerable sequence through the first fixed stable lines: `< 6.6.148`, `6.7.x < 6.12.101`, `6.13.x < 6.18.42`, `6.19.x < 7.1.6`, and mainline before `7.2-rc5`
- Developer workstations, self-hosted CI runners, shared engineering hosts, and container platforms where untrusted local code can execute and the SCTP attack surface is present or loadable
- Linux distributions publicly validated by the researchers, including Debian 13 (`6.12.95+deb13-amd64`), Ubuntu 24.04 (`6.8.0-134-generic`), and Rocky Linux 9 / RHEL 9-family targets with SCTP loaded
- Container environments where the shared host kernel is vulnerable and workloads can reach the SCTP trigger path; the published tests retained the default seccomp profile and did not require `CAP_NET_ADMIN` or `CAP_SYS_ADMIN` for the container-escape variant
CVE-2026-64564, nicknamed SCTPhantom by its discoverers, is the most important Linux application-security story published in the last three days because it turns “already have local code execution” into host root and, in the published research chain, container-to-host escape. That matters directly to AppSec teams even though the bug is not in npm or PyPI: a malicious package, compromised build step, or workstation foothold often starts with an unprivileged shell. This kernel bug is what can turn that shell into control of the machine underneath.
The strongest public sources are the 6 August oss-security disclosure and Tencent Zhuque Lab’s deep technical write-up. Together they move this issue from “fresh CVE metadata” into “concrete, reproducible exploit chain” territory. The researchers did not stop at a crash. They showed a path from an SCTP transport lifetime bug to a direct-map leak, a kernel read primitive, a commit_creds() trigger, and a container escape on real distribution targets.
What is affected
The affected project is the Linux kernel, specifically SCTP Dynamic Address Reconfiguration handling in the SCTP stack. Machine-readable vulnerability feeds now reflect the same stable-line cutovers called out in the kernel announcement:
| Upstream line | First fixed release |
|---|---|
2.6.25 through 6.6.x | 6.6.148 |
6.7.x through 6.12.x | 6.12.101 |
6.13.x through 6.18.x | 6.18.42 |
6.19.x through 7.1.x | 7.1.6 |
| mainline | 7.2-rc5 |
The public validation set matters because it shows this was not only exercised on a custom kernel:
- Debian 13:
6.12.95+deb13-amd64 - Ubuntu 24.04:
6.8.0-134-generic - Rocky Linux 9 / RHEL 9-family target: vendor
5.14kernel with SCTP loaded
As always with Linux CVEs, vendor backports matter more than a naked uname -r string. But those fixed releases are still the right first triage boundary for AppSec teams managing Linux developer fleets, CI runners, and container hosts.
Root cause: the ASCONF chunk frees the transport it still plans to use
The bug sits in how Linux processes SCTP ASCONF chunks that carry both an Address Parameter and one or more DEL-IP operations. The vulnerable sequence is:
[Address Parameter L] [DEL-IP L] [DEL-IP 0.0.0.0]
The important detail is that the packet source and the transport selected through the Address Parameter do not have to be the same identity. Public disclosure describes the failure mode this way:
- the kernel caches the transport chosen for the ASCONF chunk in
asconf->transport - a
DEL-IPfor addressLpasses the existing source-address guard sctp_assoc_rm_peer()removes and frees that same transport- a later wildcard
DEL-IPstill reuses the now-danglingasconf->transport - stale pointers end up living in
primary_pathandactive_path
Tencent’s write-up reduces the bug to the mismatch between “the address we validated” and “the transport pointer we kept using.” The upstream fix is correspondingly small and precise:
peer = sctp_assoc_lookup_paddr(asoc, &addr);
if (!peer)
return SCTP_ERROR_DNS_FAILED;
if (peer == asconf->transport)
return SCTP_ERROR_REQ_REFUSED;
sctp_assoc_rm_peer(asoc, peer);
That new guard matters because it blocks the exact transport object the wildcard branch would later reuse. In other words, the patch is not generic cleanup. It closes the specific identity mismatch the exploit requires.
Why the exploit chain is serious
The most valuable part of the public research is that it does not stop at proving a kernel oops. The published chain is:
surviving SCTP transport UAF
-> reclaimed by pg_vec allocation
-> direct-map page disclosure
-> repeatable 4-byte kernel read
-> IDT-based KASLR recovery
-> second UAF reclaim with controlled SCTP auth-key data
-> data-oriented commit_creds()
-> global root
-> usermode-helper variant
-> container-to-host escape
Two exploit-engineering details make this especially relevant to defenders:
- The first use-after-free becomes an information leak, not just a crash. Tencent shows how a reclaimed
pg_vecarray inkmalloc-1024can be reinterpreted bySCTP_STATUS, disclosing a kernel direct-map address for a page that is also mapped in attacker-controlled userspace. - The final privilege jump does not require shellcode in kernel text. The published chain reuses existing kernel code and pivots into
commit_creds()through a controlled object graph.
That is why the write-up should be taken seriously by AppSec teams. This is a practical second-stage privilege amplifier for Linux hosts that already let an attacker run code locally.
Container escape is part of the story, not a footnote
The container result is what pushes this beyond a normal local Linux root bug for many engineering organizations. The researchers state that the retained escape test:
- kept the default seccomp profile,
- did not grant
CAP_NET_ADMIN, - did not grant
CAP_SYS_ADMIN, - reached host root in six of eight attempts.
Their final escape path uses the same kernel compromise primitives and then pivots through call_usermodehelper_exec() so the host performs an operation in the initial namespaces:
container SCTP trigger
-> host-kernel UAF
-> direct-map disclosure + kernel read
-> controlled kernel object graph
-> call_usermodehelper_exec()
-> process runs in the host's initial namespaces
-> host-root side effect
For AppSec teams running self-hosted runners, internal build farms, or containerized developer sandboxes, that is the right mental model: a package compromise that “only” lands code in a container may still have a credible path to the host kernel.
Why this belongs in a software-supply-chain research library
Kernel bugs like CVE-2026-64564 are part of the software-supply-chain story whenever the first-stage foothold is delivered through software distribution:
- a malicious npm package runs during install on a Linux workstation
- a poisoned PyPI package lands on a self-hosted runner
- a compromised GitHub Actions step reaches a build container
- a vulnerable internal service yields unprivileged code execution on a shared engineering host
In each case, the kernel becomes the boundary that decides whether the blast radius stays local or becomes full-machine compromise. CVE-2026-64564 is important precisely because the public exploit chain shows how small the jump can be once local code execution already exists.
Detection and scoping
Start with the running kernel and whether SCTP is even present on the host:
uname -r
lsmod | rg '^sctp'
modinfo sctp 2>/dev/null
Then verify whether your vendor kernel has already backported the fix:
rpm -q --changelog kernel | rg 'CVE-2026-64564|sctp: don.t free the ASCONF'
apt changelog "linux-image-$(uname -r)" 2>/dev/null | \
rg 'CVE-2026-64564|sctp: don.t free the ASCONF'
For container-heavy fleets, scope the systems where all of the following are true:
- workloads can execute less-trusted code locally
- the shared host kernel is on an affected line or backport status is unknown
- SCTP is available, loadable, or required by local workloads
- compromise of the host would materially widen access to secrets, registries, or source repositories
Because the public chain is kernel-local rather than process-local, endpoint telemetry that only watches application crashes is weak evidence. Treat package, CI, and workstation compromise investigations on vulnerable Linux hosts as potential kernel incidents too.
Remediation
Patch to a vendor kernel that includes the SCTP fix and reboot into it. Do not stop at package installation or an updated changelog entry; confirm the running kernel is remediated.
If SCTP is not needed, reducing or removing that attack surface is a sensible interim control while patching rolls out. But the practical response should still assume this is a real privilege-escalation path, not a theoretical parser bug:
- prioritize developer Linux endpoints and self-hosted CI runners, not only production servers
- verify vendor backport status instead of relying only on version strings
- treat post-package-compromise investigations on vulnerable Linux hosts as possible root compromises
The broad AppSec lesson is simple: when a supply-chain or CI incident gives an attacker local code execution on Linux, the next question should always be which kernel-level privilege amplifiers still exist. For the last three days, CVE-2026-64564 is the clearest example of why that question matters.
From research to remediation
Check whether this pattern exists in your codebase
Turn this research into a remediation workflow. Scan dependencies and package manifests for similar supply-chain risk, then prioritize fixes with reachability context.