Summary
| Field | Detail |
|---|---|
| CVE ID | CVE-2025-39964 |
| Component | Kernel: crypto AF_ALG socket API — the sendmsg write path shared by algif_skcipher and algif_aead (crypto/af_alg.c, include/crypto/if_alg.h) |
| Type | Race condition (CWE-362). Two threads issuing sendmsg() on the same AF_ALG socket run af_alg_sendmsg() concurrently with no exclusion. The interleaved updates to the per-socket transmit scatterlist (ctx->tsgl_list) leave it inconsistent: a writer that took an error exit with cur == 0 can underflow the scatterlist so a later entry is fabricated from kernel list pointers |
| Impact | Kernel heap out-of-bounds read and write: the bogus scatterlist entry is handed to the cipher on the read path (af_alg_pull_tsgl()), so a recvmsg() encrypts or decrypts arbitrary kernel memory back to userspace (disclosure), and memcpy_from_msg() on the underflowed entry writes attacker-controlled bytes to an attacker-influenced address (local privilege escalation). A bad page_link also oopses (DoS). Not remotely reachable |
| Upstream fix | 1b34cbbf4f01 (crypto: af_alg - Disallow concurrent writes in af_alg_sendmsg); first in v6.17 |
| Introduced | 8ff590903d5f in v2.6.38 (2011) — the original skcipher user-space interface has allowed unserialised concurrent writes from the start, so every kernel from 2.6.38 up to the fix is in-window |
| Affected window | 2.6.38 through 6.16 without the backport. Fixed in v6.17 and the 6.16 / 6.12 / 6.6 / 6.1 / 5.15 / 5.10 stable backports; 6.18, 7.0, 7.1, 7.2 and later branched after v6.17 and carry the fix from their first release (per-branch First fixed below). Distro kernels still need to adopt a fixed release or cherry-pick the fix |
| Discoverer | Muhammad Alifa Ramdhan and Bing-Jhong Billy Jheng (STAR Labs SG) |
| Public PoC | n1k0oowang/CVE-2025-39964_EXP — a third-party local-root exploit in C (offset-tuned per kernel; overwrites core_pattern) |
| KEV / EPSS / CVSS | In the CISA KEV catalog since 2026-09-18 (BOD 26-04 remediation due 2026-09-21); CISA’s SSVC marks exploitation active. Kernel CNA: CVSS 3.1 7.8 HIGH (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H), mirrored by NVD’s CNA metric. Red Hat: 5.5 Moderate, availability-only (C:N/I:N/A:H, draft) — see Risk notes. EPSS 0.79% (55th percentile) |
| Reachability | AF_ALG (the AF_ALG socket family, CONFIG_CRYPTO_USER_API_SKCIPHER / _AEAD), reachable by any unprivileged local user — bind() and setkey() on an AF_ALG socket perform no capability check, and the algif_skcipher / algif_aead modules autoload on demand. No CAP_*, container, or user namespace is required. The bug is local only and arch-independent. See Detection and Mitigation |
How the race works
The kernel’s cryptographic user API, AF_ALG, lets a user-space
process drive an in-kernel cipher over a socket: socket(AF_ALG, …),
bind() to an algorithm, sendmsg() to feed plaintext or ciphertext,
and recvmsg() to read the result. On the write side,
af_alg_sendmsg() appends the message’s pages to a per-socket transmit
scatterlist (a chain of struct af_alg_tsgl blocks) that the read side
later hands to the cipher.
Nothing serialised two sendmsg() calls on the same socket. A process
running two threads that both call sendmsg() on one socket runs
af_alg_sendmsg() twice at once against the same ctx. The two
executions interleave their updates to the scatterlist and the running
counters, so the list ends up describing something neither call
intended. In particular a writer that parks in
af_alg_wait_for_wmem() — which the attacker forces deterministically
by sizing SO_SNDBUF and filling it, then draining it with its own
recvmsg() — and then takes an error exit with the current entry count
cur == 0 leaves the scatterlist underflowed: the next append reads a
“previous” entry that does not exist and fabricates a scatterlist entry
out of adjacent kernel list pointers.
That fabricated entry is what turns a race into memory corruption. On
the read path af_alg_pull_tsgl() feeds it to skcipher_recvmsg() /
aead_recvmsg(), so the cipher operates on an attacker-chosen kernel
address and returns the result to userspace — a kernel memory
disclosure primitive, not merely a pointer leak. On a subsequent
write, memcpy_from_msg(page_address(sg_page(sg)) + sg->offset + sg->length, …) copies attacker-controlled bytes to an address derived
from the bogus entry — a controlled kernel write. Dereferencing the
bogus page_link, and the eventual put_page() on the fabricated page,
also reliably oops the machine.
The public PoC chains these into root the way several recent
kernel LPEs do: it grooms the 4 KB tsgl allocations, uses the
out-of-bounds write to overwrite /proc/sys/kernel/core_pattern with a
pointer to its own helper binary, and then crashes a process so the
kernel executes that helper as root.
The fix, 1b34cbbf4f01, adds a ctx->write flag that grants one
writer exclusive ownership of the socket for the duration of a
sendmsg(); a second concurrent write returns -EBUSY instead of
racing. Because AF_ALG is documented as single-stream, no legitimate
caller issues concurrent writes, so the change breaks nothing.
ℹ️ Old bug, not a regression. The unserialised write path dates from v2.6.38 (2011), when the skcipher AF_ALG interface was first added. There is no in-support kernel old enough to predate it: every kernel from 2.6.38 up to a fixed release is in-window. A kernel is safe only by carrying the
1b34cbbf4f01fix — not by being old.
Vulnerable commit range
| Commit | Role | Description |
|---|---|---|
8ff590903d5f | Introduced | crypto: algif_skcipher - User-space interface for skcipher operations (v2.6.38, 2011) — added the AF_ALG skcipher write path with no exclusion between concurrent sendmsg() calls; algif_aead later inherited the same shared code. |
1b34cbbf4f01 | Fixed | crypto: af_alg - Disallow concurrent writes in af_alg_sendmsg — adds a ctx->write exclusive-ownership flag so a second concurrent sendmsg() returns -EBUSY; first released in v6.17. |
The reachable lifetime runs from v2.6.38 through v6.16. No in-support kernel predates the flaw, so the only not-affected kernels are those that carry the fix.
Patch status
A row is Fixed only if its kernel carries the 1b34cbbf4f01
backport (or is a v6.17-or-later line that shipped with it); every
AF_ALG-capable kernel from 2.6.38 on without it is in-window and
Vulnerable. The first group is the upstream kernel; the rest are a
focused set of x86-64 distributions, with per-distribution detail in the
sections that follow. First fixed and Fixed since stay — until a
row is fixed.
| Distribution | Release | Current kernel | First fixed | Fixed since | Status |
|---|---|---|---|---|---|
| Linux kernel | mainline | 7.3-rc3 | 6.17-rc7 | 2025-09-21 | ✅ Fixed — carries 1b34cbbf4f01 |
| Linux kernel | 7.2.x | 7.2.6 | 7.2 | 2026-08-16 | ✅ Fixed — branched after v6.17 |
| Linux kernel | 6.18.x | 6.18.52 | 6.18 | 2025-11-30 | ✅ Fixed — LTS, branched after v6.17 |
| Linux kernel | 6.12.x | 6.12.110 | 6.12.49 | 2025-09-25 | ✅ Fixed — LTS |
| Linux kernel | 6.6.x | 6.6.157 | 6.6.108 | 2025-09-25 | ✅ Fixed — LTS |
| Linux kernel | 6.1.x | 6.1.188 | 6.1.154 | 2025-09-25 | ✅ Fixed — LTS |
| Linux kernel | 5.15.x | 5.15.221 | 5.15.194 | 2025-10-02 | ✅ Fixed — LTS |
| Linux kernel | 5.10.x | 5.10.270 | 5.10.245 | 2025-10-02 | ✅ Fixed — LTS |
| Debian | sid (unstable) | 7.2.6-1 | 6.16.9-1 | 2025-09-27 | ✅ Fixed |
| Debian | forky (testing) | 7.1.13-1 | 6.16.9-1 | 2025-10-04 | ✅ Fixed |
| Debian | 13 (trixie) | 6.12.107-1 | 6.12.57-1 | 2025-11-06 | ✅ Fixed |
| Debian | 12 (bookworm) | 6.1.187-1 | 6.1.158-1 | 2025-11-11 | ✅ Fixed — DSA-6053-1 |
| Debian | 12 (6.12 opt-in) | 6.12.107-1~deb12u1 | 6.12.100-1~deb12u1 | 2026-08-04 | ✅ Fixed |
| Debian | 11 (bullseye) | 5.10.262-1 | 5.10.247-1 | 2025-12-12 | ✅ Fixed — DLA-4404-1, LTS ended |
| Debian | 11 (6.1 opt-in) | 6.1.180-1~deb11u1 | 6.1.158-1~deb11u1 | 2025-11-25 | ✅ Fixed — DLA-4379-1, LTS ended |
| Proxmox VE | 9 (default) | 7.0.14-17 | 7.0.0 | 2026-05-21 | ✅ Fixed — branched after v6.17 |
| Proxmox VE | 9 (6.17 old) | 6.17.13-21 | 6.17.0 | 2025-10-06 | ✅ Fixed — branched after v6.17 |
| Proxmox VE | 8 (default) | 6.8.12-43 | 6.8.12-18 | 2025-12-15 | ✅ Fixed |
| NixOS | master | 6.18.52 | 6.12.49 | 2025-09-25 | ✅ Fixed |
| NixOS | release-26.05 | 6.18.52 | 6.18.29 | 2026-05-11 | ✅ Fixed |
| NixOS | Unstable | 6.18.52 | 6.12.49 | 2025-09-29 | ✅ Fixed |
| NixOS | Unstable (small) | 6.18.52 | 6.12.49 | 2025-09-26 | ✅ Fixed |
| NixOS | Unstable (nixpkgs) | 6.18.52 | 6.12.49 | 2025-09-27 | ✅ Fixed |
| NixOS | 26.05 | 6.18.52 | 6.18.29 | 2026-05-25 | ✅ Fixed |
| NixOS | 26.05 (small) | 6.18.52 | 6.18.29 | 2026-05-24 | ✅ Fixed |
| Rocky Linux / RHEL | 10 | 6.12.0-211.56.1.el10_2.0.1 | — | — | ❌ Vulnerable — no RHSA yet |
| Rocky Linux / RHEL | 9 | 5.14.0-687.49.1.el9_8 | — | — | ❌ Vulnerable — no RHSA yet |
| Rocky Linux / RHEL | 8 | 4.18.0-553.164.1.el8_10 | — | — | ❌ Vulnerable — no RHSA yet |
| Amazon Linux | 2023 (default) | 6.1.186-228.376 | 6.1.155-176.282 | 2025-10-14 | ✅ Fixed — ALAS2023-2025-1223 |
| Amazon Linux | 2023 (6.12 opt-in) | 6.12.103-129.197 | 6.12.53-69.119 | 2025-10-27 | ✅ Fixed — ALAS2023-2025-1254 |
| Amazon Linux | 2023 (6.18 opt-in) | 6.18.48-109.150 | 6.18.15-14.217 | 2026-03-30 | ✅ Fixed — stream born after v6.17 |
Linux kernel
The fix reached Linus in v6.17 — the commit landed on the mainline
tree at v6.17-rc7 (tagged 2025-09-21), through the crypto tree. The
stable backports followed almost at once: 6.1.154, 6.6.108,
6.12.49 and 6.16.9 on 2025-09-25, then 5.15.194 and
5.10.245 on 2025-10-02 — each the same fix by subject, confirmed
present on its linux-*.y branch. Every branch created after v6.17 —
6.18, and the 7.0 / 7.1 / 7.2 / 7.3 lines — carries the fix from
its first release, so those lines were never in-window.
6.16.y is fixed but end-of-life. The 6.16 line received the fix in 6.16.9 and reached end of life at 6.16.12 (2025-10-12); a 6.16 kernel at or above 6.16.9 carries the fix, and any host still on an earlier 6.16 build should move to a maintained line.
A companion commit, d0ca0df179c4 (crypto: af_alg - Fix incorrect
boolean values in af_alg_ctx, tracked as CVE-2025-40022), repairs a
1-bit-bitfield regression introduced by the fix and ships in the same or
the next stable release; a kernel carrying 1b34cbbf4f01 is fixed for
this CVE whether or not it also has that follow-up.
To check a tree directly: a fixed af_alg_sendmsg() (in
crypto/af_alg.c) tests and sets a ctx->write ownership flag and
returns -EBUSY when a second writer is already active; an unfixed one
has no such flag and no -EBUSY path.
Debian
Every Debian suite is fixed. sid and forky (testing) both crossed the fix when 6.16.9-1 migrated into testing, and have since advanced along the 7.x line. trixie (Debian 13) rides 6.12 and took the fix in a point-release kernel below the upstream 6.12.49 number; bookworm (Debian 12) rides 6.1 and was fixed by the DSA-6053-1 security update. The security tracker lists every suite as resolved.
bookworm also offers an opt-in newer kernel, the linux-6.12 source
package in bookworm-security (trixie’s kernel rebuilt for bookworm).
It was introduced well after the 6.12 branch’s fix, so every build of it
carries the fix.
bullseye (Debian 11) reached the end of its LTS window on 2026-08-31,
but received the fix before then: DLA-4404-1 fixed the default 5.10
kernel and DLA-4379-1 fixed the linux-6.1 opt-in (bookworm’s 6.1
kernel rebuilt for bullseye). Both rows are frozen at their final,
fixed builds; no further updates will come, so a host still on bullseye
should upgrade to bookworm or newer regardless.
Debian’s stock kernels build the AF_ALG interface as modules
(CONFIG_CRYPTO_USER_API_SKCIPHER=m, _AEAD=m), autoloaded on first
use, so an unpatched Debian kernel is reachable by any local user.
Proxmox VE
Proxmox ships its own Ubuntu-derived kernels, so Debian’s status does
not carry over. PVE 9’s default is the 7.0 kernel (since PVE 9.2,
2026-05-21), which branched after v6.17 and carries the fix; the former
9.1 default, the opt-in 6.17 kernel, is fixed for the same reason.
PVE 8’s default proxmox-kernel-6.8 is 6.8-based and in-window, but
took the fix through Ubuntu’s 6.8.0-90.91 rebase, so its current build
is fixed.
Both releases also still publish superseded kernel series that Proxmox
stopped updating. PVE 8’s proxmox-kernel-6.5 and -6.2, and its
bookworm-backports opt-in proxmox-kernel-6.11 (last built March
2025), predate the fix and will never receive it — a host booting any of
them stays vulnerable until it switches to its release’s current default
kernel. The 6.14 series that PVE 9.0 shipped and PVE 8 offers as a
backport did receive the fix (via Ubuntu’s 6.14.0-37.37) before Proxmox
stopped updating it, but it too is superseded; move up to the current
default.
Proxmox hosts run the AF_ALG interface like any Debian-derived system, so an unpatched node is reachable by any local user or unprivileged container account.
NixOS
Every tracked ref’s default linuxPackages is linux_6_18, well past
the fix, so every tracked ref is fixed — they differ only in when
each first shipped a fixed kernel. The fix first reached nixpkgs in late
September 2025 through the then-default 6.12 series (the 6.12.48 -> 6.12.49 bump on master), and every kernel series nixpkgs pins
(linux_6_12 down to linux_5_10) has been at or above its branch’s
first-fixed release since. The release-26.05 branch was cut in May
2026, already carrying a fixed default kernel.
Kernel updates land on nixpkgs master first, and each channel
publishes them once its Hydra jobset passes, so a channel can sit a few
days behind master. The -small channels (nixos-unstable-small,
nixos-26.05-small) are gated on a reduced jobset and pick up kernel
updates fastest. The master and release-26.05 rows are the git
branches the fix lands on directly; they are development branches, not
deployment targets.
Flake inputs map onto these directly.
github:NixOS/nixpkgs/nixos-unstable tracks the nixos-unstable
channel, and a bare github:NixOS/nixpkgs follows master. A bare
nixpkgs registry input resolves to nixpkgs-unstable, a separate
channel aimed at non-NixOS Nix users, which is not gated on the NixOS
tests and can hold a different kernel from nixos-unstable.
Rocky Linux / RHEL family
RHEL-family kernels are long-lived forks; all three in-support lines —
EL10 (6.12-based), EL9 (5.14-based), EL8 (4.18-based) — postdate the
v2.6.38 introduction and build the AF_ALG interface, so all are
in-window. Red Hat’s security data marks the kernel and kernel-rt
packages Affected for RHEL 7, 8, 9, and 10 with no fixed release and
no RHSA yet (RHEL 6 is Not affected), so every stream is vulnerable
pending an advisory. Red Hat scores the flaw lower than the kernel CNA
does — see Risk notes — which usually means the fix rides a regular
batch kernel update rather than an out-of-cycle one. The kernel-rt
real-time variant is listed Affected alongside the standard kernel and
will be fixed by the same advisories. Rocky rebuilds RHEL’s kernels
unchanged, so its fixes track Red Hat’s; AlmaLinux is typically the
fastest rebuild and the leading indicator. Oracle Linux and CloudLinux
track the RHEL determination.
Amazon Linux
All three AL2023 kernel streams are fixed: the default kernel
(6.1 line) in ALAS2023-2025-1223 and the opt-in kernel6.12 in
ALAS2023-2025-1254, while the opt-in kernel6.18 stream was
introduced after v6.17 and carries the fix from its first build (no ALAS
names this CVE for it). Amazon backports fixes into builds below the
upstream threshold, so the advisory, not a version compare, is the
verdict.
Amazon Linux 2 reached end of support on 2026-06-30, but was
fixed before then: the kernel-5.10 and kernel-5.15 Extras streams
took the fix in ALAS2KERNEL-5.10-2025-109 and
ALAS2KERNEL-5.15-2025-093 (both 2025-10-27). AL2 is no longer
tracked here; a host still on it should migrate to AL2023 for continued
updates.
Detection
Is the running kernel in the affected window and missing the fix? Every AF_ALG-capable kernel from 2.6.38 on is in-window; compare the running kernel against the Patch status table’s First fixed column for its series (distro builds below that number can still carry a backport — the table’s Status is the verdict):
uname -r
Is the AF_ALG interface built? The bug needs the cryptographic
user API. Almost every distribution enables it as modules
(algif_skcipher, algif_aead), autoloaded when a process binds an
AF_ALG socket:
grep CONFIG_CRYPTO_USER_API /boot/config-$(uname -r)
Can this user reach it right now? Any local user can open and bind an AF_ALG skcipher socket with no privilege; a success here means the path is reachable from an unprivileged shell:
python3 -c 'import socket; s=socket.socket(socket.AF_ALG,socket.SOCK_SEQPACKET,0); s.bind(("skcipher","cbc(aes)")); print("AF_ALG reachable")'
Are the modules already loaded? A loaded algif_* module means the
interface is in use; an unloaded one is not protection, since binding an
AF_ALG socket autoloads it:
lsmod | grep -E '^(af_alg|algif_)'
Mitigation
The real fix is a patched kernel (the 1b34cbbf4f01 backport).
Unlike the container-escape class of kernel LPEs, this bug needs no
capability and no namespace — every local user can reach AF_ALG
directly — so disabling unprivileged user namespaces does nothing
here. Until a fixed kernel is installed, the only lever is to take away
the AF_ALG interface itself, on hosts that do not use the kernel crypto
user API (most do not; userspace normally uses libcrypto/OpenSSL, not
AF_ALG).
Block the AF_ALG modules
Where nothing on the host uses the kernel crypto user API, block the
interface so the vulnerable code cannot load. This is Red Hat’s
recommended mitigation. Test first — cryptsetup, some IPsec setups, and
a few crypto-offload tools do use AF_ALG:
echo 'install algif_skcipher /bin/false' | sudo tee /etc/modprobe.d/cve-2025-39964.conf
Block the AEAD interface the same way, since it shares the vulnerable code:
echo 'install algif_aead /bin/false' | sudo tee -a /etc/modprobe.d/cve-2025-39964.conf
To cover every algorithm type at once, block the af_alg core module
instead, which the algif_* modules depend on:
echo 'install af_alg /bin/false' | sudo tee /etc/modprobe.d/cve-2025-39964.conf
Risk notes
- It is in the CISA KEV catalog with a same-week deadline. CISA added CVE-2025-39964 on 2026-09-18 with a BOD 26-04 remediation date of 2026-09-21 and marked exploitation active; Red Hat likewise notes known public exploits. Federal civilian agencies must remediate on that timeline, and every in-window multi-user host should be treated as a live target.
- A working public exploit exists. The PoC is a self-tuning
local-root exploit that overwrites
core_pattern; it uses hardcoded kernel offsets, so adapting it to a given kernel is grooming work, not research. - Reachable by any local user, with no capability.
bind()andsetkey()on an AF_ALG socket check no capability, and the modules autoload, so an ordinary shell account — including one inside an unprivileged container — can trigger the race. There is no namespace or capability mitigation; only a patched kernel or a blocked module closes it. - The severity scores diverge. The kernel CNA and NVD’s CNA metric rate this 7.8 HIGH, treating the corruption as a full confidentiality/integrity/availability break (kernel memory read, controlled write, LPE). Red Hat rates it 5.5 Moderate, availability-only — a difference in how completely each judges the scatterlist underflow to be weaponisable, not a disagreement about the bug. The public PoC’s controlled write supports the higher reading.
- No kernel is too old to be affected. The bug dates from v2.6.38 (2011). Every in-support distribution kernel is in-window and unsafe until it carries the backport.
Verification log
Every verdict in the table above is backed by a checkable source. This log records the provenance — the advisory, repository index, or git reference that established each fact — so any row can be audited or reproduced. Most readers never need it.
Full verification log
Upstream
- Fix commit (via
git showin~/src/linux/stable):1b34cbbf4f011a121ef7b2d7d6e6920a036d5285— crypto: af_alg - Disallow concurrent writes in af_alg_sendmsg.- Authored 2025-09-18 by Herbert Xu;
Reported-byMuhammad Alifa Ramdhan and Bing-Jhong Billy Jheng (STAR Labs SG). - Touches
crypto/af_alg.candinclude/crypto/if_alg.h. - Carries
Fixes: 8ff590903d5and merged for v6.17 viadcf7d9e0aee5(Merge tag ‘v6.17-p3’ … crypto-2.6). git describe --contains→v6.17-rc7~14^2.
- Introducing commit (via
git showin~/src/linux/stable):8ff590903d5fc7f5a0a988c38267a3d08e6393a2— crypto: algif_skcipher - User-space interface for skcipher operations.git describe --contains→v2.6.38-rc1~238^2~38;v2.6.38tagged 2011-03-14.
- Release tag dates (via
git log -1 --format=%cd <tag>in~/src/linux/stable):v6.17-rc7— 2025-09-21;v6.17— 2025-09-28.v6.1.154,v6.6.108,v6.12.49,v6.16.9— 2025-09-25.v5.15.194,v5.10.245— 2025-10-02.v6.18— 2025-11-30;v7.2— 2026-08-16 (both branched after v6.17, so born with the fix).
- Stable backports (via
git log origin/linux-<series>.y --grep='Disallow concurrent writes in af_alg_sendmsg'in~/src/linux/stable; one hit per branch with the fix’s own subject):- 6.16.y —
45bcf60fe49b. - 6.12.y —
9aee87da5572. - 6.6.y —
7c4491b5644e. - 6.1.y —
1f323a48e9b5. - 5.15.y —
e4c1ec11132e. - 5.10.y —
0f28c4adbc4a. - 6.16.y reached EOL at
v6.16.12(2025-10-12), after the fix.
- 6.16.y —
- Current point releases (via
https://www.kernel.org/finger_banner):- Current kernel for every
Linux kernelrow is read from the banner’s per-series line.
- Current kernel for every
- CVE record (via
git show origin/master:cve/published/2025/CVE-2025-39964.{dyad,json,cvss}in~/src/linux/vulns):- The dyad holds seven
2.6.38:8ff590903d5f:<fixed>pairs — 5.10.245, 5.15.194, 6.1.154, 6.6.108, 6.12.49, 6.16.9, and 6.17 (mainline) — matching the backports above. - The
.jsonlistscrypto/af_alg.candinclude/crypto/if_alg.has the affected files. - The
.cvssfile scores CVSS 3.1 7.8 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H), with a rationale describing the underflowed scatterlist, theaf_alg_pull_tsgl()disclosure primitive, and thememcpy_from_msg()controlled write.
- The dyad holds seven
- Scores and lists (via the NVD 2.0 API, Red Hat’s hydra
securitydataJSON, the FIRST EPSS API, and the CISA KEV feed):- NVD (record Analyzed): the CNA metric is 7.8; NVD’s own metric is
5.5 (
C:N/I:N/A:H). - Red Hat:
cvss3_base_score5.5 (AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H), statusdraft;threat_severityModerate. - EPSS 0.0079 (percentile 0.547).
- CISA KEV:
dateAdded2026-09-18,dueDate2026-09-21,knownRansomwareCampaignUseUnknown,cwesCWE-362; cve.org’s CISA-ADP SSVC block records Exploitation active.
- NVD (record Analyzed): the CNA metric is 7.8; NVD’s own metric is
5.5 (
- Public exploit (via the GitHub API):
n1k0oowang/CVE-2025-39964_EXP— a C exploit (exploit.c) created 2025-11-13; it hardcodespage_offset_base/vmemmap_base/core_patternoffsets and roots the host by overwriting/proc/sys/kernel/core_pattern.
Distributions
- Debian (via the security tracker JSON, the dak madison API, the
DSA/DLA advisories, and snapshot.debian.org):
- Tracker:
sid,forky,trixie, andbookwormall resolved; base fixed version 6.16.9-1 (sid/forky), 6.12.57-1 (trixie), 6.1.158-1 (bookworm). - sid Fixed since:
first_seenof6.16.9-1on snapshot.debian.org, 2025-09-27 (the upload to unstable). - forky Fixed since:
linux 6.16.9-1 MIGRATED to testing, 2025-10-04 (package news) — the migration date, later than sid’s upload. - trixie Fixed since:
first_seenof6.12.57-1on snapshot.debian.org, 2025-11-06. - bookworm Fixed since: DSA-6053-1, 2025-11-11 (fixed version 6.1.158-1).
- bookworm 6.12 opt-in:
linux-6.12inbookworm-security; first appeared at6.12.100-1~deb12u1,first_seen2026-08-04, already past the 6.12 branch fix. - bullseye (LTS ended 2026-08-31): DLA-4404-1 (2025-12-12) fixed
the 5.10 kernel at 5.10.247-1; DLA-4379-1 (2025-11-25) fixed the
linux-6.1opt-in at 6.1.158-1~deb11u1. Current cells are the finalbullseye-securitybuilds. - Current kernel per suite is the madison version of
linux(-securitywhere one exists), oflinux-6.12inbookworm-security, and oflinux/linux-6.1inbullseye-security.
- Tracker:
- Proxmox VE (via
pve-no-subscriptionPackages.gz, the~/src/proxmox/pve-kernelchangelogs, the PVE roadmap, and Ubuntu’s CVE JSON):proxmox-default-kerneldepends onproxmox-kernel-7.0on the current PVE 9 (default 7.0 since PVE 9.2, 2026-05-21) and onproxmox-kernel-6.8on PVE 8.- Current kernel is the highest
proxmox-kernel-<series>metapackage version inpve-no-subscription. - 7.0 and 6.17 branched after v6.17, so both carry the fix; the 6.17
series first shipped at
6.17.0-1(2025-10-06). - PVE 8 6.8:
debian/changelogonorigin/bookworm-6.8shows update source and patches to Ubuntu-6.8.0-90.91 at6.8.12-18, 2025-12-15; Ubuntu fixed 6.8 at6.8.0-90.91. - Series stopped before the fix (no row): PVE 8
proxmox-kernel-6.11(last built 2025-03-16),-6.5, and-6.2.
- NixOS (via
channels.nixos.org/<channel>/git-revision→kernels-org.jsonin~/src/nixos/nixpkgs,packageAliases.linux_defaultinlinux-kernels.nix, andscripts/nixos-first-shipped):linux_defaultislinux_6_18on bothmasterandrelease-26.05.- The fix first entered nixpkgs through the
linux_6_12: 6.12.48 -> 6.12.49bump0d28f1e37baaonmaster, committed 2025-09-25 (then the default series). - First channel release containing that bump:
nixos-unstable-small2025-09-26,nixpkgs-unstable2025-09-27,nixos-unstable2025-09-29. release-26.05was cut 2026-05-11 already carrying a fixed 6.18 default; its channels first published 2026-05-24 (-small) and 2026-05-25.- Current kernel per row is the
6.18entry ofkernels-org.jsonat that ref.
- Rocky Linux / RHEL (via Red Hat’s hydra
securitydataJSON and the Rocky BaseOSx86_64primary.xml.gz):package_state:kernelAffected on RHEL 7, 8, 9, and 10, andkernel-rton RHEL 7, 8, and 9 (RHEL 10 has nokernel-rt); RHEL 6 Not affected.affected_releaseis empty — no RHSA.threat_severityModerate; mitigation is to blacklist theaf_algmodule.- Current kernel per release is the highest
kernelver/relinprimary.xml.gz, compared by RPM rules.
- Amazon Linux (via the AL2023 and AL2 repodata
primary.xml.gzandupdateinfo.xml.gz, parsed withscripts/alas-cve):- Streams present on AL2023:
kernel(6.1),kernel6.12,kernel6.18. alas-cve CVE-2025-39964:ALAS2023-2025-1223(2025-10-14,kernel6.1.155-176.282) andALAS2023-2025-1254(2025-10-27,kernel6.126.12.53-69.119).kernel6.18stream: no advisory names this CVE (born after v6.17); its earliest published build in the repodata is 6.18.15-14.217 (ALAS2023-2026-1514, 2026-03-30), used as its Fixed since.- Current kernel is the highest
ver-relper stream. - AL2 Extras (EOL 2026-06-30):
ALAS2KERNEL-5.10-2025-109andALAS2KERNEL-5.15-2025-093, both 2025-10-27.
- Streams present on AL2023:
References
| Source | URL |
|---|---|
| CISA KEV catalog | https://www.cisa.gov/known-exploited-vulnerabilities-catalog |
| CVE record (cve.org) | https://www.cve.org/CVERecord?id=CVE-2025-39964 |
| NVD entry | https://nvd.nist.gov/vuln/detail/CVE-2025-39964 |
| Kernel fix | https://github.com/torvalds/linux/commit/1b34cbbf4f011a121ef7b2d7d6e6920a036d5285 |
| Introducing commit | https://github.com/torvalds/linux/commit/8ff590903d5fc7f5a0a988c38267a3d08e6393a2 |
| Public PoC | https://github.com/n1k0oowang/CVE-2025-39964_EXP |
| BOD 26-04 | https://www.cisa.gov/news-events/directives/bod-26-04-prioritizing-security-updates-based-risk |
| stable point release banner | https://www.kernel.org/finger_banner |
| Debian security tracker | https://security-tracker.debian.org/tracker/CVE-2025-39964 |
| Ubuntu security tracker | https://ubuntu.com/security/CVE-2025-39964 |
| Red Hat CVE page | https://access.redhat.com/security/cve/CVE-2025-39964 |
| Amazon Linux ALAS | https://alas.aws.amazon.com/ |