Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
block-copyfail — BPF-LSM-Blocker für CVE-2026-31431 (Copy Fail) – Remediation ohne Neustart für OpenShift 4 | Kitploit
Tools/GitHubGitHub/mrunalp/block-copyfail
DefensivwerkzeugeContainer-SicherheitSchwachstellenanalyseSicherheitsvirtualisierungCloud-Sicherheit
GitHubmrunalp/block-copyfail

block-copyfail

BPF-LSM-Blocker für CVE-2026-31431 (Copy Fail) – Remediation ohne Neustart für OpenShift 4

Repository anzeigen
12vor 3 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

Zusammenfassung

CVE-2026-31431 („Copy Fail") ist eine Privilege-Escalation-Schwachstelle im Linux-Kernel in der kryptografischen Schnittstelle algif_aead. Ein Angreifer nutzt AF_ALG-Sockets mit dem Algorithmus authencesn und splice(), um beliebige Dateien im Kernel-Page-Cache zu korrumpieren – einschließlich setuid-Binaries wie /usr/bin/su.

Dieses Dokument bietet eine Remediation ohne Neustart mithilfe eines BPF-LSM-DaemonSets, das alle AF_ALG-AEAD-Bindings blockiert – die Subsystem-Komponente, die von Copy Fail ausgenutzt wird. Dies verhindert Umgehungen über Crypto-Template-Verschachtelung (z. B. pcrypt(authencesn(...))). Andere AF_ALG-Nutzungen (Hash, Skcipher) bleiben unberührt. Ende-zu-Ende auf drei separaten OCP-4.22-Clustern getestet.

Schnellstart

root@kitploit:~
# 1. Prüfen, ob BPF LSM aktiviert ist (RHEL CoreOS 9.8 hat es standardmäßig)
oc debug node/<any-node> -- chroot /host cat /sys/kernel/security/lsm
# Muss "bpf" enthalten

# 2. Namespace bereitstellen und privilegiertes SCC gewähren
oc apply -f daemonset.yaml

# 3. DaemonSet-Pods starten automatisch auf allen Knoten

# 4. Verifizieren
oc get pods -n block-copyfail     # Alle Knoten sollten Running anzeigen
oc logs -n block-copyfail -l app=block-copyfail
# Erwartet: "block-copyfail: blocker active — all AF_ALG AEAD binds blocked"

Keine Neustarts. Keine Node-Drains. Keine Pod-Neustarts. Der Schutz ist sofort aktiv und deckt alle Prozesse auf allen Knoten ab (100 % Abdeckung).

Inhaltsverzeichnis

  1. Wie der Exploit funktioniert
  2. Schwachstelle auf Ihrem Cluster bestätigen
  3. BPF-LSM-DaemonSet-Bereitstellung
  4. Verifizierung nach der Bereitstellung
  5. Image aus dem Quellcode erstellen
  6. Entfernung

Wie der Exploit funktioniert

Der Exploit verkettet drei Kernel-Funktionen:

  1. AF_ALG-Socket – erstellt einen Userspace-Handle zur Kernel-Krypto über socket(AF_ALG, SOCK_SEQPACKET, 0)
  2. AEAD-Bind – bindet an authencesn(hmac(sha256),cbc(aes)), einen spezifischen authentifizierten Verschlüsselungsalgorithmus
  3. splice() + sendmsg() – der Kernel führt fälschlicherweise eine „In-Place"-Operation durch, bei der sich Quell- und Ziel-Seitenzuordnungen unterscheiden, wodurch der Page-Cache einer schreibgeschützten Datei korrumpiert wird

Der Angreifer korrumpiert /usr/bin/su im Page-Cache (ohne Schreibzugriff auf die Datei) und führt es dann aus, um Root-Rechte zu erlangen.


Schwachstelle auf Ihrem Cluster bestätigen

Erstellen Sie einen neuen cve-2026-31431-test-Namespace auf Ihrem Cluster und führen Sie das Testskript aus, indem Sie die Manifests im Verzeichnis test anwenden:

root@kitploit:~
oc apply -f test

Prüfen Sie die Ergebnisse:

root@kitploit:~
oc wait pod/cve-test -n cve-2026-31431-test \
  --for=jsonpath='{.status.phase}'=Succeeded --timeout=120s
oc -n cve-2026-31431-test logs -l app=cve-2026-31431-test

Auf einem verwundbaren Cluster sehen Sie:

root@kitploit:~
=== CVE-2026-31431 Vulnerability Test ===
Target: /usr/bin/su

Original SHA256: 8969560ae8e6e21c6184c1451f59418822ee69dd5d946d71987b55236bbc0feb
Attempting splice + AF_ALG page-cache corruption (160 bytes in 40 chunks)...
After SHA256:    30b0f5b5a054c4df65b48ca792863bf7054b4d793f15f57163792ba6c2b151ae

PAGE CACHE CORRUPTION: YES - /usr/bin/su was modified in the page cache

Attempting to execute corrupted /usr/bin/su ...
  exit code: 0

RESULT: PARTIALLY MITIGATED
  Page-cache corruption succeeded (kernel is vulnerable)
  Privilege escalation blocked (allowPrivilegeEscalation=false)

Schritt 4: Aufräumen

root@kitploit:~
oc delete namespace cve-2026-31431-test

BPF-LSM-DaemonSet-Bereitstellung

Der BPF-LSM-Ansatz hakt socket_bind auf Kernel-Ebene ein und blockiert alle AF_ALG-AEAD-Bindings unabhängig von der Template-Verschachtelung. Er basiert auf block-copyfail, neu geschrieben in C mit libbpf für die OCP-Bereitstellung.

Voraussetzungen

BPF LSM muss aktiviert sein. RHEL CoreOS 9.8 (OCP 4.22) hat es standardmäßig aktiviert. Überprüfen mit:

root@kitploit:~
oc debug node/<any-node> -- chroot /host cat /sys/kernel/security/lsm

Die erwartete Ausgabe enthält bpf:

root@kitploit:~
lockdown,capability,landlock,yama,selinux,bpf

Wenn bpf nicht vorhanden ist, ist eine einmalige MachineConfig erforderlich (dies ist das einzige Szenario, das einen Neustart erfordert):

root@kitploit:~
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: worker
  name: 99-enable-bpf-lsm
spec:
  kernelArguments:
    - lsm=lockdown,capability,selinux,bpf

Schritt 1: Namespace erstellen, SCC gewähren und bereitstellen

Erstellen Sie einen neuen block-copyfail-Namespace, gewähren Sie SCC und stellen Sie das DaemonSet bereit, indem Sie das daemonset.yaml-Manifest anwenden. Das privilegierte SCC muss gewährt werden, bevor die DaemonSet-Pods erstellt werden, andernfalls schlägt die Pod-Erstellung mit SCC-Validierungsfehlern fehl.

root@kitploit:~
oc apply -f daemonset.yaml

Schritt 2: Warten, bis Pods auf allen Knoten starten

root@kitploit:~
oc get pods -n block-copyfail -o wide

Erwartet: ein Pod pro Knoten, alle Running:

root@kitploit:~
NAME                   READY   STATUS    AGE   NODE
block-copyfail-2jhzf   1/1     Running   34s   ci-...-master-2
block-copyfail-4dfq7   1/1     Running   34s   ci-...-master-1
block-copyfail-c2ts8   1/1     Running   34s   ci-...-worker-c
block-copyfail-ctblk   1/1     Running   34s   ci-...-worker-a
block-copyfail-m26sx   1/1     Running   34s   ci-...-worker-b
block-copyfail-xsh6d   1/1     Running   34s   ci-...-master-0

Schritt 3: Verifizieren, dass der Blocker aktiv ist

root@kitploit:~
oc logs -n block-copyfail -l app=block-copyfail

Erwartet:

root@kitploit:~
block-copyfail: blocker active — all AF_ALG AEAD binds blocked

Verifizierung nach der Bereitstellung

Führen Sie denselben Exploit-Test aus dem Abschnitt Schwachstelle bestätigen erneut aus.

Nach der Bereitstellung des BPF-LSM-DaemonSets sieht die Ausgabe wie folgt aus:

root@kitploit:~
=== CVE-2026-31431 Vulnerability Test ===
Target: /usr/bin/su

Original SHA256: 30b0f5b5a054c4df65b48ca792863bf7054b4d793f15f57163792ba6c2b151ae
Attempting splice + AF_ALG page-cache corruption (160 bytes in 40 chunks)...
  AF_ALG bind failed: [Errno 1] Operation not permitted

RESULT: CANNOT TEST - AF_ALG or splice not available/permitted

Die DaemonSet-Logs zeigen den blockierten Versuch:

root@kitploit:~
oc logs -n block-copyfail -l app=block-copyfail
root@kitploit:~
block-copyfail: blocker active — all AF_ALG AEAD binds blocked
block-copyfail: BLOCKED pid=16777    comm=python3 time=2026-05-01 16:37:23

Verifizieren, dass andere Algorithmen nicht betroffen sind

Führen Sie verify-algos.py auf einem Knoten aus, um zu bestätigen, dass alle AEAD-Algorithmen blockiert sind, während andere AF_ALG-Typen (Hash, Skcipher) weiterhin funktionieren:

root@kitploit:~
oc debug node/<any-node> -- chroot /host python3 -c "
import socket
tests = [
    ('aead',     'gcm(aes)'),
    ('aead',     'ccm(aes)'),
    ('aead',     'rfc4106(gcm(aes))'),
    ('hash',     'sha256'),
    ('skcipher', 'cbc(aes)'),
    ('aead',     'authencesn(hmac(sha256),cbc(aes))'),
]
for t, n in tests:
    s = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0)
    try:
        s.bind((t, n))
        print(f'  ALLOWED  {t}/{n}')
    except OSError as e:
        print(f'  BLOCKED  {t}/{n} -- {e}')
    finally:
        s.close()
"

Erwartete Ausgabe:

root@kitploit:~
  BLOCKED  aead/gcm(aes) -- [Errno 1] Operation not permitted
  BLOCKED  aead/ccm(aes) -- [Errno 1] Operation not permitted
  BLOCKED  aead/rfc4106(gcm(aes)) -- [Errno 1] Operation not permitted
  ALLOWED  hash/sha256
  ALLOWED  skcipher/cbc(aes)
  BLOCKED  aead/authencesn(hmac(sha256),cbc(aes)) -- [Errno 1] Operation not permitted

Dies bestätigt, dass der BPF-LSM alle AEAD-Bindings blockiert, während andere AF_ALG-Typen funktionsfähig bleiben.


Image aus dem Quellcode erstellen

Der Quellcode des BPF-LSM-Blockers befindet sich in block-copyfail/:

root@kitploit:~
block-copyfail/
  block_copyfail.bpf.c     # BPF-Kernelprogramm (LSM-Hook)
  block_copyfail.c          # Userspace-Loader (libbpf-Skeleton)
  block_copyfail.h          # Gemeinsame Event-Struktur
  Makefile                  # Build-Pipeline
  Dockerfile                # Multi-Stage-Build
  daemonset.yaml            # Namespace- + DaemonSet-Manifest
  trigger-test.py           # Schnelles Validierungsskript

Build und Push:

root@kitploit:~
cd block-copyfail/
podman build -t quay.io/<org>/block-copyfail:latest .
podman push quay.io/<org>/block-copyfail:latest

Das Dockerfile verwendet einen Multi-Stage-Build: Fedora mit clang/bpftool/libbpf-devel für die Kompilierung, UBI 9 minimal für das Laufzeit-Image (~122 MB).


Entfernung

Das Löschen des DaemonSets entfernt die Abschwächung sofort auf allen Knoten:

root@kitploit:~
oc delete -f daemonset.yaml
# oder
oc delete namespace block-copyfail

Das BPF-Programm wird automatisch getrennt, wenn der Loader-Prozess beendet wird. Kein Neustart oder Pod-Neustart ist erforderlich.

Tool herunterladen