
Shell-Skript zur Erkennung der CVE-2026-31431-Exposition (Copy Fail) und der Gegenmaßnahmen auf Linux-Systemen: Kernel-Prüfung, Modulstatus, Boot-Parameter, AF_ALG-Erreichbarkeit und Patch-Status der Distribution.
Shell-Skripte zur Erkennung von Linux-Kernel-Schwachstellen, Prüfung des Mitigationsstatus und Anleitung zur Behebung – entwickelt für den lokalen Einsatz oder für Flotten per SSH, Ansible oder pssh.
Copy Fail ist eine lokale Privilege-Escalation-Schwachstelle (LPE) mit hohem Schweregrad im kryptografischen Modul algif_aead des Linux-Kernels. Ein 2017 eingeführter Logikfehler erlaubt es jedem nicht privilegierten lokalen Benutzer, 4 kontrollierte Bytes in den Page Cache einer beliebigen lesbaren Datei zu schreiben – genug, um ein setuid-Binary zu überschreiben und Root-Zugriff zu erlangen. Ein funktionierender 732-Byte-Python-Proof-of-Concept existiert und ist öffentlich verfügbar.
| CVE | CVE-2026-31431 |
| CVSS | 7.8 (Hoch) |
| Offengelegt | 29. April 2026 |
| Betroffen | Linux-Kernel 4.13 – 6.x (2017–2026) |
| Distributionen | Ubuntu, RHEL, SUSE, Debian, Amazon Linux und die meisten anderen |
| Remote ausnutzbar | Nein – lokaler Zugriff erforderlich |
| Patch verfügbar | Teilweise – prüfen Sie die Advisories Ihrer Distribution |
| Prüfung | Root erforderlich? |
|---|---|
| Kernel-Version – ob Sie im betroffenen Bereich liegen (≥ 4.13) | Nein |
algif_aead-Modul – geladen, auf der Festplatte vorhanden oder blockiert | Nein |
Boot-Parameter – Vorhandensein von initcall_blacklist=algif_aead_init | Nein |
| AF_ALG-Socket-Erreichbarkeit – ob der Exploit-Pfad offen ist | Nein |
| SELinux-Status | Nein |
| AppArmor-Status | Ja – ohne Root nur teilweise Ausgabe |
| Patch-Status der Distribution – CVE im Kernel-Changelog aufgeführt | Nein |
Root ist nicht erforderlich, um das Skript auszuführen – alle Prüfungen außer dem AppArmor-Status funktionieren als regulärer Benutzer. Die Ausführung mit
sudowird für vollständige Ergebnisse empfohlen und ist die sicherere Wahl beim Piping voncurl.
Das Skript ist für den Einsatz auf allen gängigen Linux-Distributionen ausgelegt:
| Distributionsfamilie | Paketmanager-Prüfung | Modulpfad |
|---|---|---|
| Debian, Ubuntu | dpkg + Kernel-Changelog | /lib/modules/ |
| RHEL, CentOS, Amazon Linux | rpm (kernel, kernel-rt) | /lib/modules/ |
| SUSE, openSUSE | rpm (kernel-default) | /lib/modules/ |
| Arch Linux | pacman + Advisory-Link | /usr/lib/modules/ |
| Fedora | rpm + /usr/lib/modules/-Fallback | /usr/lib/modules/ |
Erfordert
bash– das Skript verwendet bash-spezifische Syntax und läuft nicht untersh,ashoderdash. Installieren Sie auf Alpine Linux (das standardmäßig busybox ash verwendet) zuerst bash:apk add bash
Ohne Root – die meisten Prüfungen funktionieren:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | bash
Mit Root – vollständige Ergebnisse inklusive AppArmor-Status:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash
Tipp: Fixieren Sie in der Produktion einen bestimmten Commit-SHA, damit sich das Skript nicht unter Ihnen ändern kann:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/COMMIT_SHA/check_copyfail.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh -o check_copyfail.sh
less check_copyfail.sh
bash check_copyfail.sh # ohne Root
sudo bash check_copyfail.sh # vollständige Ergebnisse
SSH-Schleife
for HOST in server1 server2 server3; do
echo "=== $HOST ==="
ssh "$HOST" "curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash"
done
Ansible
- name: Check Copy Fail vulnerability
hosts: all
tasks:
- name: Run check script
script: check_copyfail.sh
become: yes
Paralleles SSH
pssh -h hosts.txt -i \
"curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash"
============================================================
Copy Fail CVE-2026-31431 – Vulnerability Check
============================================================
>>> Kernel Version
[INFO] Running kernel: 5.15.0-107-generic
[WARN] Kernel 5.15.0-107-generic is in the affected range (4.13 – 6.x).
>>> algif_aead Module Status
[WARN] algif_aead module is currently LOADED — system is exploitable.
[WARN] Module file found at: /lib/modules/5.15.0-107-generic/kernel/crypto/algif_aead.ko
[WARN] algif_aead is NOT blacklisted — it can be loaded on demand.
>>> Kernel Boot Parameter Mitigation
[WARN] initcall_blacklist=algif_aead_init is NOT set in boot parameters.
>>> AF_ALG Socket Reachability
[WARN] AF_ALG sockets are reachable by this user — exploit path is open.
>>> Mandatory Access Control (SELinux / AppArmor)
[WARN] Neither SELinux nor AppArmor tools detected — no MAC layer present.
>>> Distribution Patch Status
[WARN] Could not confirm CVE-2026-31431 is listed as fixed in running kernel's changelog.
============================================================
SUMMARY
============================================================
!! LIKELY VULNERABLE — No confirmed mitigation detected.
Recommended actions (in order of preference):
1. Apply your distro's kernel update as soon as available.
2. Add to /etc/modprobe.d/copyfail.conf:
blacklist algif_aead
install algif_aead /bin/true
Then run: sudo depmod -a && sudo update-initramfs -u
3. Add to kernel boot parameters (grub):
initcall_blacklist=algif_aead_init
4. Immediately unload the module if loaded:
sudo rmmod algif_aead
============================================================
Wenden Sie diese in der Reihenfolge der Präferenz an:
1. Kernel patchen (beste Lösung)
# Debian / Ubuntu
sudo apt update && sudo apt upgrade linux-image-$(uname -r)
# RHEL / CentOS / Amazon Linux
sudo yum update kernel
# SUSE
sudo zypper update kernel-default
2. Modul blockieren (sofort, dauerhaft)
sudo tee /etc/modprobe.d/copyfail.conf << 'EOF'
blacklist algif_aead
install algif_aead /bin/true
EOF
sudo depmod -a
# Debian/Ubuntu
sudo update-initramfs -u
# RHEL/Fedora
sudo dracut -f
3. Modul jetzt entladen (sofort, nicht dauerhaft über Neustarts hinweg)
sudo rmmod algif_aead
4. Kernel-Boot-Parameter (Alternative zur Blockliste)
Fügen Sie initcall_blacklist=algif_aead_init zu Ihrer GRUB-Konfiguration hinzu und starten Sie neu.
MIT – frei verwendbar, ohne Gewährleistung. Überprüfen Sie Skripte immer, bevor Sie sie als Root ausführen.