diff --git a/README.md b/README.md index 443e09f..cd4ff65 100644 --- a/README.md +++ b/README.md @@ -205,7 +205,7 @@ also compile (modules with Linux-only headers stub out gracefully). ## Status -**v0.9.7 cut 2026-06-01.** 41 modules across 36 CVEs — **every +**v0.9.8 cut 2026-06-02.** 41 modules across 36 CVEs — **every year 2016 → 2026 now covered**. Newest: `ptrace_pidfd` (CVE-2026-46333, Qualys's `__ptrace_may_access` / `pidfd_getfd` credential-steal) and `sudo_host` (CVE-2025-32462, Stratascale's sudo `--host` policy bypass). diff --git a/docs/RELEASE_NOTES.md b/docs/RELEASE_NOTES.md index d8d05f7..d7d0053 100644 --- a/docs/RELEASE_NOTES.md +++ b/docs/RELEASE_NOTES.md @@ -1,3 +1,36 @@ +## SKELETONKEY v0.9.8 — two new LPE modules (ptrace_pidfd, sudo_host) + +Adds the two most compelling recent Linux LPEs not already in the corpus, +taking it to **41 modules / 36 CVEs** (every year 2016 → 2026 still +covered). + +**`ptrace_pidfd` — CVE-2026-46333** (Qualys TRU, 2026-05-20). A logic +flaw in the kernel's `__ptrace_may_access()` path leaves a process that +is *dropping* its credentials briefly reachable past its `dumpable` +boundary; `pidfd_getfd(2)` rides that window to steal a root-opened file +descriptor or authenticated channel from a transiently-privileged setuid +binary (chage / pkexec / ssh-keysign) or root daemon. Default-distro, no +userns, architecture-agnostic (descriptor theft, no shellcode). detect() +is version-pinned (predates-gate at pidfd_getfd's 5.6 introduction; +Debian backports 5.10.251 / 6.1.172 / 6.12.88 / 7.0.7). `--mitigate` +sets `kernel.yama.ptrace_scope=2`. + +**`sudo_host` — CVE-2025-32462** (Rich Mirch / Stratascale, 2025-06-30; +sibling of v0.8.0's `sudo_chwoot`). sudo's `-h`/`--host` option, meant +only to pair with `-l`, was honored when running a command — so a +sudoers rule scoped to a host other than the current machine (and not +ALL) is usable via `sudo -h ` for local root. Affects sudo +1.8.8 → 1.9.17p0 (fixed 1.9.17p1); CWE-863, CVSS 8.8. Most relevant to +fleet-wide / LDAP / SSSD sudoers. + +Both are honest ports: detect() is version-pinned and unit-tested (10 new +detect() rows, all green in CI), and exploit() fires the real primitive +and returns `EXPLOIT_FAIL` unless it can witness euid 0 — never +fabricating root. Neither is VM-verified yet (both flagged "sweep +pending" in `tools/verify-vm/targets.yaml`), so the verified count stays +28 of 36. Each ships auditd + sigma + falco rules, MITRE ATT&CK + CWE +metadata, and credits the original researcher in its `NOTICE.md`. + ## SKELETONKEY v0.9.7 — kernel_range drift fix + CI Node 24 readiness Two maintenance fixes, no new modules. diff --git a/docs/index.html b/docs/index.html index d7baafe..cfbb936 100644 --- a/docs/index.html +++ b/docs/index.html @@ -56,7 +56,7 @@
- v0.9.7 — released 2026-06-01 + v0.9.8 — released 2026-06-02

SKELETONKEY @@ -600,7 +600,7 @@ uid=0(root) gid=0(root) who found the bugs.

diff --git a/skeletonkey.c b/skeletonkey.c index bfcbaf9..d3320e9 100644 --- a/skeletonkey.c +++ b/skeletonkey.c @@ -35,7 +35,7 @@ #include #include -#define SKELETONKEY_VERSION "0.9.7" +#define SKELETONKEY_VERSION "0.9.8" static const char BANNER[] = "\n"