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().

Репозиторий
289 дней назадЕщё не проверено

Популярное

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

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

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

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

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

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 (Ненадлежащая нейтрализация директив в динамически вычисляемом коде, инъекция eval); также соответствует CWE-94 (Ненадлежащий контроль генерации кода, инъекция кода)

Обнаружено и сообщено: Sai Teja Erukude

Опубликовано: 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()

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

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

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

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

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

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

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

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

Доказательство концепции

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-выражений, контролируемых злоумышленником, с помощью необработанного Python eval(). Более безопасные подходы включают:

  • Замену необработанного 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
Скачать инструмент