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

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

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

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

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

Категории

Все категории
Loading categories
SessionReaper-CVE-2025-54236 — PoC Magento Session Reaper - CVE-2025-54236 | Kitploit
Инструменты/GitHubGitHub/alexb616/sessionreaper-cve-2025-54236
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеRed TeamingРазработка Полезной Нагрузки
GitHub
alexb616/sessionreaper-cve-2025-54236

SessionReaper-CVE-2025-54236

PoC Magento Session Reaper - CVE-2025-54236

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

Популярное

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

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

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

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

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

SessionReaper — CVE-2025-54236

Унифицированный PoC для CVE-2025-54236 («SessionReaper») — критическая неаутентифицированная RCE в Magento 2 / Adobe Commerce через вложенную десериализацию в REST API.

  • CVSS: 9.1 (критический)
  • Корневая причина: неправильная проверка входных данных (CWE-20) в ServiceInputProcessor; примитив эксплуатации — небезопасная десериализация (CWE-502)
  • Исследователь: Daniel "Blaklis" Le Gall (ответственное раскрытие через HackerOne)
  • Название придумано: Sansec
  • Исправлено в: Adobe APSB25-88 (экстренный патч, 2025-09-09)

Только для авторизованного тестирования безопасности. Используйте исключительно против систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение.


Что делает

Инструмент выстраивает цепочку из трёх этапов, общих для всех векторов, плюс триггер:

  1. Генерация гаджета — phpggc -se -a Guzzle/FW1 <remote_path> <payload.php> создаёт сериализованный объект, который при десериализации записывает payload.php в <remote_path>.
  2. Загрузка фиктивной сессии — POST /customer/address_file/upload сохраняет сериализованный блоб как sess_<SESSID>. Magento разносит загруженные файлы адресов по первым символам имени файла, поэтому он попадает в media/customer_address/s/e/sess_<SESSID> (отсюда s/e/ в --save-path).
  3. Перенаправление save_path — вложенная REST-нагрузка конструирует Session\Config и через setSavePath() → setOption() → ini_set('session.save_path', ...) (процесс-глобальный побочный эффект) направляет обработчик сессий PHP на загруженный блоб.
  4. Триггер — запрос с Cookie: PHPSESSID=<SESSID> заставляет session_start() прочитать и unserialize() отравленный файл, активируя гаджет и записывая нагрузку.

Векторы

Все три вектора достигают одного и того же приёмника (context → urlBuilder → session → sessionConfig → savePath). Они различаются только конечной точкой, HTTP-методом и задействованным модулем Magento — это полезно, когда WAF или отключённый модуль блокирует одну конечную точку, но не другую.

МетодКонечная точкаHTTP-методТочка входа в цепочку
order/rest/<store>/V1/guest-carts/abc/orderPUTpaymentMethod → paymentData → Payment\Helper\Data
checkmo/rest/<store>/V1/guest-carts/abc/set-payment-informationPOSTpaymentMethod → paymentData → Payment\Helper\Data
address/rest/<store>/V1/guest-carts/abc/estimate-shipping-methodsPOSTaddress → addressConfig → addressHelper → Customer\Helper\Address

Для любого вектора не требуется реальная корзина. ServiceInputProcessor десериализует параметры метода во время разрешения входных данных — до того, как сервис выполнит поиск корзины, — поэтому фиктивный cartId со значением abc достигает приёмника во всех трёх случаях. Последующая ошибка «корзина не найдена» (404/500) ожидаема и подтверждает, что побочный эффект десериализации уже сработал.

Флаг --sku доступен, если вы хотите, чтобы инструмент создал настоящую гостевую корзину и добавил товар перед запуском (проверено через GraphQL). Это необязательно и не требуется для эксплуатации — он существует только для сред, где вы предпочитаете полностью реалистичный процесс оформления заказа. Если его опустить, инструмент использует фиктивную корзину abc.


Предварительные условия

  • Файловое хранилище сессий (var/session/). Сессии на базе Redis и базы данных не затрагиваются этой конкретной цепочкой RCE. Это нельзя перечислить удалённо, поэтому попытка должна выполняться вслепую.
  • /customer/address_file/upload доступен без аутентификации.
  • Целевая система без исправлений (до APSB25-88 / до hotfix 2.4.x).

Требования

  • Python 3.8+ с requests
  • phpggc — автоматически обнаруживается в PATH, стандартных местах установки или загружается как Docker-образ ambionics/phpggc в качестве запасного варианта
  • payload.php в той же директории, что и скрипт (должен начинаться с <?php)
pip install requests
git clone https://github.com/ambionics/phpggc /opt/phpggc   # or: docker pull ambionics/phpggc

Использование

# order (original vector) — no cart, no credentials
python3 session_reaper.py --host https://target.com --method order

# checkmo — payments endpoint, Spanish store scope for the REST API
python3 session_reaper.py --host https://target.com --method checkmo --api-store es

# address — shipping endpoint
python3 session_reaper.py --host https://target.com --method address --api-store all

# optional: exercise a real cart flow with a known SKU (not required)
python3 session_reaper.py --host https://target.com --method address --sku PROD-001

Параметры

ФлагПо умолчаниюОписание
--host(обязательно)Базовый URL целевой системы
--method(обязательно)address | checkmo | order
--storedefaultКод витрины для триггерного запроса (и корзины, если используется --sku)
--api-storedefaultКод витрины в URL конечной точки десериализации (all | es | default | свой)
--sku(нет)Необязательно. Если задан, создаёт настоящую гостевую корзину с этим SKU. Не требуется.
--payload-inpayload.phpPHP-нагрузка для записи на целевую систему
--payload-out/var/www/html/pub/errors/404.phpУдалённый путь записи (должен быть веб-исполняемым расположением — см. примечание ниже)
--save-pathmedia/customer_address/s/e/savePath, внедряемый в цепочку гаджета
--phpggc(авто)Явный путь к бинарному файлу phpggc
--proxyhttp://127.0.0.1:8081HTTP-прокси (например, Burp)
--no-proxyoffОтключить прокси
--username / --password(нет)Необязательные учётные данные покупателя для Bearer-токена

Области витрин

Инструмент использует два независимых кода витрины:

  • --api-store — область в десериализационном URL запроса (/rest/<api-store>/V1/guest-carts/...), где выполняется ServiceInputProcessor.
  • --store — область для триггерного запроса (GET /<store>/) и, если используется --sku, для запросов корзины.

Коды представлений витрины определяются администратором; не предполагайте, что это es/fr. Сначала перечислите активные представления витрины — запрос к несуществующей области просто завершится ошибкой.


Целевая нагрузка — почему pub/errors/404.php

Конфигурация Nginx по умолчанию в Magento передаёт fastcgi_backend только семь PHP-файлов:

index.php, get.php, static.php,
errors/report.php, errors/404.php, errors/503.php, health_check.php
Скачать инструмент