Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
copyfail — C-basierter lokaler Privilege-Escalation-Exploit für CVE-2026-31431, eine Schwachstelle im Linux-Kernel in der AF_ALG-Krypto-Schnittstelle, die über die Manipulation des Page Cache Root-Zugriff ermöglicht. | Kitploit
Tools/GitHubGitHub/polyakovavv/copyfail
Privilege EscalationExploit-FrameworksSchwachstellenanalyseExploitationLernen & BildungBinary-Exploitation
GitHubpolyakovavv/copyfail

copyfail

C-basierter lokaler Privilege-Escalation-Exploit für CVE-2026-31431, eine Schwachstelle im Linux-Kernel in der AF_ALG-Krypto-Schnittstelle, die über die Manipulation des Page Cache Root-Zugriff ermöglicht.

Repository anzeigen
9vor 4 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Überblick

Copy Fail (CVE-2026-31431) — eine logische Schwachstelle im Linux-Kernel, die es einem lokalen, nicht privilegierten Benutzer ermöglicht, seine Rechte auf Superuser-Ebene (root) zu erhöhen. Die Schwachstelle gehört zur Klasse Local Privilege Escalation (LPE), erfordert keine komplexen Ausführungsbedingungen (wie Race Conditions oder Speicheradressen-Raten) und funktioniert "out of the box" auf den meisten Linux-Distributionen, die nach 2017 veröffentlicht wurden.

Dieses Repository enthält einen Port des ursprünglichen Python-Exploits in die Sprache C mit ausführlichen Kommentaren, geeignet für statische Kompilierung und den Einsatz in minimalen Umgebungen.


Inhalt

  • Schwachstelle
    • Wesen der Schwachstelle
    • Exploit-Mechanismus
    • Betroffene Systeme
  • Exploit
    • Besonderheiten des C-Ports
    • Kompilierung
    • Verwendung
  • Wie es funktioniert
    • Schritt-für-Schritt-Analyse
    • Warum sich der Seitencache ändert
  • Behebung der Schwachstelle

Schwachstelle

Wesen der Schwachstelle

Die Schwachstelle entsteht durch einen logischen Fehler in der kryptografischen Subsystem des Linux-Kernels, der mit der Verarbeitung von AF_ALG (Schnittstelle der kryptografischen Kernel-API) und dem Mechanismus des Seitencaches (Page Cache) zusammenhängt.

Der Fehler wurde 2017 bei der Hinzufügung einer Optimierung eingeführt, die eine überflüssige Pufferung durch die Ausführung von AEAD-Blockverschlüsselungsoperationen (Authenticated Encryption with Associated Data) an Ort und Stelle (in-place) entfernte. Aufgrund einer fehlerhaften Behandlung der Puffergrenzen im Algorithmus authencesn (Teil der kryptografischen AEAD-Vorlage) kommt es zu einem Schreibzugriff von 4 Bytes über die Grenzen des zugewiesenen Puffers hinaus, was zur Beschädigung der Verwaltungsstrukturen des Seitencaches führt.

Infolgedessen kann der Kernel Daten zurück in den Seitencache einer Datei schreiben, selbst wenn diese nur zum Lesen geöffnet wurde (O_RDONLY).

Exploit-Mechanismus

  1. Ein nicht privilegierter Benutzer öffnet einen AF_ALG-Socket und initialisiert den AEAD-Algorithmus authencesn(hmac(sha256),cbc(aes)).
  2. Über setsockopt() werden anomale Parameter gesetzt:
    • Ein Schlüssel in speziellem Format (Manipulation der Kernel-Puffer).
    • Authentifizierungs-Tag-Größe = 4 Bytes (statt der normalen 16–32 Bytes für HMAC-SHA256).
  3. Über sendmsg() mit Control Messages wird eine Entschlüsselungsoperation initiiert.
  4. Der Systemaufruf splice() verschiebt Daten aus der Zieldatei (geöffnet mit O_RDONLY) in den Krypto-Socket.
  5. Aufgrund des Fehlers in authencesn wird der Seitencache der Datei beschädigt, und die "entschlüsselten" Daten werden zurück in den Cache geschrieben.
  6. Der Kernel führt die modifizierte setuid-Datei aus dem Seitencache aus, was zur Ausführung von Code mit root-Rechten führt.

Betroffene Systeme

KomponenteBeschreibung
Linux-KernelAlle Versionen von 2017 bis zur Einbeziehung des korrigierenden Patches
Subsystemcrypto (Modul algif_aead)
SchnittstelleAF_ALG — Benutzerzugriff auf die Kernel-Krypto-API
Systemaufrufsplice() in Verbindung mit AF_ALG-Sockets

Betroffene Distributionen (bei Verwendung von Kerneln mit geladenem Modul algif_aead):

  • Ubuntu (alle Versionen)
  • Debian (alle Versionen)
  • RHEL / CentOS / Rocky / Alma Linux
  • SUSE / openSUSE
  • Fedora
  • Arch Linux
  • Andere Distributionen auf Basis betroffener Kernel

Besondere Bedeutung: In Container-Umgebungen (Docker, LXC, Kubernetes) ist das Subsystem AF_ALG für Prozesse innerhalb des Containers standardmäßig zugänglich, wenn das Modul algif_aead im Host-Kernel geladen ist. Dies birgt das Risiko einer Verletzung der Container-Isolation und der Erlangung der Kontrolle über den Host-Rechner.

Überprüfung der Schwachstelle:

# Prüfen, ob das Modul algif_aead geladen ist
lsmod | grep algif

# Prüfen, ob AF_ALG im Kernel vorhanden ist
grep CONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname -r)

Exploit

Besonderheiten des C-Ports

Der ursprüngliche Exploit wurde in Python geschrieben (≈732 Bytes). Dieser C-Port hat folgende Besonderheiten:

  • Statische Kompilierung — funktioniert in minimalen Umgebungen ohne Python.
  • Vollständige Autonomie — es werden nur die Standard-C-Bibliothek und libz benötigt.
  • Ausführliche Kommentare auf Russisch — jeder Exploit-Schritt ist dokumentiert.
  • Identisches Verhalten — die Systemaufrufe entsprechen exakt der Python-Version (überprüft mit strace).
  • Nicht blockierendes recv() — verhindert Hängenbleiben, indem das try/except-Verhalten aus Python nachgeahmt wird.

Wichtige Unterschiede zur Python-Version, die beim Portieren festgestellt wurden:

ParameterPythonC (dieser Port)
sendmsg()-FlagMSG_MOREMSG_MORE
splice()-Flag00
Offset in PipeNULLNULL
Schlüsselgröße40 Bytes40 Bytes
cmsg_len20/36/2020/36/20 (fest)
Pipe-Erstellungpipe2(fds, O_CLOEXEC)pipe2(fds, O_CLOEXEC)
recv()Blockierend mit try/exceptNicht blockierend (O_NONBLOCK)

Kompilierung

# libz erforderlich (zlib1g-dev oder zlib-devel)
gcc -o copyfail copyfail.c -lz -static -Wall -O2

Verwendung

./copyfail

Bei erfolgreichem Exploit wird eine gepatchte Version von /usr/bin/su gestartet, die Root-Zugriff ohne Passwortabfrage gewährt.

Erwartete Ausgabe:

================================================================
  CVE-2026-31431 'Copy Fail' Exploit
================================================================

[+] /usr/bin/su geöffnet
[+] 40 Chunks
[*] 40/40 ok

# id
uid=0(root) gid=0(root) groups=0(root)

Wie es funktioniert

Schritt-für-Schritt-Analyse

Nachfolgend finden Sie eine detaillierte Analyse jedes Exploit-Schritts mit Angabe der entsprechenden Systemaufrufe:

Schritt 1: Erstellung des AF_ALG-Sockets

socket(AF_ALG, SOCK_SEQPACKET, 0);
bind(sock, {sa_family=AF_ALG, salg_type="aead", 
     salg_name="authencesn(hmac(sha256),cbc(aes))"}, 88);

Es wird ein Socket für den Zugriff auf die kryptografische Kernel-API erstellt. Der Algorithmus authencesn (Authenticated Encryption with Sequence Numbers) ist ein zusammengesetzter AEAD-Algorithmus, der AES-CBC für die Verschlüsselung und HMAC-SHA256 für die Authentifizierung verwendet.

Schritt 2: Setzen der verwundbaren Parameter

setsockopt(sock, SOL_ALG, ALG_SET_KEY, key, 40);
setsockopt(sock, SOL_ALG, ALG_SET_AEAD_AUTHSIZE, NULL, 4);
  • Schlüssel: 40 Bytes in speziellem Format, die die internen Kernel-Puffer manipulieren.
  • Authentifizierungs-Tag-Größe: 4 Bytes. Der normale Wert für HMAC-SHA256 beträgt 16–32 Bytes. Ein anomal kleiner Wert führt zu einem Pufferüberlauf im Kernel.

Schritt 3: Initialisierung der Entschlüsselungsoperation

accept(sock, NULL, NULL);  // conn_sock
sendmsg(conn_sock, {payload="AAAA"+data, 
        cmsg=[(SOL_ALG, 3, 4 Nullen),        // ALG_SET_OP = DECRYPT
              (SOL_ALG, 2, 0x10+19 Nullen),  // ALG_SET_IV
              (SOL_ALG, 4, 0x08+3 Nullen)]}, // ALG_SET_AEAD_ASSOCLEN
        MSG_MORE);

Für die Operation wird eine Verbindung erstellt. Über sendmsg() mit Control Messages (CMSG) werden die Parameter gesetzt:

  • Operation: Entschlüsselung (ALG_OP_DECRYPT = 0).
  • IV: 20 Bytes (statt der normalen 16 für AES).
  • Assoziierte Daten: 8 Bytes (ohne tatsächliche Datenübertragung).
Tool herunterladen