
cve-2026-46331-audit script
Nur-Lese-Audit-Skript für CVE-2026-46331 (auch bekannt als pedit COW) — ein partieller Copy-on-Write-Fehler in der Linux-Kernel-Aktion net/sched act_pedit, der es einem lokalen nicht privilegierten Benutzer ermöglicht, Page-Cache-Speicher zu beschädigen und Root-Rechte zu erlangen.
____ _____ ____ ___ _____ ____ _____ __
| _ \| ____| _ \_ _|_ _| / ___/ _ \ \ / /
| |_) | _| | | | | | | | | | | | | \ \ /\ / /
| __/| |___| |_| | | | | | |__| |_| |\ V V /
|_| |_____|____/___| |_| \____\___/ \_/\_/
CVE-2026-46331 net/sched act_pedit partial COW
tcf_pedit_act() berechnet den COW-Bereich für skb_ensure_writable() einmal vor der Schlüsselschleife, unter Verwendung von tcfp_off_max_hint. Typisierte Schlüssel fügen einen Header-Offset zur Laufzeit hinzu, den der Hint nicht abdeckt, sodass ein Teil der letztendlichen Schreiboperation außerhalb des COW-Bereichs landet. Ergebnis: Gemeinsam genutzte Page-Cache-Seiten werden überschrieben, und ein zwischengespeichertes setuid-Binary (klassisches Ziel: /bin/su) kann im Speicher vergiftet werden. Hashes auf der Festplatte bleiben sauber. Datei-Integritätsmonitore werden es nicht sehen.
Gleiche Bug-Familie wie Dirty COW (CVE-2016-5195), Dirty Pipe (CVE-2022-0847), Copy Fail (CVE-2026-31431) und Dirty Frag (CVE-2026-46300). Der Einstiegspunkt ist anders, der Seitenbesitz-Fehler ist derselbe.
Streng auf Lesen beschränkte Triage. Lädt nie ein Modul, berührt nie sysctl, führt nie einen PoC aus. Entwickelt, um sicher auf Produktionssystemen ausgeführt zu werden.
act_pedit-Erreichbarkeit über vier unabhängige Signale:
lsmod)modinfo)/boot/config-$(uname -r), /proc/config.gz, modules.builtin)blacklist oder install ... /bin/true-Override in modprobe.d blockierttc action pedit-Regeln auf (informativ; keine Änderungen).user.max_user_namespaces, kernel.unprivileged_userns_clone und die Ubuntu-AppArmor-userns-Einschränkungen.sudo ./cve-2026-46331-audit.sh # vollständiger Textbericht
sudo ./cve-2026-46331-audit.sh --json # maschinenlesbares JSON, kein Banner
sudo ./cve-2026-46331-audit.sh --quiet --no-hunt # einzeiliges Urteil für Massenscans
sudo ./cve-2026-46331-audit.sh --since 2026-06-01 # IoC-Scan-Fenster erweitern
sudo ./cve-2026-46331-audit.sh --no-banner # Textbericht ohne ASCII-Banner
Siehe examples/sample-output.txt für einen vollständigen Lauf und examples/sample-output.json für die JSON-Form.
Der Wert ist eine gewichtete Kombination aus:
Gedeckelt bei 100. Alles über ~70 sollte auf Multi-Tenant-/CI-/Kubernetes-Knoten als dringend behandelt werden; unter ~20 ist meist eine Bestätigung, dass der Host in Ordnung ist.
ansible -i inventory all -m script \
-a "cve-2026-46331-audit.sh --json --quiet --no-hunt" \
--become \
| tee /tmp/audit.jsonl
Dann aggregieren mit jq:
grep -v '^[a-z]' /tmp/audit.jsonl | jq -s 'group_by(.verdict) | map({verdict: .[0].verdict, hosts: length})'
- name: CVE-2026-46331 prüfen
ansible.builtin.script: cve-2026-46331-audit.sh --quiet --no-hunt
register: audit
failed_when: audit.rc == 2
changed_when: false
In der Reihenfolge der Präferenz. Das Skript empfiehlt die richtige basierend auf dem, was es gefunden hat.
# Option 1: act_pedit blockieren, falls Sie es nicht verwenden.
tc actions list action pedit # MUSS leer sein, bevor dies ausgeführt wird
echo 'install act_pedit /bin/true' | sudo tee /etc/modprobe.d/disable-act_pedit.conf
lsmod | grep -q act_pedit && sudo rmmod act_pedit
# Option 2: Nichtprivilegierte User Namespaces einschränken.
# Unterbricht rootless Podman/Docker, Browser-Sandboxen, Flatpak, unprivilegiertes unshare, einige CI-Sandboxen.
sudo sysctl -w user.max_user_namespaces=0 # EL-Familie
sudo sysctl -w kernel.unprivileged_userns_clone=0 # Debian/Ubuntu
Die wirkliche Lösung ist ein Hersteller-Kernel-Update plus ein Neustart. uname -r nach dem Neustart ist das einzige, was es beweist.
Dies ist die fünfte Iteration desselben architektonischen Versagens. Jede behob die unmittelbare Ursache, keine behob die Grundursache: Zero-Copy-Schnellpfade, die Seiten gemeinsam über Eigentumsgrenzen hinweg nutzen, bei denen jeder Schreiber die Privatsphäre nachweisen muss, bevor er Bytes ändert, an Hunderten von Aufrufstellen.
Rust im Kernel adressiert genau diese Klasse durch Eigentumstypen. Es wird morgen nicht in net/sched auftauchen.
MIT. Siehe LICENSE.
Für autorisierte defensive Nutzung auf Systemen, die Ihnen gehören oder für die Sie ausdrücklich eine Prüfungserlaubnis haben. Das Skript führt niemals den öffentlichen PoC aus, ändert nie den Systemzustand und lädt nie Module. Behandeln Sie das Urteil als Triage, nicht als Nachweis einer Kompromittierung oder Sicherheit.
| CVE | CVE-2026-46331 |
| Komponente | Linux-Kernel net/sched / act_pedit |
| Klasse | Partielles COW → Page-Cache-Korruption → LPE |
| Angriffsvektor | Lokal (CAP_NET_ADMIN, normalerweise über nicht privilegiertes userns erworben) |
| Upstream betroffen | 5.18 .. 7.1-rc6 |
| Upstream-Fix | 7.1-rc7 |
| Öffentlicher PoC | packet_edit_meme (verifiziert RHEL 10, Debian 13, Ubuntu 24.04.4) |
| Red Hat-Schweregrad | Wichtig |
| SUSE CVSS 3.1 | 7.8 (AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H) |
/etc/os-releaseauditd und journalctl (konfigurierbares Fenster via --since).PATCHED / NOT_APPLICABLE / MITIGATED / VULNERABLE / UNKNOWN.| Code | Bedeutung |
|---|
| 0 | PATCHED oder NOT_APPLICABLE (Kernel vor dem Fehler) |
| 1 | MITIGATED (Maßnahme aktiv, Kernel weiterhin anfällig, trotzdem patchen) |
| 2 | VULNERABLE (eine oder mehrere erforderliche Vorbedingungen erfüllt, kein gefixter Kernel) |
| 3 | UNKNOWN (als verdächtig behandeln in gemeinsam genutzten / CI / Kubernetes-Umgebungen) |
| 4 | ERROR (Skript konnte nicht ausgeführt werden; fehlende Tools oder schlechte Umgebung) |
| Signal | Gewicht |
|---|
Herstellerurteil VULNERABLE | +50 |
Herstellerurteil UNKNOWN | +30 |
act_pedit in Kernel eingebaut | +25 |
act_pedit ladbar, kein Override | +20 |
act_pedit ladbar, Override aktiv | +5 |
act_pedit derzeit geladen | +5 |
| Nichtprivilegiertes userns erreichbar, kein AppArmor-Gate | +15 |
| Nichtprivilegiertes userns erreichbar, AppArmor-Gate aktiv | +8 |
| IoCs im Scan-Fenster gefunden | +10 |
| CVE | Jahr | Subsystem | Primitiv |
|---|
| CVE-2016-5195 | 2016 | mm | COW-Race auf schreibgeschützter Zuordnung |
| CVE-2022-0847 | 2022 | pipe / splice | pipe_buffer-Flag-Leck in Page-Cache |
| CVE-2026-31431 | 2026 | crypto AF_ALG/AEAD | In-Place-Krypto über schreibgeschütztem Dateicache |
| CVE-2026-46300 | 2026 | XFRM ESP-in-TCP | Verlust der skbuff-Shared-Frag-Markierung |
| CVE-2026-46331 | 2026 | net/sched act_pedit | Partielles COW durch spät aufgelösten typisierten Schlüssel-Offset |