#Hosting · 5 Min. Lesezeit · Tim Rinkel

ROOT-ALARM! Dein Self-Hosting-Dashboard verrät Angreifern die Kommandozeile — Dokploy patcht Note 9,9

ROOT-ALARM! Dein Self-Hosting-Dashboard verrät Angreifern die Kommandozeile — Dokploy patcht Note 9,9

Eigentlich sollte Dokploy genau das Problem lösen, das jeder Homelab-Betreiber kennt: eine eigene, schlanke Alternative zu Heroku oder Vercel, komplett selbst gehostet. Jetzt zeigt sich: Ausgerechnet die Funktion, mit der du ein Git-Repository für ein Deployment auswählst, öffnet Angreifern die Root-Kommandozeile im gesamten Container.

WAS GENAU KAPUTT IST

Die Lücke trägt die Kennung CVE-2026-93425 und sitzt in der internen Funktion patch.readRepoDirectories. Dokploy baut daraus im Hintergrund einen Shell-Befehl der Form cd "$repoPath" && git ls-tree -r --name-only HEAD — und übernimmt den Pfad dabei ungeprüft aus der Nutzereingabe. Wer in dieses Feld Shell-Sonderzeichen statt eines normalen Pfads schreibt, lässt Dokploy nicht mehr lesen, sondern ausführen.

Der CVSS-Wert liegt bei 9,9 von 10. Der Vektor zeigt, warum das kein Randfall ist: Der Angriff läuft über das Netzwerk, braucht keine besondere Komplexität und keine Nutzerinteraktion. Einzige Voraussetzung ist ein angemeldetes Konto mit der eher harmlos klingenden Berechtigung „service:read“ — ein Leserecht, das in vielen Teams großzügig vergeben wird, weil es nach wenig aussieht.

WARUM DER DOCKER-SOCKET ALLES SCHLIMMER MACHT

Der eingeschleuste Befehl läuft als Root im Dokploy-Container. Für sich genommen wäre das schon ernst. Richtig gefährlich wird es, weil Dokploy in seiner Standard-Installation den Docker-Socket des Host-Systems in den Container einbindet — damit die Oberfläche neue Container starten, stoppen und verwalten kann. Wer im Container Root ist und gleichzeitig den Docker-Socket erreicht, steuert damit den kompletten Docker-Daemon des Hosts. Aus einer Rechteausweitung im Container wird so im schlimmsten Fall die volle Kontrolle über den Server und alle darauf laufenden Anwendungen.

Die Entwickler stufen das Problem selbst als klassischen CWE-78 ein — Befehlsinjektion durch fehlende Bereinigung von Sonderzeichen. Genau die Art Fehler, die in Code-Reviews eigentlich als Erstes auffallen sollte, hier aber offenbar durchgerutscht ist.

WER DAS TRIFFT

Dokploy ist in der Self-Hosting-Szene beliebt, weil es Coolify und Portainer als schlanke, kostenlose PaaS-Oberfläche Konkurrenz macht: Git-Repo verknüpfen, Dokploy baut und deployt automatisch. Genau dieser Automatismus ist jetzt das Problem. Betroffen ist jede Installation vor Version 0.29.13 — unabhängig davon, ob sie auf einem gemieteten VPS, einem Homelab-Server oder in einem größeren Team mit mehreren Organisationsmitgliedern läuft. Teams mit mehreren Nutzerkonten sind besonders exponiert, weil dort öfter Konten mit reinen Leserechten existieren, die genau die nötige Mindestberechtigung mitbringen.

Ehrlich bleiben muss man an einer Stelle: Ein öffentlicher Machbarkeitsnachweis existiert im Sicherheitsbericht der Entwickler, konkrete Angriffe in freier Wildbahn sind bislang nicht dokumentiert. Bei einer derart niedrigen Einstiegshürde ist das aber eher eine Frage der Zeit als eine echte Entwarnung.

SO SCHÜTZT DU DEINEN SERVER — in 5 MINUTEN

  • Sofort aktualisieren: Version 0.29.13 behebt die Lücke vollständig.
  • Berechtigungen prüfen: Wer wirklich nur lesen soll, sollte nicht automatisch als „service:read“ auf Repo-Funktionen zugreifen können — Rollen nach dem Update trotzdem einmal durchgehen.
  • Docker-Socket hinterfragen: Wo möglich, den direkten Zugriff auf /var/run/docker.sock einschränken oder über einen Proxy mit reduzierten Rechten laufen lassen, statt ihn roh durchzureichen.

Ein Workaround ohne Update existiert nicht — die Entwickler empfehlen ausdrücklich, execFile() mit Argument-Arrays statt exec() mit zusammengesetzten Strings zu verwenden, was mit 0.29.13 bereits umgesetzt ist.

FAZIT: Komfort hat einen Preis

Dokploy verspricht dir, dass ein Klick reicht und der Server den Rest erledigt. Genau dieser Automatismus — Git-Pfad rein, Shell-Befehl raus — ist jetzt zur Achillesferse geworden. Wenn du eine Self-Hosting-PaaS-Lösung mit Docker-Socket-Zugriff betreibst, ist das heute dein wichtigstes Update, nicht irgendwann diese Woche.

Häufige Fragen

Muss ich sofort handeln, auch wenn ich Dokploy nur allein nutze?
Ja. Auch als Einzelnutzer besitzt dein eigenes Konto in aller Regel die Berechtigung „service:read“, die für die Ausnutzung reicht. Die Lücke setzt kein zweites, kompromittiertes Konto voraus — sie setzt lediglich irgendeinen angemeldeten Zugriff voraus, egal ob eigener oder gestohlener. Das Update auf 0.29.13 ist deshalb unabhängig von der Teamgröße Pflicht.
Reicht es, den Docker-Socket vom Container zu trennen?
Das würde die schlimmste Folge — die volle Host-Übernahme — abschwächen, aber nicht die Lücke selbst schließen. Die Befehlsausführung als Root im Container bliebe bestehen und ließe sich weiterhin für Datendiebstahl oder das Kapern anderer Container nutzen. Der Docker-Socket-Rückbau ist eine sinnvolle Zusatzmaßnahme, kein Ersatz für das Update.
Woher weiß ich, welche Dokploy-Version ich einsetze?
Die Versionsnummer steht im Admin-Bereich der Weboberfläche, meist unten in der Seitenleiste oder unter den Systemeinstellungen. Wer über die Kommandozeile auf den Host zugreift, findet die Version auch im Docker-Image-Tag des laufenden Dokploy-Containers, etwa per docker inspect.
Sind auch geschlossene, nicht öffentlich erreichbare Dokploy-Instanzen betroffen?
Der Angriffsvektor läuft über das Netzwerk und setzt nur ein angemeldetes Konto voraus, keinen Zugriff von außen. Eine Instanz, die ausschließlich intern erreichbar ist, ist deshalb zwar etwas besser geschützt als eine öffentlich exponierte — aber jedes Konto innerhalb des Netzwerks bleibt ein mögliches Einfallstor, solange nicht aktualisiert wurde.

Quellen

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert