Skip to content
KitploitKITPLOIT
ToolsBlog
Log in
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2025-67906 — MISP <= 2.5.27 - Gespeichertes Cross-Site Scripting via Workflow Engine (doT.js Template Injection) | Kitploit
Tools/GitHubGitHub/franckferman/cve-2025-67906
SchwachstellenanalyseExploitationWebanwendungs-ExploitationDatenexfiltrationInformationsbeschaffungWAF-UmgehungPenetrationstestsRed Teaming
GitHubfranckferman/cve-2025-67906

CVE-2025-67906

MISP <= 2.5.27 - Gespeichertes Cross-Site Scripting via Workflow Engine (doT.js Template Injection)

Repository anzeigen
219vor 6 MonatenNoch nicht geprüft
Webseite

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE Score GCVE CWE License Python No deps

CVE-2025-67906

MISP <= 2.5.27 – Stored Cross‑Site Scripting über die Workflow‑Engine (doT.js Template Injection)

Entdeckt von Franck FERMAN

Übersicht – Grundursache – Angriffskette – Struktur – Nutzung – Behebung – Referenzen


Schwachstellenübersicht

CVE‑2025‑67906 (GCVE‑1‑2025‑0031) ist eine Stored Cross‑Site Scripting (XSS)‑Schwachstelle in MISP (Malware Information Sharing Platform) bis einschließlich Version 2.5.27.

Die Schwachstelle befindet sich in app/View/Elements/Workflows/executionPath.ctp, der Workflow‑Ausführungspfad‑Ansicht. Das name‑Feld von Workflow‑Triggern wird ohne serverseitige Bereinigung in der Datenbank gespeichert und anschließend – ohne HTML‑Escaping – über die doT.js‑Template‑Engine in das DOM eingefügt. Ein authentifizierter Angreifer kann beliebiges HTML/JavaScript injizieren, das in der Browsersitzung jedes Benutzers ausgeführt wird, der den manipulierten Workflow aufruft.

Da das Payload in der Datenbank gespeichert und bei jedem Seitenaufruf gerendert wird, ist das XSS persistent – es übersteht Seitenaktualisierungen, betrifft mehrere Benutzer und bleibt bestehen, bis der Workflow explizit gelöscht wird.

Entdeckung: Diese Schwachstelle wurde von Franck FERMAN identifiziert und verantwortungsvoll offengelegt.


CVSS‑Werte

Für diese Schwachstelle liegen mehrere CVSS‑Bewertungen vor:

QuellePunktzahlSchweregradVektor
NIST NVD9.0KritischCVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H
GCVE (CIRCL)7.1HochCVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:N/VA:N/SC:H/SI:H/SA:H
CNA (MITRE)5.4MittelCVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N

Die Abweichung der Bewertungen spiegelt unterschiedliche Einschätzungen der Auswirkungen wider. Die NIST‑NVD‑Bewertung (9.0) berücksichtigt die volle Auswirkung auf Vertraulichkeit, Integrität und Verfügbarkeit, da das XSS‑Payload mit den Sitzungsrechten des Opfers ausgeführt wird und somit eine Exfiltration auf Admin‑Ebene sowie die Manipulation von Workflows ermöglicht. Die CNA‑Bewertung (5.4) geht von einer eingeschränkten C/I‑Auswirkung eines generischen XSS aus. Der GCVE‑CVSS‑4.0‑Wert (7.1) führt Angriffsanforderungen (Privileg) und aktive Benutzerinteraktion als Modifikatoren ein.

Der Scope wird bei allen Bewertungen als Changed eingestuft, da das Payload des Angreifers (über die MISP‑API injiziert) in einem anderen Sicherheitskontext ausgeführt wird (der Browsersitzung des Opfers).


Grundursachenanalyse

Der Injektionsvektor

Die Workflow‑Engine von MISP erlaubt authentifizierten Benutzern, Workflows über die REST‑API zu erstellen und zu bearbeiten. Das Datenmodell des Workflows enthält eine trigger‑Komponente mit einem name‑Feld. Dieses Feld wird:

  1. Von der API ohne Eingabevalidierung oder HTML‑Entity‑Kodierung akzeptiert
  2. Als Rohtext in der Datenbank gespeichert (keine serverseitige Bereinigung)
  3. Im Browser über die JavaScript‑Template‑Engine doT.js gerendert

Warum doT.js hier angreifbar ist

doT.js ist eine schnelle JavaScript‑Template‑Engine. Sie verwendet {{= }} für die Interpolation, die standardmäßig kein HTML escaped. Der MISP‑Workflow‑Editor nutzt doT.js, um Trigger‑Metadaten (einschließlich des name‑Felds) in das DOM zu rendern. Enthält das name‑Feld HTML wie ``, fügt die Template‑Engine es als rohes HTML ein, und der Browser führt das eingebettete JavaScript aus.

Die Behebung erfordert entweder:

  • Umstellung auf doT.jskodierte Ausgabesyntax{{! }}`, die den Wert HTML‑escaped
  • Serverseitige Bereinigung vor dem Datenbankeintrag
  • Beides (Defense in Depth)

Injektionspunkt

POST /workflows/edit/{id}

{
  "Workflow": {
    "id": "1",
    "data": "{\"1\":{\"data\":{\"name\":\"\"}}}"
  }
}

Der name‑Wert im data‑JSON‑Feld ist der Injektionspunkt. Der gesamte Workflow‑Graph wird als JSON‑String im Request‑Body serialisiert.

Der Rendering‑Kontext: Clientseitige grafische Engine

Die Schwachstelle wird durch die architektonische Entscheidung verstärkt, eine clientseitige Template‑Engine (doT.js) für die visuelle Darstellung des Workflow‑Editors zu verwenden. Der Workflow‑Editor ist eine grafische Drag‑and‑Drop‑Oberfläche, in der jeder Trigger/Aktion als visueller Block dargestellt wird. Das name‑Feld des Triggers wird als Beschriftung innerhalb dieser grafischen Blöcke gerendert.

doT.js erstellt die visuellen Komponenten, indem es HTML‑Strings aus Templates generiert und in das DOM einfügt. Die Interpolationssyntax {{= }} erzeugt unescapierte Ausgabe – jede in das Template interpolierte Daten wird als Markup behandelt, nicht als Text. Würde dasselbe name‑Feld über element.textContent (das Eingabe als Klartext behandelt) oder über doT.jseigene kodierte Ausgabesyntax{{! }}` gerendert, wäre unabhängig vom Eingabeinhalt kein XSS möglich.

Die Angriffsfläche besteht genau deshalb, weil:

  1. Ein grafischer Editor eine umfangreiche HTML‑Rendering (gestylte Blöcke, Icons, Layouts) erfordert
  2. Die gewählte Template‑Engine (doT.js) standardmäßig unescapierte Ausgabe ({{= }}) verwendet – aus Performance‑Gründen
  3. Vom Benutzer bereitgestellte Metadaten (Triggernamen) ohne Bereinigung in diese Templates fließen
  4. Das Ergebnis ist, dass jeder im name‑Feld gespeicherte String vom Browser als HTML interpretiert wird

Dies ist ein häufiges Schwachstellenmuster in Webanwendungen, die clientseitige Template‑Engines für interaktive visuelle Oberflächen verwenden: Die Notwendigkeit umfangreichen Renderings erzeugt eine implizite Vertrauensbeziehung zwischen dem Template und seinen Datenquellen, und jede unbereinigte Benutzereingabe, die das Template erreicht, wird zu ausführbarem Code.

Warum `` und nicht <script>

Ein roher <script>‑Tag, der über Template‑Interpolation injiziert wird, wird in diesem Kontext typischerweise nicht ausgeführt. Browser führen <script>‑Elemente nicht aus, die nach dem initialen Seitenparsing (via innerHTML oder ähnlichem) in das DOM eingefügt werden. Event‑Handler‑Attribute wie onerror, onload oder onmouseover auf HTML‑Elementen umgehen diese Einschränkung, da sie Inline‑JavaScript auslösen, sobald der Browser die Attribute des Elements verarbeitet – unabhängig davon, wie das Element eingefügt wurde.

Der <img src="https://raw.githubusercontent.com/franckferman/cve-2025-67906/HEAD/x" onerror="...">‑Vektor wird bevorzugt, weil:

  • src="x" einen sofortigen Ladefehler garantiert und damit onerror ohne Benutzerinteraktion auslöst
  • Er in allen Browsern funktioniert und das Element nicht sichtbar sein muss
  • Er CSP‑script‑src‑Einschränkungen umgeht, die Inline‑<script>‑Tags blockieren, da die Ausführung über einen Event‑Handler auf einem Nicht‑Skript‑Element erfolgt

CSP‑Umgehung durch Navigation (Exfiltration)

Tool herunterladen