Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-47103-python-statemachine-rce — RCE в Python StateMachine 3.0.0 < 3.2.0 через небезопасное вычисление <data expr> в SCXML и инъекцию Python eval(). | Kitploit
Инструменты/GitHubGitHub/saiteja-erukude/cve-2026-47103-python-statemachine-rce
Генерация полезной нагрузкиАнализ уязвимостейЭксплуатацияТестирование на Проникновение
GitHubsaiteja-erukude/cve-2026-47103-python-statemachine-rce

CVE-2026-47103-python-statemachine-rce

RCE в Python StateMachine 3.0.0 < 3.2.0 через небезопасное вычисление <data expr> в SCXML и инъекцию Python eval().

Репозиторий
191 месяц назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-47103: Удалённое выполнение кода в Python StateMachine через инъекцию eval() в SCXML

Уровень критичности: Критический, CVSS 4.0 9.3, CVSS 3.1 9.8 (присвоен VulnCheck, CNA)

Вектор (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

Вектор (v3.1): CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Затронуты: Python StateMachine >= 3.0.0, < 3.2.0

Исправлено в: 3.2.0

CWE: CWE-95 (Improper Neutralization of Directives in Dynamically Evaluated Code, Eval Injection); также относится к CWE-94 (Improper Control of Generation of Code, Code Injection)

Сообщил: Sai Teja Erukude

CNA: VulnCheck

Опубликовано: 17 июня 2026 г.


Краткое описание

Версии Python StateMachine 3.0.0 до 3.2.0 содержат уязвимость удалённого выполнения кода в пути обработки SCXML.

SCXMLProcessor принимает документы SCXML и сохраняет атрибуты выражений, такие как <data expr="...">. В уязвимых версиях эти строки выражений проходят через путь обработки модели данных SCXML и в конечном итоге попадают во встроенную функцию Python eval() без песочницы.

Злоумышленник, который может предоставить или повлиять на документ SCXML, может разместить код Python внутри атрибута <data expr="...">. Когда потребляющее приложение разбирает SCXML-файл и запускает процессор, выражение вычисляется в контексте хост-процесса Python.

Воздействие

Злоумышленник может выполнить произвольный код Python, если уязвимое приложение обрабатывает SCXML-содержимое, контролируемое атакующим.

Уровень опасности может быть удалённым или локальным в зависимости от того, как потребляющее приложение получает документы SCXML. Рискованные пути ввода включают:

  • Загруженные SCXML-файлы.
  • Определения рабочих процессов или конечных автоматов, контролируемые пользователем.
  • Файлы конфигурации, загружаемые из недоверенных источников.
  • SCXML-содержимое, предоставляемое плагинами, расширениями или интеграциями.
  • Любая сетевая функция, которая принимает или генерирует SCXML на основе пользовательского ввода.

Успешная эксплуатация может позволить:

  • Чтение или изменение файлов, доступных хост-процессу.
  • Доступ к переменным окружения и секретам приложения.
  • Вызов внутренних сервисов, доступных с хоста.
  • Нарушение или подмена поведения приложения.

Уязвимый путь

Уязвимая цепочка вызовов, переданная в VulnCheck:

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

Проблема возникает, когда проанализированный элемент модели данных SCXML вычисляется во время запуска процессора.

Технические подробности

Уязвимый поток управления имеет два нарушения границ доверия:

  1. Процессор SCXML принимает текст выражения из документа SCXML.
  2. Текст выражения вычисляется с помощью необработанной eval() Python.

PoC использует атрибут <data expr="...">, потому что этот путь выполняется во время SCXMLProcessor.start(). Передача пустого словаря globals в eval() не отключает встроенные функции Python; Python всё равно может внедрить используемые встроенные функции в контекст вычисления. В результате выражение может получить доступ к __import__ и выполнить код Python.

Безвредная проверочная полезная нагрузка записывает локальный файл-маркер:

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

Маркер создаётся только после того, как документ SCXML разобран и start() вычисляет выражение модели данных.

Proof of Concept

package_builder.py создаёт локальный SCXML-файл, контролируемый атакующим, по пути malicious-charts/data_expr_start.scxml. Сгенерированный файл содержит безвредную полезную нагрузку <data expr>, которая записывает marker.txt в каталог этого PoC.

run_poc.py не устанавливает перехватчиков и не изменяет целевой пакет. Он импортирует опубликованный пакет python-statemachine==3.1.2, разбирает сгенерированный SCXML-файл с помощью SCXMLProcessor.parse_scxml_file(...), запускает процессор и выводит доказательства наличия маркера до/после.

Запускать только в локальной тестовой среде:

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

Ожидаемые результаты на уязвимых версиях:

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

Важное поведение заключается в том, что marker.txt не существует до start(), но существует после, что доказывает выполнение SCXML-выражения внутри хост-процесса Python.

Полезная нагрузка намеренно безвредна. Она только записывает эту локальную строку-маркер:

python_statemachine_scxml_data_expr_eval_triggered

Она не запускает оболочку, не подключается к сетевому сервису, не читает секреты, не удаляет данные и не изменяет файлы за пределами каталога PoC.

Устранение

Обновитесь до Python StateMachine 3.2.0 или более поздней версии.

Надёжное исправление должно избегать вычисления текста SCXML-выражений, контролируемого атакующим, с помощью необработанной eval() Python. Более безопасные подходы включают:

  • Замену eval() на ограниченный вычислитель выражений.
  • Рассмотрение полного вычисления выражений Python как явного режима доверенного ввода.
  • Отключение вычисления Python по умолчанию для SCXML из недоверенных источников.
  • Отклонение или очистку опасных атрибутов выражений SCXML перед обработкой.

Если немедленное обновление невозможно:

  • Не обрабатывайте документы SCXML от недоверенных пользователей.
  • Не предоставляйте неаутентифицированным клиентам функции загрузки SCXML или определения рабочих процессов.
  • Проверяйте SCXML-файлы до того, как они попадут в SCXMLProcessor.
  • Запускайте обработку SCXML в ограниченной изолированной среде с минимальными привилегиями.

График раскрытия

ДатаСобытие
22 мая 2026 г.Уязвимость отправлена в VulnCheck
26 мая 2026 г.VulnCheck начал раскрытие; предварительно выделен CVE-2026-47103
17 июня 2026 г.Опубликован CVE-2026-47103

Авторство

Обнаружил и сообщил Sai Teja Erukude, координировалось через VulnCheck.

Ссылки

  • Запись CVE: https://www.cve.org/CVERecord?id=CVE-2026-47103
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-47103
  • Рекомендация VulnCheck: https://www.vulncheck.com/advisories/python-statemachine-rce-via-scxml-eval-injection
  • Рекомендация GitHub: https://github.com/fgmacedo/python-statemachine/security/advisories/GHSA-v4jc-pm6r-3vj8
  • Примечания к выпуску Python StateMachine 3.2.0: https://github.com/fgmacedo/python-statemachine/releases/tag/v3.2.0
  • Проект Python StateMachine: https://github.com/fgmacedo/python-statemachine
Скачать инструмент