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

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

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Разработка Полезной Нагрузки
GitHubalexb616/sessionreaper-cve-2025-54236

Популярное

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

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

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

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

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

SessionReaper-CVE-2025-54236

PoC Magento Session Reaper - CVE-2025-54236

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

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 или отключённый модуль блокирует одну конечную точку, но не другую.

Для любого вектора не требуется реальная корзина. 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)
root@kitploit:~
pip install requests
git clone https://github.com/ambionics/phpggc /opt/phpggc   # or: docker pull ambionics/phpggc

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

root@kitploit:~
# 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

Параметры


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

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

  • --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-файлов:

root@kitploit:~
index.php, get.php, static.php,
errors/report.php, errors/404.php, errors/503.php, health_check.php

Любой другой .php (включая всё, что попадает в pub/media/) отклоняется и никогда не выполнится. Поэтому нагрузка должна перезаписать один из этих семи разрешённых файлов, а не создать новый. pub/errors/404.php выбран по умолчанию, потому что Magento внутренне отображает его на любой отсутствующей странице, поэтому он часто срабатывает на живой витрине.

OPSEC: полная перезапись 404.php заметна (он выполняется при каждой 404). В реальном пентесте лучше незаметно внедрить бэкдор в разрешённый файл, а не затирать его.


Примечания

  • Инструмент по умолчанию работает как гость. --username/--password нужны только в том случае, если вы хотите получить Bearer-токен для конкретной конфигурации.
  • Ожидайте 404/500 на запросе десериализации — это нормально и не означает сбой.
  • Очистка: временный файл /tmp/sess_<SESSID> удаляется при выходе.

Ссылки

  • Adobe Advisory APSB25-88
  • Sansec — раскрытие SessionReaper
  • Searchlight Cyber (Assetnote) — оригинальный PoC для RCE
  • Pentest-Tools.com — статья о разработке эксплойта
  • NVD — CVE-2025-54236

Отказ от ответственности

Предоставляется только для авторизованных исследований и тестирования безопасности. Автор не несёт ответственности за неправомерное использование. Не запускайте против систем без явного разрешения.

Скачать инструмент
МетодКонечная точка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
ФлагПо умолчаниюОписание
--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-токена