Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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
Tools/GitHubGitHub/saiteja-erukude/cve-2026-47103-python-statemachine-rce
Payload-GenerierungSchwachstellenanalyseExploitationPenetrationstests
GitHubsaiteja-erukude/cve-2026-47103-python-statemachine-rce

CVE-2026-47103-python-statemachine-rce

Python StateMachine 3.0.0 < 3.2.0 RCE durch unsichere Auswertung von SCXML-<data-expr> und Injektion in Python eval().

Repository anzeigen

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
28vor 9 TagenNoch nicht geprüft
Teilen

CVE-2026-47103: Python StateMachine Remote Code Execution über SCXML-eval()-Injection

Schweregrad: Kritisch, CVSS 4.0 9.3, CVSS 3.1 9.8 (vergeben von VulnCheck, der CNA)

Vektor (v4.0): CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Vektor (v3.1): CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Betroffen: Python StateMachine >= 3.0.0, < 3.2.0

Behoben in: 3.2.0

CWE: CWE-95 (Improper Neutralization of Directives in Dynamically Evaluated Code, Eval Injection); ordnet sich außerdem CWE-94 zu (Improper Control of Generation of Code, Code Injection)

Entdeckt und gemeldet von: Sai Teja Erukude

Veröffentlicht: 17. Juni 2026


Zusammenfassung

Python StateMachine-Versionen 3.0.0 vor 3.2.0 enthalten eine Remote-Code-Execution-Schwachstelle im SCXML-Verarbeitungspfad.

Der SCXMLProcessor akzeptiert SCXML-Dokumente und übernimmt Ausdrucksattribute wie <data expr="...">. In anfälligen Versionen durchlaufen diese Ausdruckszeichenketten den SCXML-Datamodel-Verarbeitungspfad und erreichen schließlich Pythons eingebaute eval()-Funktion ohne Sandboxing.

Ein Angreifer, der ein SCXML-Dokument bereitstellen oder beeinflussen kann, kann Python-Code in einem <data expr="...">-Attribut platzieren. Wenn die konsumierende Anwendung die SCXML-Datei parst und den Prozessor startet, wird der Ausdruck im Kontext des hostenden Python-Prozesses ausgewertet.

Auswirkung

Ein Angreifer kann beliebigen Python-Code ausführen, wenn eine anfällige Anwendung vom Angreifer kontrollierte SCXML-Inhalte verarbeitet.

Die Exposition kann remote oder lokal sein, je nachdem, wie die konsumierende Anwendung SCXML-Dokumente empfängt. Riskante Eingabepfade umfassen:

  • Hochgeladene SCXML-Dateien.
  • Benutzerkontrollierte Workflow- oder State-Machine-Definitionen.
  • Konfigurationsdateien, die von nicht vertrauenswürdigen Orten geladen werden.
  • SCXML-Inhalte, die von Plugins, Erweiterungen oder Integrationen bereitgestellt werden.
  • Jede netzwerkseitig erreichbare Funktion, die SCXML aus Benutzereingaben akzeptiert oder generiert.

Eine erfolgreiche Ausnutzung kann ermöglichen:

  • Lesen oder Ändern von Dateien, auf die der hostende Prozess zugreifen kann.
  • Zugriff auf Umgebungsvariablen und Anwendungsgeheimnisse.
  • Aufrufen interner Dienste, die vom Host aus erreichbar sind.
  • Stören oder Ersetzen des Anwendungsverhaltens.

Betroffener Pfad

Die an VulnCheck gemeldete anfällige Aufrufkette lautet:

SCXMLProcessor.parse_scxml_file()
SCXMLProcessor.process_definition()
create_datamodel_action_callable()
_create_dataitem_callable()
_eval()
eval()

Das Problem wird ausgelöst, wenn ein geparstes SCXML-Datamodel-Element während des Prozessorstarts ausgewertet wird.

Technisches Detail

Der anfällige Kontrollfluss weist zwei Trust-Boundary-Fehler auf:

  1. Der SCXML-Prozessor akzeptiert Ausdruckstext aus einem SCXML-Dokument.
  2. Der Ausdruckstext wird mit rohem Python-eval() ausgewertet.

Das PoC verwendet ein <data expr="...">-Attribut, da dieser Pfad während SCXMLProcessor.start() ausgeführt wird. Die Übergabe eines leeren Globals-Dictionarys an eval() deaktiviert die Python-Builtins nicht; Python kann weiterhin nutzbare Builtins in den Auswertungskontext injizieren. Infolgedessen kann ein Ausdruck auf __import__ zugreifen und Python-Code ausführen.

Eine harmlose Proof-Payload schreibt eine lokale Marker-Datei:

<data id="x" expr="__import__('pathlib').Path(...).write_text(...)"/>

Die Markierung wird erst erstellt, nachdem das SCXML-Dokument geparst wurde und start() den Datamodel-Ausdruck auswertet.

Proof of Concept

package_builder.py erzeugt eine lokale, vom Angreifer kontrollierte SCXML-Datei unter malicious-charts/data_expr_start.scxml. Die erzeugte Datei enthält eine harmlose <data expr>-Payload, die marker.txt in diesem PoC-Verzeichnis schreibt.

run_poc.py installiert keine Hooks und verändert das Zielpaket nicht. Es importiert das veröffentlichte Paket python-statemachine==3.1.2, parst die erzeugte SCXML-Datei mit SCXMLProcessor.parse_scxml_file(...), startet den Prozessor und gibt den Nachweis der Markierung vor/nach aus.

Nur in einer lokalen Testumgebung ausführen:

python -m venv .venv
.venv\Scripts\activate
python -m pip install -r requirements.txt
python run_poc.py

Erwartete Nachweise bei anfälligen Versionen:

statemachine_version: 3.1.2
installed_package: True
data_marker_before_start: False
data_marker_after_start: True
marker_contents:
python_statemachine_scxml_data_expr_eval_triggered
success: True

Das wichtige Verhalten besteht darin, dass marker.txt vor start() nicht existiert und danach existiert, was beweist, dass der SCXML-Ausdruck innerhalb des hostenden Python-Prozesses ausgeführt wurde.

Die Payload ist absichtlich harmlos. Sie schreibt lediglich diese lokale Marker-Zeichenkette:

python_statemachine_scxml_data_expr_eval_triggered

Es startet keine Shell, verbindet sich mit keinem Netzwerkdienst, liest keine Secrets, löscht keine Daten und ändert keine Dateien außerhalb des PoC-Verzeichnisses.

Behebung

Aktualisieren Sie auf Python StateMachine 3.2.0 oder höher.

Eine dauerhafte Lösung sollte vermeiden, vom Angreifer kontrollierten SCXML-Ausdruckstext mit rohem Python-eval() auszuwerten. Sicherere Ansätze umfassen:

  • Ersetzen von rohem eval() durch einen eingeschränkten Ausdrucksauswerter.
  • Behandeln der vollständigen Python-Ausdrucksauswertung als expliziten Modus für vertrauenswürdige Eingaben.
  • Deaktivieren der Python-Auswertung standardmäßig für SCXML aus nicht vertrauenswürdigen Quellen.
  • Ablehnen oder Bereinigen gefährlicher SCXML-Ausdrucksattribute vor der Verarbeitung.

Wenn ein sofortiges Upgrade nicht möglich ist:

  • Verarbeiten Sie keine SCXML-Dokumente von nicht vertrauenswürdigen Benutzern.
  • Stellen Sie SCXML-Upload- oder Workflow-Definitionsfunktionen nicht für nicht authentifizierte Clients bereit.
  • Validieren Sie SCXML-Dateien, bevor sie SCXMLProcessor erreichen.
  • Führen Sie die SCXML-Verarbeitung in einer eingeschränkten, isolierten Umgebung mit minimalen Berechtigungen aus.

Offenlegungszeitplan

DatumEreignis
22. Mai 2026Schwachstelle bei VulnCheck eingereicht
26. Mai 2026VulnCheck leitete die Offenlegung ein; CVE-2026-47103 vorläufig zugewiesen
17. Juni 2026CVE-2026-47103 veröffentlicht

Danksagung

Entdeckt und gemeldet von Sai Teja Erukude.

Die Offenlegung wurde über VulnCheck koordiniert.

Referenzen

  • CVE-Eintrag: https://www.cve.org/CVERecord?id=CVE-2026-47103
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-47103
  • VulnCheck-Advisory: https://www.vulncheck.com/advisories/python-statemachine-rce-via-scxml-eval-injection
  • GitHub-Advisory: https://github.com/fgmacedo/python-statemachine/security/advisories/GHSA-v4jc-pm6r-3vj8
  • Versionshinweise zu Python StateMachine 3.2.0: https://github.com/fgmacedo/python-statemachine/releases/tag/v3.2.0
  • Python StateMachine-Projekt: https://github.com/fgmacedo/python-statemachine
Tool herunterladen