Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/saiteja-erukude/cve-2026-47103-python-statemachine-rce
Génération de PayloadsAnalyse des VulnérabilitésExploitationTests d'Intrusion
GitHubsaiteja-erukude/cve-2026-47103-python-statemachine-rce

CVE-2026-47103-python-statemachine-rce

Python StateMachine 3.0.0 < 3.2.0 RCE via une évaluation non sécurisée de SCXML <data expr> et une injection Python eval().

Voir le dépôt
28il y a 9 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-47103 : Exécution de code à distance dans Python StateMachine via l'injection eval() de SCXML

Gravité : Critique, CVSS 4.0 9.3, CVSS 3.1 9.8 (attribuée par VulnCheck, le CNA)

Vecteur (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

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

Affecté : Python StateMachine >= 3.0.0, < 3.2.0

Corrigé dans : 3.2.0

CWE : CWE-95 (Neutralisation incorrecte des directives dans le code évalué dynamiquement, injection eval) ; correspond également à CWE-94 (Contrôle incorrect de la génération de code, injection de code)

Découvert et signalé par : Sai Teja Erukude

Publié : 17 juin 2026


Résumé

Les versions 3.0.0 à 3.2.0 exclue de Python StateMachine contiennent une vulnérabilité d'exécution de code à distance dans le chemin de traitement SCXML.

Le SCXMLProcessor accepte les documents SCXML et conserve les attributs d'expression tels que <data expr="...">. Dans les versions vulnérables, ces chaînes d'expression passent par le chemin de traitement du datamodel SCXML et atteignent finalement la fonction intégrée eval() de Python sans isolation (sandbox).

Un attaquant capable de fournir ou d'influencer un document SCXML peut placer du code Python à l'intérieur d'un attribut <data expr="...">. Lorsque l'application consommatrice analyse le fichier SCXML et démarre le processeur, l'expression est évaluée dans le contexte du processus Python hôte.

Impact

Un attaquant peut exécuter du code Python arbitraire si une application vulnérable traite du contenu SCXML contrôlé par l'attaquant.

L'exposition peut être distante ou locale selon la manière dont l'application consommatrice reçoit les documents SCXML. Les chemins d'entrée à risque incluent :

  • Les fichiers SCXML téléversés.
  • Les définitions de workflow ou de machine à états contrôlées par l'utilisateur.
  • Les fichiers de configuration chargés depuis des emplacements non fiables.
  • Le contenu SCXML fourni par des plugins, extensions ou intégrations.
  • Toute fonctionnalité exposée au réseau qui accepte ou génère du SCXML à partir d'une entrée utilisateur.

Une exploitation réussie peut permettre :

  • La lecture ou la modification de fichiers accessibles au processus hôte.
  • L'accès aux variables d'environnement et aux secrets de l'application.
  • L'appel de services internes joignables depuis l'hôte.
  • La perturbation ou le remplacement du comportement de l'application.

Chemin affecté

La chaîne d'appels vulnérable signalée à VulnCheck est :

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

Le problème est déclenché lorsqu'un élément de datamodel SCXML analysé est évalué au démarrage du processeur.

Détail technique

Le flux de contrôle vulnérable présente deux défaillances de frontière de confiance :

  1. Le processeur SCXML accepte le texte d'expression provenant d'un document SCXML.
  2. Le texte d'expression est évalué avec le eval() Python brut.

Le PoC utilise un attribut <data expr="..."> car ce chemin s'exécute pendant SCXMLProcessor.start(). Passer un dictionnaire globals vide à eval() ne désactive pas les builtins Python ; Python peut toujours injecter des builtins utilisables dans le contexte d'évaluation. Par conséquent, une expression peut accéder à __import__ et exécuter du code Python.

Une charge utile de preuve inoffensive écrit un fichier marqueur local :

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

Le marqueur n'est créé qu'après l'analyse du document SCXML et l'évaluation de l'expression du datamodel par start().

Preuve de concept

package_builder.py génère un fichier SCXML local contrôlé par l'attaquant à l'emplacement malicious-charts/data_expr_start.scxml. Le fichier généré contient une charge utile <data expr> bénigne qui écrit marker.txt dans ce répertoire de PoC.

run_poc.py n'installe aucun hook et ne modifie pas le paquet cible. Il importe le paquet publié python-statemachine==3.1.2, analyse le fichier SCXML généré avec SCXMLProcessor.parse_scxml_file(...), démarre le processeur et affiche les preuves du marqueur avant/après.

À exécuter uniquement dans un environnement de test local :

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

Preuves attendues sur les versions vulnérables :

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

Le comportement important est que marker.txt n'existe pas avant start(), puis existe après, ce qui prouve que l'expression SCXML s'est exécutée à l'intérieur du processus Python hôte.

La charge utile est volontairement inoffensive. Elle écrit uniquement cette chaîne de marqueur locale :

python_statemachine_scxml_data_expr_eval_triggered

Il ne lance pas de shell, ne se connecte pas à un service réseau, ne lit pas de secrets, ne supprime pas de données et ne modifie pas de fichiers en dehors du répertoire PoC.

Remédiation

Mettez à niveau vers Python StateMachine 3.2.0 ou une version ultérieure.

Une correction durable devrait éviter d'évaluer le texte d'expression SCXML contrôlé par l'attaquant avec le eval() Python brut. Les approches plus sûres incluent :

  • Remplacer le eval() brut par un évaluateur d'expressions restreint.
  • Traiter l'évaluation complète d'expressions Python comme un mode explicite de confiance en l'entrée.
  • Désactiver l'évaluation Python par défaut pour les SCXML provenant de sources non fiables.
  • Rejeter ou assainir les attributs d'expression SCXML dangereux avant le traitement.

Si une mise à niveau immédiate n'est pas possible :

  • Ne traitez pas de documents SCXML provenant d'utilisateurs non fiables.
  • N'exposez pas les fonctionnalités de téléversement SCXML ou de définition de workflow aux clients non authentifiés.
  • Validez les fichiers SCXML avant qu'ils n'atteignent SCXMLProcessor.
  • Exécutez le traitement SCXML dans un environnement restreint et isolé avec des privilèges minimaux.

Chronologie de divulgation

DateÉvénement
22 mai 2026Vulnérabilité soumise à VulnCheck
26 mai 2026VulnCheck a initié la divulgation ; CVE-2026-47103 attribué provisoirement
17 juin 2026CVE-2026-47103 publié

Crédit

Découverte et signalée par Sai Teja Erukude.

La divulgation a été coordonnée via VulnCheck.

Références

  • Enregistrement CVE : https://www.cve.org/CVERecord?id=CVE-2026-47103
  • NVD : https://nvd.nist.gov/vuln/detail/CVE-2026-47103
  • Avis VulnCheck : https://www.vulncheck.com/advisories/python-statemachine-rce-via-scxml-eval-injection
  • Avis GitHub : https://github.com/fgmacedo/python-statemachine/security/advisories/GHSA-v4jc-pm6r-3vj8
  • Notes de version de Python StateMachine 3.2.0 : https://github.com/fgmacedo/python-statemachine/releases/tag/v3.2.0
  • Projet Python StateMachine : https://github.com/fgmacedo/python-statemachine
Télécharger l’outil