Portainer hat am 27-08-2026 zwei Versionen auf einmal veröffentlicht: 2.45.0 als neue LTS-Ausgabe und 2.39.7 für alle, die auf der alten LTS-Linie bleiben wollen. Beide schließen dieselbe Lücke, und die trägt im Advisory die Note 9,4 von 10. Ob sie dich trifft, hängt an einer einzigen Frage: Hat außer dir noch jemand ein Login in deinem Portainer?

Kurz gesagt: CVE-2026-72533 lässt jeden angemeldeten Nutzer ohne Admin-Rechte an Portainers Zugriffskontrolle vorbei direkt zur Docker-API, und von dort ist es ein Schritt bis Root auf dem Host. Betroffen sind 2.39.0 bis 2.39.6 und alle Versionen 2.40 bis 2.44. Der Fix heißt 2.45.0 oder 2.39.7; das Update ist ein Backup und vier Befehle. Stand: Portainer 2.45.0 LTS, geprüft am 07-09-2026.
Portainer auf 2.45 LTS in drei Schritten: Backup ziehen, Container tauschen, Version prüfen
Der Weg auf 2.45 LTS: Backup, Container tauschen, Version prüfen.

CVE-2026-72533: ein Versionspräfix, das keiner geprüft hat

Portainer redet für dich mit der Docker-API. Jede Anfrage aus der Oberfläche geht durch einen Proxy, der prüft, ob du das überhaupt darfst, und erst dann an Docker weiterreicht.

Docker-API-Proxy? Die Pförtnerloge vor dem Maschinenraum. Portainer nimmt deinen Wunsch entgegen („Container X neu starten“), prüft am Empfang, ob dein Ausweis dafür reicht, und trägt ihn erst dann nach hinten zu Docker. Docker selbst fragt nicht mehr nach: Wer an der Loge vorbei ist, darf alles.

Der Fehler steckt in der Prüfung selbst. Docker-Anfragen tragen vorne eine Versionsangabe wie /v1.47/, und genau diese Schreibweise erkannte der Pförtner. Kam die Anfrage als /v1.47.0/ oder /v01.47/ an, passte das Muster nicht, und laut Release Notes ging sie ungeprüft durch: „skipped access control entirely“. Docker versteht beide Schreibweisen und führt aus.

Was das bedeutet, steht im Advisory ohne Umschweife: volle Docker-API für jeden angemeldeten Nutzer mit Zugriff auf eine Docker-Umgebung. Wer Container starten darf, startet einen mit --privileged und dem Host-Dateisystem als Mount, und dann gehört ihm der Server. Bei Swarm reicht schon das Auslesen des Manager-Join-Tokens.

Fünf Leute haben dieselbe Lücke unabhängig voneinander gefunden und gemeldet: meifukun, lyhtheori, arpitjain099, r0hanSH und alitvak69. Das sagt etwas über den Fehler: Wer den Proxy-Code liest, stolpert darüber. Umso besser, dass er jetzt zu ist, und die Nennung im Advisory haben die fünf verdient.

Wen es trifft: die Frage nach dem zweiten Login

Der Angreifer braucht ein gültiges Portainer-Konto. Kein Admin-Konto, ein normales reicht, aber angemeldet muss er sein. Ein Homelab, in dem genau ein Admin existiert und sonst niemand, bietet dieser Lücke keine Angriffsfläche. Wenn ich das Advisory richtig lese, ist das bei den meisten von uns der Normalfall.

Anders sieht es aus, sobald du Portainer teilst: der Mitbewohner mit eigenem Zugang, die Freundin, die „nur ihren Jellyfin neu starten“ soll, ein Team im Verein. Genau die Trennung „darf seine Container sehen, aber nicht meine“ war bis 2.39.6 nur Dekoration. Und ein Portainer, das offen im Internet hängt, gehört ohnehin hinter ein VPN oder einen Reverse Proxy mit eigener Anmeldung. Das Advisory nennt das als Notmaßnahme bis zum Update; ich würde es dauerhaft so halten.

Was 2.45 gegenüber 2.39 mitbringt

2.45 ist eine LTS-Version, also die Ausgabe, die Portainer selbst für den Dauerbetrieb empfiehlt und laut Lifecycle-Seite rund neun Monate pflegt; alle sechs Monate kommt eine neue. Sie sammelt alles ein, was seit März in den Kurzläufern 2.40 bis 2.44 gelandet ist. Für den Docker-Alltag daheim sind das vor allem drei Dinge:

  • Aufräumen alter Images. Eine Cleanup-Policy löscht ungenutzte Images von Hand oder nach Zeitplan. Bisher hieß das docker image prune im Terminal.
  • Neue Startseite und Empfehlungen. Umgebungen sind nach Zustand gruppiert, eine neue Ansicht zeigt erkannte Konfigurationslücken, und im Nutzermenü gibt es endlich einen Theme-Wähler.
  • SSRF-Schutz. Portainer ruft nur noch Adressen auf, die auf einer Allowlist stehen. Das bremst Anfragen aus, die der Server im Namen eines Nutzers ins eigene Netz schickt.

Der große Rest ist Kubernetes: eigene RBAC-Rollen, Pod Security Standards, GPU-Ansicht, Node-Shell. Wer daheim Docker fährt, sieht davon nichts. Backups nach Zeitplan sind auch neu, laut Doku aber nur in der Business Edition. Die Community Edition sichert weiter per Knopf, dazu gleich mehr.

Bei der Sicherheit stopft 2.45 außerdem einen Rest der Swarm-Lücke aus dem Mai (CVE-2026-44849) und dehnt die Bind-Mount-Sperre für Nicht-Admins auf Compose- und Swarm-Stacks aus. Dazu kommt eine lange Liste erneuerter Abhängigkeiten, darunter eine 9,6er-Lücke in Go selbst (CVE-2026-39821).

Solltest du updaten?

Ja, und ich würde auf 2.45 gehen statt auf 2.39.7. Der Grund steht auf Portainers Lifecycle-Seite: 2.39 LTS wird bis November 2026 gepflegt, 2.45 LTS bis Mai 2027. Wer jetzt bei 2.39.7 bleibt, macht den Sprung in zwei Monaten sowieso. Auf 2.39.7 bleiben würde ich nur, wenn eine der Zwischenversionen etwas verändert hat, das dich trifft; für 2.41 stand zum Beispiel ein CSRF-Umbau als Breaking Change in den Notes.

Vorher das Backup, du kennst das von mir: in Portainer Settings öffnen, nach unten zu Back up Portainer scrollen, Download backup. Die tar.gz enthält Nutzer, Umgebungen und Einstellungen, nicht deine Container. Die leben in Docker und bleiben beim Update unangetastet.

Dann der Tausch, so wie die Doku ihn für Docker Standalone beschreibt. Der Datenordner liegt im Volume portainer_data, deshalb geht nichts verloren, wenn der Container gelöscht wird:

docker stop portainer
docker rm portainer
docker pull portainer/portainer-ce:lts
docker run -d -p 8000:8000 -p 9443:9443 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:lts

Hatte dein alter Startbefehl andere Ports oder eigene Zertifikate, nimm den alten Befehl, nur mit dem Tag :lts. Der Tag :latest zeigt auf die Kurzläufer; wer den hat, bekommt im Herbst ungefragt eine STS-Version. Läuft Portainer bei dir per Compose, gilt dasselbe: Tag in der Datei auf :lts setzen, dann docker compose pull und docker compose up -d.

Ob es geklappt hat, zeigt die Oberfläche unter https://deine-server-ip:9443: Unten in der Seitenleiste steht die Version, nach dem Update 2.45.0. Ohne Login geht es über die Statusabfrage, die Portainer öffentlich beantwortet:

curl -sk https://deine-server-ip:9443/api/system/status

Steht in der Antwort "Version":"2.45.0", ist die Lücke bei dir zu. Noch ein Satz aus der Doku, der gern untergeht: Der Portainer-Agent auf anderen Hosts muss dieselbe Version haben wie der Server. Sonst redet ein neuer Server mit einem alten Agent, und das geht selten lange gut.

Wie viele Logins hat dein Portainer? Nur deins, oder hast du der Familie eigene Konten gegeben und dich auf die Rechtetrennung verlassen? Und wer von euch fährt noch :latest? Schreib's in die Kommentare.

Wer für das Update ohnehin auf dem Server ist: Der SSH-Zugang ist die zweite Tür, die oft weiter offen steht als nötig. Wie du sie zumachst, ohne dich auszusperren, steht in SSH absichern auf Debian und Ubuntu.

Quellen