diff --git a/docs/EXPLOITED.md b/docs/EXPLOITED.md index 4af6b4d..a0b8613 100644 --- a/docs/EXPLOITED.md +++ b/docs/EXPLOITED.md @@ -239,6 +239,23 @@ Followed the full methodology (test → confirm kernel → pull PoC → diff): same shape — real trigger/groom scaffolds returning `EXPLOIT_FAIL` by design. The resolver fix unblocks feeding them offsets; each still needs its arb-write primitive completed against a matching vulnerable kernel. + +**`netfilter_xtcompat` (CVE-2021-22555) — empirical note on why the primitives are +hard.** Attempted the corpus's *most tractable* primitive first: it has a clean, +well-regarded single-file public exploit (Andy Nguyen / Google, the `IPT_SO_SET_ +REPLACE` heap-OOB → `msg_msg` cross-cache → cred overwrite). Kernel confirmed +vulnerable (Ubuntu 20.04 GA 5.4.0-26, and a provisioned mainline 5.8.0 — both pre +the 5.4.0-77 / 5.8.0-53 fix). **But the reference exploit consistently fails at +STAGE 1 ("could not corrupt any primary message") on both**, because it is tuned +for *Ubuntu's exact `5.8.0-48-generic` config* (the tested target). The slab +behaviour that governs whether the OOB write lands next to a sprayed `msg_msg` +(freelist randomisation, memcg kmem accounting, SLUB merge) differs between +mainline and Ubuntu-patched kernels, and Ubuntu's EOL `5.8.0-48` HWE debs are no +longer readily sourceable. Takeaway: kernel primitives are **config-and-version- +specific exploit-dev** — even a "drop-in" reference exploit needs its exact target +kernel image plus per-target slab tuning, and then a full port (~760 LOC here, +~2000 for `nf_tables`/Notselwyn). This is a per-primitive, multi-session effort; +it is NOT the "spot the bug and fix it" tier the userspace modules were. - **Structural userspace** (`sudoedit_editor`, `sudo_chwoot`, `sudo_host`): need specific sudo versions + sudoers config; likely tractable. - **2026 CVEs** (`copy_fail` ×5, `dirtydecrypt`, `fragnesia`, `cifswitch`, diff --git a/docs/VERIFICATIONS.jsonl b/docs/VERIFICATIONS.jsonl index cba8d26..75e42bf 100644 --- a/docs/VERIFICATIONS.jsonl +++ b/docs/VERIFICATIONS.jsonl @@ -57,3 +57,4 @@ {"module":"dirty_pipe","verified_at":"2026-07-24T02:49:00Z","host_kernel":"5.16.0-051600-generic (mainline, pre-5.16.11 fix)","host_distro":"Ubuntu 22.04 userspace","vm_box":"jammy-cloudimg + mainline 5.16.0/qemu-kvm","verified_kind":"exploit","exploit_result":"EXPLOIT_OK","root_witness":"out-of-band: skeletonkey --exploit dirty_pipe (uid 1000) planted root-owned proof + -rwsr-xr-x root:root setuid bash; /etc/passwd left byte-identical (root:x:0:0) after revert. Fixed 3 bugs: false EXPLOIT_OK, wrong escalation (was flipping own UID + su self), and drop_caches revert that corrupted running passwd. New technique: root passwd-field hash + su over pty + Dirty-Pipe revert.","status":"working"} {"module":"dirty_cow","verified_at":"2026-07-24T03:22:00Z","host_kernel":"4.8.0-040800-generic (mainline, pre-4.8.3 Dirty COW fix)","host_distro":"Ubuntu 16.04.7","vm_box":"xenial-cloudimg + mainline 4.8.0/qemu-kvm","verified_kind":"exploit_standalone","exploit_result":"EXPLOIT_OK","root_witness":"out-of-band on a genuinely Dirty-COW-vulnerable kernel: standalone binary built from the module verbatim (dirty_cow_write primitive + find_pw_field_offset + robust poll/timeout dc_su_root_run + exploit body) — race won, su root via pty, planted root-owned proof + -rwsr-xr-x root:root setuid bash, /etc/passwd byte-identical after revert. Confirms the fix (correct escalation, OOB verify, safe revert, readback[512], robust su) lands real root end-to-end. Full skeletonkey binary would not build on xenials 4.4-era uapi headers (unrelated nft_* modern constants).","status":"working"} {"module":"overlayfs","verified_at":"2026-07-24T03:36:00Z","host_kernel":"5.4.0-26-generic","host_distro":"Ubuntu 20.04.0","vm_box":"focal-cloudimg/qemu-kvm","verified_kind":"exploit","exploit_result":"EXPLOIT_OK","root_witness":"out-of-band: skeletonkey --exploit overlayfs (uid 1000) — the cap_setuid payload now drops a root-owned proof + -rwsr-xr-x root:root setuid bash; module reports OK only after stat() confirms uid==0. Upgraded from getxattr proxy to direct witness.","status":"working"} +{"module":"netfilter_xtcompat","verified_at":"2026-07-24T04:00:00Z","host_kernel":"5.4.0-26-generic + mainline 5.8.0","host_distro":"Ubuntu 20.04.0","vm_box":"focal-cloudimg (+mainline 5.8.0)/qemu-kvm","verified_kind":"reference_poc_attempt","exploit_result":"REFERENCE_POC_TARGET_MISMATCH","root_witness":"none. CVE-2021-22555 kernel confirmed vulnerable (5.4.0-26 and mainline 5.8.0, both pre-fix). Andy Nguyen public exploit consistently fails STAGE 1 (could not corrupt any primary message) on both mainline kernels — it is tuned for Ubuntu 5.8.0-48-generics exact slab config (freelist-random/memcg). Confirms primitives need exact-target kernel+config + per-target tuning, not drop-in.","status":"primitive_needs_exact_target_kernel"}