
Proof-of-Concept-Exploit für CVE-2024-21626, eine Container-Ausbruch-Schwachstelle in Docker/runc. Demonstriert die Manipulation von Dateideskriptoren, um die Container-Isolation zu durchbrechen. Nur für Bildungs- und Forschungszwecke.
Nur für Bildungs-/Forschungszwecke. Jegliche Risiken, die aus nicht bildungs-/forschungsbezogenen Handlungen entstehen, trägt der Benutzer selbst.
docker build . -t cve-2024-21626
docker run -it --rm cve-2024-21626 bash /poc.sh
# 另起一个terminal
/bin/bash.copy
Die spezifischen Dateideskriptoren, die von verschiedenen docker/runc-Versionen verwendet werden, unterscheiden sich. Beispielsweise wird bei docker server:20.10.17 && runc version 1.1.2 /proc/self/fd/9 verwendet. Der tatsächliche fd kann sich je nach Reihenfolge der Dateiöffnungen ändern. Die offizielle Dokumentation gibt an, dass in den meisten Fällen /proc/self/fd/7 verwendet werden sollte. Um den tatsächlich verwendeten fd zu erfahren, kann man ein runc selbst kompilieren und an der nsexec-Funktion einen sleep einfügen.
#使用ps 找到对应runc init进程的pid
ps -ef | grep runc
# 查看指向/sys/fs/cgroup的fd
ls -lh/proc/{pid runc init}/fd
Änderung: Ändere den WORKDIR-Wert im Dockerfile auf den entsprechenden Wert.
Die folgenden Bedingungen müssen gleichzeitig erfüllt sein:
1. Kann einen Container erstellen und einen Befehl zur Ausführung angeben.
2. Kann das zu verwendende Image angeben.
TODO
https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv
https://github.com/opencontainers/runc/commit/2a4ed3e75b9e80d93d1836a9c4c1ebfa2b78870e