
Kit didattico e difensivo per due LPE di corruzione della page cache di Linux (DirtyClone CVE-2026-43503, pedit COW CVE-2026-46331): hardening, rilevamento, verifica, seccomp + harness di validazione. Solo rilevamento e prevenzione — nessun codice di exploit. TLP:CLEAR.
Rileva, contieni e verifica le difese contro due escalation dei privilegi locali su Linux dovute alla corruzione della page-cache — DirtyClone (CVE-2026-43503) e pedit COW (CVE-2026-46331) — su host e container.
Questo è un kit di sicurezza educativo e difensivo. Spiega come funzionano entrambe le vulnerabilità a livello di syscall e include strumenti di hardening, rilevamento, verifica e seccomp — oltre a un harness di validazione che dimostra che gli strumenti funzionano su kernel reali. Non contiene exploit, shellcode o offset target, di proposito.
Entrambe le CVE consentono a un utente locale non privilegiato di diventare root corrompendo la page cache (la copia in RAM) di un binario con setuid root come /usr/bin/su — senza toccare mai il file su disco. Questo le rende furtive: il monitoraggio dell'integrità dei file rimane verde, la forense del disco non trova nulla e la corruzione si azzera al riavvio.
La vera soluzione è applicare la patch al kernel. Ma durante la finestra di distribuzione — e successivamente come difesa in profondità — devi chiudere i percorsi d'attacco, osservare la catena d'attacco e verificare la tua postura. È ciò che offre questo kit, con ogni controllo ricondotto a un passo documentato della catena dell'exploit, così puoi vedere perché funziona.
Entrambi i bug appartengono alla stessa classe di difetti: il kernel scrive in un buffer che ritiene privato mentre quel buffer è ancora supportato da memoria page-cache condivisa e basata su file. Due porte strutturali governano ogni variante di entrambe le catene:
| Porta | Cos'è | Efficacia come controllo |
|---|---|---|
| 1. Percorso delle capability | CAP_NET_ADMIN ottenuta tramite namespace utente non privilegiati (unshare(CLONE_NEWUSER|CLONE_NEWNET)) | Robusto punto di strozzatura — ogni variante deve passare da qui, nota e sconosciuta. Chiudilo per primo. |
| 2. Superficie dei moduli | Moduli vulnerabili: act_pedit, esp4/esp6, rxrpc, xt_TEE, nf_dup_ipv4/nf_dup_ipv6 | Difesa in profondità — rimuove solo le primitive note; un sink inedito lo aggirerebbe. |
Corretto a monte nelle release puntuali stabili (DirtyClone ≥ 6.12.91 / 7.0.10; pedit COW 6.12.94 / 7.0.13) più i backport dei vendor; il mainline 7.1 è definitivo. Verifica il tuo kernel sul tracker della tua distribuzione — vedi docs/analysis.md §8.
Solo host Linux. Questi script leggono e scrivono lo stato reale del kernel. Esegui l'hardening su un host che controlli; esegui l'harness di validazione distruttivo su una VM monouso. Vedi Requisiti.
# 1. Preview the host containment changes (writes nothing)
sudo ./kit/harden-pagecache-lpe.sh --dry-run
# 2. Apply userns restrictions + vulnerable-module blocks
sudo ./kit/harden-pagecache-lpe.sh
# 3. Verify posture — run the functional probe as an UNPRIVILEGED user
sudo -u nobody ./kit/verify-pagecache-lpe.sh # exit: 0=PASS 1=WARN 2=FAIL
# 4. (Optional) Watch the attack chain live with eBPF
sudo bpftrace ./kit/detect-pagecache-lpe.bt
Per i container, applica l'overlay seccomp (kit/seccomp-pagecache-lpe.json):
docker run --security-opt seccomp=kit/seccomp-pagecache-lpe.json <image>
Nuovo qui? Leggi START-HERE.md — un percorso guidato, in stile lezione, dalla causa principale fino a una run di validazione completa.
.
├── START-HERE.md Guided walkthrough — the recommended entry point
├── docs/ The "why": analysis and operator guidance
│ ├── analysis.md Root-cause analysis, attack chains, detection engineering
│ ├── HARDENING-GUIDE.md Operator containment guide (host → systemd → Docker → Kubernetes)
│ └── plain-language-summary.md Gentler, plain-English overview of both bugs
├── kit/ The "what you run": four self-contained artifacts
│ ├── harden-pagecache-lpe.sh Apply host containment (sysctl + module blocks)
│ ├── verify-pagecache-lpe.sh Read-only posture check (PASS/WARN/FAIL)
│ ├── detect-pagecache-lpe.bt bpftrace/eBPF telemetry for the staging chain
│ └── seccomp-pagecache-lpe.json Container seccomp overlay denying the chain's syscalls
└── testkit/ The "proof": validation harness + SHOWCASE.md writeup
| Componente | Ruolo |
|---|---|
docs/analysis.md | Fonte di verità: causa principale, catene d'attacco comportamentali, ingegneria del rilevamento, hardening, tabella comparativa. |
docs/HARDENING-GUIDE.md | Contenimento a più livelli per host, unità systemd, Docker/Podman e Kubernetes. |
kit/ | I quattro artefatti. Copia questa directory su un host per difenderlo. |
testkit/ | Validazione riproducibile su kernel reali (Docker locale + EC2 monouso) e SHOWCASE.md — una valutazione onesta di cosa i test dimostrano e cosa non dimostrano. |
harden, verify): un host Linux con bash, sysctl, modprobe e unshare. È richiesto root per l'hardening; esegui la sonda di verifica come utente non root.detect-pagecache-lpe.bt): richiede root, bpftrace ≥ 0.16 e kernel BTF (/sys/kernel/btf/vmlinux). Alcuni kprobe potrebbero essere inline su un dato kernel — l'intestazione dello script spiega come adattarsi.testkit/): una VM Linux monouso — scrive configurazione reale e rimuove i moduli del kernel. Il launcher EC2 richiede AWS CLI v2 e jq; non viene usato SSH (il trasporto è AWS SSM). Gli utenti macOS possono eseguire lo smoke test Docker locale, ma la validazione completa richiede Linux.TLP:CLEAR — distribuzione pubblica, senza restrizioni. Questo repository è solo rilevamento e prevenzione. Include deliberatamente:
…ed esclude deliberatamente: