9 Punkte von GN⁺ 2025-12-19 | 1 Kommentare | Auf WhatsApp teilen
  • Ein 16-jähriger Schüler veröffentlichte eine Zusammenfassung darüber, wie sich über eine Schwachstelle in der Mintlify-Plattform Cross-Site-Scripting (XSS) auf den Dokumentationsseiten großer Unternehmen wie X, Vercel, Cursor und Discord ausführen ließ. Über diese Schwachstelle erhielt er 11.000 US-Dollar Bug-Bounty-Prämie
  • Der interne Pfad /_mintlify/static/[subdomain]/[...route] von Mintlify war so aufgebaut, dass externe Dateien ohne Domain-Validierung geladen werden konnten
  • Angreifer konnten JavaScript in SVG-Dateien einbetten und dadurch bösartige Skripte auf Domains großer Dienste wie Discord ausführen
  • Die Schwachstelle betraf nahezu alle Kunden von Mintlify; bereits ein einziger Klick auf einen Link konnte zur Kontoübernahme führen
  • Der Vorfall gilt als Beispiel dafür, wie eine einzelne Schwachstelle in der Supply Chain zu Schäden in großem Maßstab führen kann

Entdeckung bei Discord

  • Im November 2025 begann die Untersuchung der Schwachstelle, nachdem Discord auf die KI-basierte Dokumentationsplattform Mintlify umgestellt hatte
    • Unmittelbar nach der Migration von der bisherigen Custom-Plattform zu Mintlify analysierte der Forscher die Struktur des neuen Dokumentationssystems
  • Die Dokumentations-Domain von Discord (discord.mintlify.app) legte den internen Pfad von Mintlify (/_mintlify/*) unverändert offen
    • Dieser Pfad musste für zentrale Funktionen wie Authentifizierung zwingend erreichbar sein

Aufbau der Mintlify-Plattform

  • Mintlify ist ein Dienst, der Markdown-basierte Dokumentationserstellung unterstützt und diese automatisch in Web-Dokumentation umwandelt
  • Alle Dokumentationsseiten laufen unter der Subdomain *.mintlify.app oder unter Custom-Domains
  • Intern werden Endpunkte wie /_mintlify/api/user, /_mintlify/markdown/ und /_mintlify/static/ verwendet
Anzeige

Ablauf der Schwachstellenanalyse

  • Es wurde festgestellt, dass der Endpunkt /_mintlify/_markdown/_sites/[subdomain]/[...route] Dateien anderer Dokumentationen ohne Domain-Validierung zurückgibt
    • Allerdings lieferte dieser Pfad nur nicht gerenderten Markdown-Text zurück, sodass keine Codeausführung möglich war
  • Anschließend wurde durch Analyse des Mintlify-CLI-Pakets zusätzlich der Endpunkt /_mintlify/static/[subdomain]/[...route] entdeckt
    • Dieser Pfad liefert statische Dateien aus und verwendet eine Whitelist für Dateierweiterungen
    • HTML- und JS-Dateien waren blockiert, SVG-Dateien jedoch erlaubt

Praktische Ausnutzung

  • Angreifer luden eine SVG-Datei mit eingebettetem JavaScript in ihre eigene Mintlify-Dokumentation hoch
  • Wurde die Datei auf der Discord-Domain aufgerufen (https://discord.com/_mintlify/_static/.../lmao.svg), wurde das Skript ausgeführt
  • Damit war XSS nicht nur bei Discord, sondern auf den Dokumentations-Domains aller Unternehmen möglich, die Mintlify einsetzen
Anzeige

Zusammenarbeit und Meldung

  • Der Forscher arbeitete mit anderen Sicherheitsforschern zusammen, um die Schwachstelle zu verifizieren
  • Discord deaktivierte unmittelbar nach der Meldung die gesamte Entwicklerdokumentation für zwei Stunden und kehrte anschließend zur bisherigen Plattform zurück
  • Nachdem Mintlify über Discord von der Schwachstelle erfahren hatte, richtete das Unternehmen einen Slack-Kanal zwischen dem Engineering-Team und den Forschern ein und begann sofort mit der Behebung

Auswirkungsbereich

  • Die meisten Mintlify-Kunden, darunter X (Twitter), Vercel, Cursor und Discord, waren betroffen
  • Auf den offiziellen Domains der jeweiligen Unternehmen bestand die Möglichkeit einer Kontoübernahme über einen einzelnen bösartigen Link
  • Eine einzelne Schwachstelle in der Supply Chain kann eine Kettenreaktion von Sicherheitsrisiken für Hunderte Unternehmen auslösen

Belohnung und Fazit

  • Das Forscherteam erhielt insgesamt rund 11.000 US-Dollar an Bug-Bounty-Prämien
    • Discord zahlte 4.000 US-Dollar, Mintlify zusätzlich weitere Prämien für einzelne Schwachstellen
  • Der Fall bleibt ein prägnantes Beispiel für die Bedeutung von Supply-Chain-Sicherheit und die enorme Reichweite einer einzelnen Plattform-Schwachstelle

1 Kommentare

 
GN⁺ 2025-12-19
Hacker-News-Kommentare
  • Dieser Exploit ist wirklich ein erschreckendes Beispiel
    Schon ein einziger Klick auf einen Link, etwa https://discord.com/_mintlify/static/evil/exploit.svg, führt dazu, dass JavaScript auf der Discord-Domain ausgeführt wird
    Dadurch können Session-Cookies oder Tokens gestohlen und Accounts vollständig übernommen werden; außerdem lassen sich Entwickler-Apps oder Webhooks manipulieren, Server per API löschen oder mit hinterlegten Zahlungsdaten Nitro kaufen – der Schaden ist erheblich
    Wenn man dieses Ausmaß bedenkt, wirkt eine Bug-Bounty von 4.000 $ wie eine viel zu geringe Belohnung

    • Um Cookies oder Tokens zu stehlen, müssten nicht HTTP-only-Cookies oder Tokens in localStorage vorhanden sein; ich frage mich, ob Discord tatsächlich so aufgebaut ist
      Wenn Session-Cookies immer als HTTP-only gesetzt werden, ist man gegen solche Angriffe deutlich besser geschützt
      Es ist erstaunlich, wie viele Frontend-Entwickler solche grundlegenden Sicherheitskonzepte nicht kennen
    • Ich stimme der Aussage „4.000 $ sind zu wenig“ zu
      Auf dem Schwarzmarkt hätte das vermutlich einen deutlich höheren Wert gehabt
  • Ich halte es schon an sich für einen Sicherheitsfehler, dass man Skripte in SVG-Dateien einbetten kann
    Es ist zwar cool, interaktive Demos oder Spiele in einer einzigen SVG umzusetzen, aber genau das macht sie auch zu einem Nährboden für Schwachstellen
    Deshalb verbieten viele Plattformen SVG-Uploads oder blockieren die Vorschau
    Auch bei Discord werden hochgeladene SVGs als Code angezeigt, und auf Facebook Messenger oder WeChat lassen sie sich ebenfalls nicht teilen
    Es ist schade, dass trotz Vorteilen wie kleiner Dateigröße und Auflösungsunabhängigkeit weiterhin Rasterbildformate verbreiteter sind

    • Alle SVGs sollten sowohl beim Upload als auch beim Rendern gründlich bereinigt (sanitized) werden
      Rails Active Storage sanitiziert SVGs standardmäßig nicht, also ist Vorsicht geboten
    • Das Problem mit XML External Entities (XXE) war ein ähnlicher Fall
      Siehe dazu die OWASP-Dokumentation
    • Ich frage mich, ob es reichen würde, wenn Messenger-Apps <script>-Tags einfach ignorieren würden
      Aber selbst das könnte nicht ausreichend sein
    • Das erinnert wieder an die Sicherheitsbugs aus der Flash-Zeit
    • Das größere Problem bei SVG ist, dass das Rendering-Ergebnis je nach Software unterschiedlich ausfällt
      Bei Rasterformaten gibt es dieses Problem fast nie
  • Dieser Vorfall scheint eine Momentaufnahme des heutigen AI-Startup-Ökosystems zu sein
    Ein mit VC-Geld gewachsenes AI-Dokumentations-Startup gewinnt große Kunden ohne Sicherheitsprüfung, und am Ende sind Millionen Menschen Risiken ausgesetzt
    Mintlify hat vor Kurzem noch mit einem Blogpost über seine komplexe Caching-Architektur geprahlt, scheint aber in Wirklichkeit nicht einmal grundlegende Sicherheit zu verstehen
    In so einer Situation bekommt derjenige, der die Schwachstelle findet, gerade einmal 5.000 $
    Ich denke, das zeigt, wie fragil die heutige AI-gestützte Entwicklungskultur ist

    • Tatsächlich sind nicht nur AI-Startups anfällig für solche Angriffe, sondern das ist ein strukturelles Problem des gesamten JavaScript-Ökosystems
      Komplexe Abhängigkeitsketten und die mehrfache Third-Party-DLL-Hölle sind die eigentliche Ursache
    • Die meisten XSS-Probleme entstehen durch eine Single-Domain-Struktur
      Hätte Discord die API-Dokumentation nicht direkt unter discord.com ausgeliefert, wäre dieses Problem nicht entstanden
    • Ich frage mich, warum eine Dokumentationsseite überhaupt eine komplexe Caching-Struktur braucht
      Reicht dafür nicht einfach ein CDN?
  • Es ist ein Bug, mit dem Kundenkonten vollständig übernommen werden können, und trotzdem ist die Belohnung viel zu niedrig
    In der heutigen Zeit gibt es eigentlich keinen Grund mehr, XSS zuzulassen

    • XSS ist trotzdem noch nicht verschwunden, und auch Schutzmaßnahmen wie CSP oder Trusted Types sind nicht perfekt
      Selbst bei Anubis wurden dieses Jahr zwei reflektierte XSS-Schwachstellen gefunden
      Third-Party-Abhängigkeiten müssen unbedingt geprüft werden
      Siehe dazu diese Security Advisories hier und hier
    • Im Allgemeinen haben XSS-Schwachstellen kaum Marktwert
      Außer bei großen sozialen Netzwerken ist es schwer, daraus direkten finanziellen Gewinn zu ziehen
  • Ich frage mich, ob man den 16-jährigen Hacker, der diese Schwachstelle gefunden hat, nicht fest oder in Teilzeit anstellen und kontinuierlich Sicherheitsprüfungen durchführen lassen sollte
    Schon 50.000 $ pro Jahr könnten die Sicherheit eines Unternehmens massiv verbessern

    • Aber eine Vertragsstruktur, die Forschern Leistungsdruck auferlegt, ist problematisch
      Bug-Bounties sind effizienter, weil sie ergebnisbasiert vergüten
      Wenn die Belohnung allerdings zu niedrig ist, steigt die Versuchung, die Erkenntnisse an Dritte zu verkaufen
    • Die meisten Teilnehmer an Bug-Bounty-Programmen haben unterschiedliche Spezialisierungen
      XSS, IAM, Shell-Exploits und so weiter – jeder hat sein eigenes Fachgebiet, daher ist es schwer, dass eine einzelne Person alles abdeckt
    • Ehrlich gesagt haben solche Unternehmen kein großes Interesse an Sicherheit
  • Es ist beeindruckend, dass ein 16-Jähriger so etwas entdeckt hat
    Aber es wirkt ungewohnt, XSS als Supply-Chain-Angriff zu bezeichnen

    • Die Begriffswahl scheint nicht ganz korrekt zu sein, aber angesichts des jungen Alters ist das verständlich
    • Trotzdem hat es aus Sicht der Supply Chain eine gewisse Logik
      Wenn bei einer Zwischenstufe wie Mintlify etwas schiefläuft, haben Endnutzer keinerlei Verteidigungsmöglichkeit
      Der Schadcode wird innerhalb einer vertrauenswürdigen Kette ausgeliefert, daher kann man es gewissermaßen als XSS auf Supply-Chain-Ebene sehen
  • Im Bericht des Mitarbeiters ist auch eine noch schwerwiegendere RCE-Schwachstelle enthalten
    Details dazu stehen in diesem Blog

  • Solche Fälle zeigen:
    1️⃣ Content Security Policy (CSP) muss unbedingt gesetzt werden
    2️⃣ Auf NodeJS-Servern sollte die Option --disallow-code-generation-from-strings standardmäßig verwendet werden
    Anbieter wie Vercel sollten warnen, wenn keine CSP verwendet wird
    Weitere nützliche NodeJS-Sicherheits-Flags sind in diesem Artikel zusammengefasst

  • Einen Third-Party-Service über die Hauptdomain mit Benutzer-Authentifizierung zu proxyn ist die denkbar schlechteste Entscheidung
    Mintlify hätte auf eine separate Subdomain wie dev-docs.discord.com ausgelagert werden müssen

    • Ich betreibe selbst ein Produkt ähnlich wie Mintlify, unterstütze aber weder Zugriff auf die Codebasis noch Git-Integrationen
      Selbst wenn Kunden das wollen, ist das aus Sicherheitsgründen viel zu riskant
      Allerdings gibt es wegen SEO eine große Nachfrage danach, Dokumentation auf der Hauptdomain zu hosten
      Aus Sicht von Mintlify dürfte dieser Vorfall extrem belastend sein
    • Der Kern solcher Schwachstellen ist ein Scheitern der Domain-Trennung
      Man sollte für Third-Party-Dienste eine eigene Subdomain verwenden und die Auth-Cookies der Haupt-App auf host-only beschränken
      Wenn möglich, ist sogar eine komplett andere Domain (z. B. discorddocs.com) noch sicherer
    • Unternehmen hosten Dokumentationsseiten auf der Hauptdomain oft deshalb, um in Codebeispiele automatisch echte API-Schlüssel einzufügen
      Im Vergleich zum Sicherheitsrisiko ist das aber eine viel zu gefährliche Entscheidung
  • Ich werde SVG-Dateien jetzt nie wieder öffnen
    Dass ein 16-Jähriger so etwas gefunden hat, ist wirklich legendär

    • Wenn man sie trotzdem öffnen muss, dann nur in einer Browser-Umgebung mit Sandbox