
CVE-2025-31133 PoC
Dieses Dokument erläutert die Funktionsweise des bereitgestellten Proof-of-Concept-Skripts (PoC) für die runc-Schwachstelle CVE-2025-31133.
maskedPaths-Behandlung von runc.maskedPaths umgehen und so in sensible Dateien auf dem Hostsystem schreiben. Dies stellt einen Container-Escape dar./proc/sys/kernel/core_pattern des Hosts aus einem Container heraus modifiziert wird."pwned" in die Zieldatei und führt keinen beliebigen Code auf dem Host aus. Außerdem enthält er Anweisungen zum Wiederherstellen des ursprünglichen Werts.Das maskedPaths-Feature in der OCI-Spezifikation eines Containers (config.json) ist ein Sicherheitsmechanismus, der verhindern soll, dass Container auf sensible Systemdateien zugreifen. Es funktioniert, indem /dev/null (eine leere Gerätedatei) über diese sensiblen Pfade im Container bind-gemountet wird, wodurch sie praktisch unlesbar und unbeschreibbar werden.
Die Schwachstelle (CVE-2025-31133) ist eine Time-of-Check to Time-of-Use (TOCTOU) Race-Condition. Der Exploit funktioniert wie folgt:
runc den Container einrichtet, bereitet es vor, die Datei dev/null aus dem Rootfs des Containers als Quelle für den Bind-Mount zu verwenden, der den sensiblen Pfad (z. B. /proc/sys/kernel/core_pattern) maskieren soll.runc den Pfad zu rootfs/dev/null auflöst, und dem Moment, in dem es die Mount-Operation tatsächlich durchführt.rootfs/dev/null kontinuierlich und sehr schnell zwischen einem legitimen Geräteknoten und einem symbolischen Link, der auf die Zieldatei auf dem Host zeigt (/proc/sys/kernel/core_pattern), hin- und herwechselt.runc seine Mount-Operation genau in dem Moment aus, in dem rootfs/dev/null ein Symlink ist. Dadurch folgt der Kernel dem Symlink, und die beabsichtigte Maskierungsoperation für /proc/sys/kernel/core_pattern schlägt fehl.Dieser PoC nutzt diese Technik, um in /proc/sys/kernel/core_pattern zu schreiben, ein häufiges Ziel solcher Exploits, da das Ändern dieser Datei bei einem Prozessabsturz zur Ausführung beliebigen Codes auf dem Host führen kann. Dieser PoC schreibt jedoch nur eine harmlose Zeichenkette, um nachzuweisen, dass die Schreib-Primitive existiert.
Das Skript poc.sh automatisiert den gesamten oben beschriebenen Prozess.
Einrichtung & Bereinigung:
runc-Binärdatei, den Containernamen und den Rootfs-Pfad.cleanup-Funktion, die sicherstellt, dass alle zuvor vom Skript erstellten Container oder Dateien entfernt werden. Diese Funktion wird automatisch bei Beendigung, Unterbrechung oder Terminierung aufgerufen.Vorbereitung:
/proc/sys/kernel/core_pattern des Hosts in einer temporären Datei. Diese wird später verwendet, um zu überprüfen, ob der Exploit erfolgreich war, und um dem Benutzer bei der Wiederherstellung des Systems zu helfen../rootfs) und eine config.json-Datei.config.json listet /proc/sys/kernel/core_pattern explizit unter maskedPaths auf — genau das Feature, das der Exploit umgehen soll.Die Race-Funktion (symlink_race)
Voraussetzungen:
runc.busybox-static installiert (für die Shell des Containers).sudo), um runc auszuführen und /proc zu modifizieren.Schritte:
poc.sh.chmod +x poc.sh.sudo ./poc.sh.[+] EXPLOIT SUCCEEDED! sehen, bedeutet dies, dass die Race-Condition gewonnen wurde. Die Datei /proc/sys/kernel/core_pattern des Hosts wurde erfolgreich aus dem Container heraus modifiziert, was die Schwachstelle bestätigt.[-] Exploit did not succeed. sehen, wurde die Race bei diesem Versuch nicht gewonnen. Race-Conditions sind probabilistisch und hängen stark vom System-Timing und der Systemlast ab. Versuchen Sie, das Skript noch einige Male auszuführen.Der PoC modifiziert eine Systemdatei. Um sie in ihren ursprünglichen Zustand zu versetzen, führen Sie den vom Skript vorgeschlagenen Befehl aus:
# The 'ORIGINAL_PATTERN' will be the actual value from your system
echo 'original_core_pattern_value' | sudo tee /proc/sys/kernel/core_pattern
/proc/sys/kernel/core_pattern schreiben, wodurch die Datei des Hosts direkt verändert wird – ein Container-Escape ist erreicht.rootfs/dev/null.rootfs/dev/null auf die Zieldatei des Hosts (/proc/sys/kernel/core_pattern).rootfs/dev/null als ordentliches Zeichengerät (mknod) neu.Ausführung:
symlink_race wird als Hintergrundprozess gestartet.runc run ... aus, um den Container zu erstellen und zu starten. In diesem Moment versucht runc, die maskedPaths anzuwenden.runc exec, um einen Befehl im Inneren des Containers auszuführen: echo 'pwned' > /proc/sys/kernel/core_pattern.Verifizierung:
/proc/sys/kernel/core_pattern des Hosts."pwned" und dem ursprünglichen Wert.[+] EXPLOIT SUCCEEDED! oder [-] Exploit did not succeed. aus.