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-45806 — Penpots Fernbildimport ermöglichte es einem authentifizierten Dateibearbeiter, eine normale Medienkomfortfunktion in ein SSRF mit Backend-Ursprung zu verwandeln, da vom Angreifer kontrollierte URLs in einen Redirect-folgenden Server-Fetch-Pfad ohne Ziel-Filterung gelangten. | Kitploit
Tools/GitHubGitHub/0xmrma/cve-2026-45806
SchwachstellenanalyseExploitationWebsicherheitPenetrationstestsPapers & ForschungLernen & Bildung
GitHub0xmrma/cve-2026-45806

CVE-2026-45806

Penpots Fernbildimport ermöglichte es einem authentifizierten Dateibearbeiter, eine normale Medienkomfortfunktion in ein SSRF mit Backend-Ursprung zu verwandeln, da vom Angreifer kontrollierte URLs in einen Redirect-folgenden Server-Fetch-Pfad ohne Ziel-Filterung gelangten.

Repository anzeigen
1vor 2 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-45806

Penpots Remote-Bildimport erlaubte einem authentifizierten Datei-Editor, eine normale Medien-Komfortfunktion in einen Backend-originierten SSRF zu verwandeln, da vom Angreifer kontrollierte URLs einen Weiterleitungen folgenden Server-Abrufpfad ohne Ziel-Filterung erreichten.

Einführung

Ich habe diesen Fehler beim Überprüfen von Penpot, der quelloffenen Design- und Code-Kollaborationsplattform, mit einer sehr spezifischen Frage gefunden:

Was passiert, wenn ein kollaboratives Designtool einem Benutzer erlaubt, dem Backend eine Remote-Bild-URL zu übergeben, um sie abzurufen?

In diesem Fall führte diese Frage zu einem echten Bug.

Der Remote-Bildimport-Ablauf von Penpot akzeptierte eine benutzergesteuerte URL und veranlasste das Backend, sie aus dem Server-Netzwerkkontext abzurufen, ohne Einschränkungen für Loopback- oder private Netzwerkziele durchzusetzen. Der gemeinsam genutzte HTTP-Client folgte auch automatisch Weiterleitungen.

Dadurch wurde eine normale Medien-Komfortfunktion in eine authentifizierte Backend-originierte SSRF-Grundlage verwandelt und führte schließlich zu CVE-2026-45806.

Penpot: Penpot auf GitHub
CVE: CVE-2026-45806
CVSS: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N

Dies betraf Penpot. Auf seiner offiziellen Website und im Medienkit präsentiert sich Penpot als mit einer +1 Millionen wachsenden Benutzerbasis und sagt, dass Zehntausende von Organisationen es nutzen, darunter Blender, Mozilla, Fedora, NTT Data, , , , , und .

MIT
Société Générale
Cisco
Fujitsu
Indra
ByteDance
photo0

Angriffskette

authentifizierter Datei-Editor -> vom Angreifer kontrollierte Remote-Bild-URL -> create-file-media-object-from-url -> Backend download-image Abruf mit aktivierten Weiterleitungen -> finale Anfrage landet auf internem Nur-Bild-Endpunkt -> Backend-origin SSRF / interne Erreichbarkeit


Was Penpot tut

Penpot ist eine quelloffene Design- und Code-Kollaborationsplattform.

Es behandelt Dinge wie:

  • kollaborative Dateibearbeitung
  • Team- und Projektworkflows
  • hochgeladene Medien und Assets
  • Rendering- und Vorschau-Pfade
  • browserbasierte Designoperationen mit serverseitiger Verarbeitung

Das bedeutet, dass sein Medienimportpfad auf einer echten Vertrauensgrenze liegt.

Die wichtige Frage war hier nicht, ob Penpot das Importieren von Remote-Bildern unterstützt.

Die eigentliche Frage war:

Schränkt Penpot ein, wohin das Backend eine Verbindung herstellen darf, wenn ein Benutzer ein Remote-Bild importiert?

In diesem Fall tat es das nicht.


Warum dieser Fehler einen Blick wert war

Viele Leute unterschätzen Remote-Importfunktionen.

Das ist ein Fehler.

In dem Moment, in dem eine Anwendung:

  • eine vom Angreifer kontrollierte URL akzeptiert,
  • die Anfrage vom Backend aus stellt,
  • und diese Anfrage in einen normalen Produktworkflow umwandelt,

schafft sie eine echte ausgehende Vertrauensgrenze.

Das war hier das Problem.

Dieser Fehler lag nicht im Bild-Rendering. Er lag nicht in der Dateispeicherung. Er lag nicht in den üblichen Berechtigungsprüfungen zum Bearbeiten einer Datei.

Es war ein klassischer serverseitiger Vertrauensfehler:

  • eine vom Angreifer kontrollierte URL gelangte in das System,
  • das Backend rief sie direkt ab,
  • Weiterleitungen waren erlaubt,
  • und es waren keine Zielkontrollen im überprüften Pfad sichtbar.

Das reicht aus, um eine echte Sicherheitslücke zu schaffen.


Die Grenze, auf die ich mich konzentrierte

Ich bin nicht blind an Penpot herangegangen, indem ich zuerst zufällige RPC-Methoden gefuzzt oder nach Abstürzen gesucht habe.

Der stärkere Ansatz war, die vielversprechendste Sicherheitsgrenze zu identifizieren.

Für Penpot war das der Remote-Medienimport.

Warum?

Weil diese Funktion kombiniert:

  • vom Angreifer kontrollierte URL-Eingabe
  • ausgehende Anfragen vom Backend-Ursprung
  • Inhaltsvalidierung, die erst nach dem Stellen der Anfrage erfolgt
  • einen Designworkflow, bei dem erfolgreiche Abrufe als normale Medienoperationen behandelt werden

Das war die richtige Grenze zu überprüfen.

Und genau dort lebte der Fehler.


Ursache

Der Fehler reduziert sich auf eine kleine Vertrauenskette.

Im Frontend:

root@kitploit:~
(defn upload-media-url
  [name file-id url]
  (rp/cmd!
   :create-file-media-object-from-url
   {:name name
    :file-id file-id
    :url url
    :is-local true}))

die vom Benutzer kontrollierte url wird direkt in den RPC-Aufruf gesendet.

Dann im Backend:

root@kitploit:~
(sv/defmethod ::create-file-media-object-from-url
  ...
  [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id file-id] :as params}]
  (files/check-edition-permissions! pool profile-id file-id)
  ...
  (let [_    (files/get-minimal-file cfg file-id)
        mobj (create-file-media-object-from-url cfg (assoc params :profile-id profile-id))])

und:

root@kitploit:~
(defn- create-file-media-object-from-url
  [cfg {:keys [url name] :as params}]
  (let [content (media/download-image cfg url)

das Backend überprüft, ob der Aufrufer die Zieldatei bearbeiten darf, und übergibt dann die vom Angreifer kontrollierte URL an media/download-image.

Die Abruf-Implementierung ist hier:

root@kitploit:~
(defn download-image
  "Download an image from the provided URI and return the media input object"
  [{:keys [::http/client]} uri]
  ...
  (http/req! client
             {:method :get :uri uri}
             {:response-type :input-stream})

Und der gemeinsam genutzte HTTP-Client ist konfiguriert als:

root@kitploit:~
(http/build-client {:connect-timeout 30000
                    :follow-redirects :always}))

Das ist die gesamte Schwachstelle:

  • Angreifer kontrolliert die URL
  • Backend führt die Anfrage aus
  • Weiterleitungen werden automatisch befolgt
  • Es wird keine Ziel-Filterung angewendet, bevor die Anfrage gestellt wird

Warum dies ausnutzbar ist

Weil der Angreifer nur benötigt:

  • ein gültiges Penpot-Konto
  • Bearbeitungsberechtigung für eine Datei
  • ein Ziel, das akzeptierte Bildinhalte zurückgibt

Die Angriffskette ist unkompliziert:

  • Angreifer liefert eine URL
  • Penpot ruft sie vom Backend ab
  • der erste Hop kann öffentlich oder scheinbar harmlos sein
  • das Weiterleitungsziel kann intern sein
  • wenn die endgültige Antwort wie ein erlaubtes Bild aussieht, wird der Import abgeschlossen

Das ist der gesamte Fehler.


Was dies zu einem Sicherheitsproblem macht, nicht nur zu normalem Remote-Import-Verhalten

Der wichtige Unterschied ist wo die Anfrage stattfindet.

Die Frage ist nicht:

„Kann Penpot Bilder von URLs importieren?"

Die eigentliche Frage ist:

„Kann ein authentifizierter Benutzer das Penpot-Backend dazu bringen, eine Verbindung zu internen Zielen herzustellen, die der Benutzer nicht über die Anwendung erreichen können sollte?"

In diesem Fall war die Antwort ja.

Das ist wichtig, weil es einen echten Unterschied gibt zwischen:

  • einem Browser, der eine vom Benutzer bereitgestellte URL abruft, und
  • dem Backend, das diese URL aus der Server-Netzwerkposition abruft

Bildvalidierung hebt diesen Unterschied nicht auf.

Sie schränkt einige direkte Exfiltrationsfälle ein, hebt aber nicht die SSRF-Bedingung oder den Netzwerkgrenzenbruch auf.


PoC

Ich habe dieses Problem mit einem kontrollierten lokalen Proof validiert, der direkt mit dem überprüften Penpot-Codepfad verbunden ist.

Das Ziel war nicht, die Infrastruktur Dritter zu treffen. Das Ziel war, die genaue Sicherheitseigenschaft zu beweisen:

  • backendseitige Ausführung von Anfragen
  • Befolgen von Weiterleitungen
  • erfolgreicher Wechsel zu einem internen Nur-Endpunkt
  • Abschluss unter denselben bildorientierten Einschränkungen, die Penpot durchsetzt

Ich habe einen eigenständigen Java-Validator gebaut, der das relevante Verhalten nachbildet:

  • backendseitiger GET zu einer vom Aufrufer kontrollierten URI
  • automatisches Befolgen von Weiterleitungen
  • Bildakzeptanzprüfungen basierend auf content-type und content-length

Ich habe zwei Fälle validiert.

Fall 1: Direkter interner Abruf

Der Validator forderte:

root@kitploit:~
http://127.0.0.1:7790/internal.png

Beobachtetes Ergebnis:

  • angeforderte URI: http://127.0.0.1:7790/internal.png
  • endgültige URI: http://127.0.0.1:7790/internal.png
  • Status: 200
  • Inhaltstyp: image/png
  • Artefakt erfolgreich geschrieben

Das bewies, dass die importartige Abruflogik einen internen Nur-Bild-Endpunkt direkt akzeptierte.


Fall 2: Weiterleitungsgestützter interner Abruf

Der Validator forderte dann:

root@kitploit:~
http://localhost:7791/redirect-to-internal

Dieser Endpunkt gab eine HTTP-Weiterleitung zurück zu:

root@kitploit:~
http://127.0.0.1:7790/internal.png

Beobachtetes Ergebnis:

  • angeforderte URI: http://localhost:7791/redirect-to-internal
  • endgültige URI: http://127.0.0.1:7790/internal.png
  • Status: 200
  • Inhaltstyp: image/png
  • Artefakt erfolgreich geschrieben

Der Nur-interne Listener protokollierte die weitergeleitete Anfrage.

Das bewies die wichtigere Behauptung:

  • die anfängliche, vom Angreifer kontrollierte URL kann sich vom endgültigen Ziel unterscheiden
  • Weiterleitungen werden automatisch befolgt
  • der endgültige Backend-Abruf kann auf einem internen Nur-Endpunkt landen und trotzdem erfolgreich sein

Warum der PoC so gebaut wurde

Die Nutzlast war hier absichtlich einfach:

  • winzige gültige PNG-Antwort
  • explizites Weiterleitungsziel
  • interner Nur-Listener, der an Loopback gebunden ist

Das war wichtig, weil Penput nicht einfach beliebige Bytes abruft und aufhört. Es führt nach der Anfrage eine medienorientierte Validierung durch.

Der richtige Beweis war also nicht:

„Das Backend kann versuchen, sich irgendwo zu verbinden"

Der stärkere Beweis war:

„Das Backend kann dazu gebracht werden, sich mit etwas internem zu verbinden und die Anfrage erfolgreich unter denselben bildähnlichen Einschränkungen abzuschließen, die die Funktion erwartet"

Genau das hat die Validierung gezeigt.


Warum dies dennoch meldenswert war

Eine häufige Reaktion auf SSRF-Fehler dieser Art ist:

„Das Ziel muss trotzdem ein Bild zurückgeben"

Diese Beobachtung ist wahr, aber unvollständig.

Sie hebt die Schwachstelle nicht auf.

Sie sagt dir nur, welche internen Ziele am direktesten nützlich sind.

Dieses Problem ermöglicht immer noch:

  • Backend-originierte interne Erreichbarkeit
  • Weiterleitungsgestütztes Einsteigen in Loopback- oder Private-Netzwerk-Bereiche
  • Interaktion mit internen, Bilder zurückgebenden Endpunkten
  • Missbrauch des Netzwerkvertrauens von der Penpot-Serverposition aus

Das ist immer noch ein echter Bruch der Sicherheitsgrenze.

Besonders in selbstgehosteten Umgebungen existieren interne Dienste oft genau hinter dieser Grenze.


Schweregrad und Klassifizierung

Diesem Problem wurde letztendlich ein Hoher Schweregrad (CVSS) zugewiesen:

  • CWE-918: Server-Side Request Forgery (SSRF)
  • CVSS:
root@kitploit:~
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N

Diese Klassifizierung ergibt Sinn.

Die Behauptung ist nicht, dass ein nicht authentifizierter Angreifer sofort jede Penpot-Installation aus dem Nichts kompromittieren kann.

Die Behauptung ist, dass jeder normale authentifizierte Datei-Editor Penpot in eine Backend-Anfragegrundlage gegen interne Ziele verwandeln kann, einschließlich weiterleitungsgestütztem Zugriff auf Loopback- und Private-Netzwerk-Ziele.

Es gab während der Offenlegung einige Diskussionen über den Schweregrad, hauptsächlich zu:

  • internen Diensten, die Authentifizierung erfordern
  • dem abgerufenen Inhalt, der die Bildvalidierung bestehen muss
  • Ausnutzung, die Kenntnisse der internen Infrastruktur voraussetzt

Das sind angemessene Einschränkungen, die diskutiert werden sollten.

Aber sie heben das Kernproblem nicht auf:

  • vom Angreifer kontrollierte URL
  • backendseitiger Anfragenursprung
  • Befolgen von Weiterleitungen
  • keine ausgehende Richtlinie für Ziele im überprüften Pfad

Das ist eine echte und vertretbare SSRF-Schwachstelle.


Fix-Analyse

Der wichtige Fix hier ist nicht eine strengere MIME-Behandlung.

Der eigentliche Fix ist eine ausgehende Richtlinie für Ziele.

Eine korrekte Abhilfe für diese Art von Fehler muss:

  1. nur http und https zulassen
  2. Loopback, RFC1918/private, Link-Local, Multicast, unspezifizierte und Metadaten-Dienstbereiche vor dem Verbinden auflösen und ablehnen
  3. jeden Weiterleitungssprung erneut gegen dieselbe Richtlinie prüfen
  4. erwägen, Weiterleitungen für diese Funktion zu deaktivieren oder stark einzuschränken
  5. Regressionstests hinzufügen für:
    • localhost
    • direkte private Ziele
    • Weiterleitung-zu-Privat-Fälle
    • DNS-Rebinding-artige Szenarien

Das ist die richtige Fix-Richtung, weil dies kein Bildparsungsfehler war. Es war ein Fehler der Netzwerk-Vertrauensgrenze.


Offenlegung

Dieses Problem wurde privat über den GitHub-Sicherheitsmeldefluss gemeldet.

Die Meldung enthielt:

  • Quellcode-Root-Cause-Analyse
  • ein starkes lokales Validierungsmodell
  • weiterleitungsbasierten Nachweis des internen Einstiegs
  • Artefakt- und Log-Nachweise
  • Hinweise zur Abhilfe

Die Maintainer bestätigten das Problem und begannen mit der Arbeit an einer Lösung.

Das Problem wurde später zugewiesen:

CVE-2026-45806


Was dieser Fehler tatsächlich lehrt

Die wichtigste Lektion ist einfach:

Remote-Medienimport ist eine ausgehende Vertrauensgrenze, nicht nur eine Komfortfunktion

Viele Entwickler denken in Begriffen von:

  • URL akzeptiert
  • Anfrage erfolgreich
  • Bild besteht Validierung
  • Medien wird gespeichert

Das sind Implementierungsdetails.

Die eigentliche Sicherheitsfrage ist:

Wohin darf das Backend im Auftrag eines Benutzers eine Verbindung herstellen?

Wenn diese Frage nicht explizit beantwortet wird, werden Funktionen wie Remote-Import standardmäßig zu SSRF-Oberflächen.

Dieser Fehler unterstreicht auch etwas Wichtiges für SSRF-Überprüfungen:

  • Weiterleitungen sind wichtig
  • Inhaltsvalidierung ist kein Ersatz für Netzwerkrichtlinien
  • Authentifizierter SSRF ist immer noch ernst, wenn er in interne Vertrauensgrenzen eindringt

Das ist die eigentliche Erkenntnis.


Kernpunkte

  • Remote-Bildimport ist eine echte Backend-Vertrauensgrenze
  • Authentifizierte Funktionen können dennoch schwerwiegenden SSRF offenlegen
  • Befolgen von Weiterleitungen macht ausgehende Abrufpfade viel gefährlicher
  • Nur-Bild-Validierung schränkt einige Missbrauchspfade ein, hebt SSRF jedoch nicht auf
  • Der Nachweis eines erfolgreichen internen Weiterleitungspfades ist stärker als nur das Zeigen eines fehlgeschlagenen Verbindungsversuchs
  • Der richtige Fix ist eine ausgehende Zielrichtlinie, keine kosmetische Antwortvalidierung

Abschließende Worte

Diese Sicherheitslücke drehte sich nicht um eine aufsehenerregende Nutzlast.

Es ging darum, die richtige Vertrauensgrenzen-Frage zu stellen.

Penpot erlaubte einem authentifizierten Datei-Editor, eine Remote-Bild-URL bereitzustellen, und das Backend vertraute dieser URL mehr, als es sollte. Die Weiterleitungsbehandlung erledigte den Rest.

Deshalb wurde dies zu CVE-2026-45806.

Tool herunterladen