Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
SessionReaper-CVE-2025-54236 — PoC Magento Session Reaper - CVE-2025-54236 | Kitploit
Ferramentas/GitHubGitHub/alexb616/sessionreaper-cve-2025-54236
Análise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebTestes de PenetraçãoRed TeamingDesenvolvimento de Payloads
GitHub
alexb616/sessionreaper-cve-2025-54236

SessionReaper-CVE-2025-54236

PoC Magento Session Reaper - CVE-2025-54236

Ver Repositório
133há 3 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

SessionReaper — CVE-2025-54236

PoC unificado para CVE-2025-54236 ("SessionReaper"), uma RCE crítica não autenticada no Magento 2 / Adobe Commerce via desserialização aninhada na API REST.

  • CVSS: 9.1 (Crítico)
  • Causa raiz: Validação de Entrada Incorreta (CWE-20) no ServiceInputProcessor; a primitiva de exploração é desserialização insegura (CWE-502)
  • Pesquisador original: Daniel "Blaklis" Le Gall (divulgação responsável via HackerOne)
  • Nome cunhado por: Sansec
  • Corrigido em: Adobe APSB25-88 (patch de emergência, 2025-09-09)

Apenas para testes de segurança autorizados. Use exclusivamente em sistemas que você possui ou tenha permissão explícita por escrito para testar.


O que faz

A ferramenta encadeia três estágios comuns a todos os vetores, mais um gatilho:

  1. Geração do gadget — phpggc -se -a Guzzle/FW1 <remote_path> <payload.php> constrói um objeto serializado que escreve payload.php em <remote_path> quando desserializado.
  2. Upload de sessão falsa — POST /customer/address_file/upload armazena o blob serializado como sess_<SESSID>. O Magento dispersa arquivos de endereço carregados pelos primeiros caracteres do nome do arquivo, então ele cai em media/customer_address/s/e/sess_<SESSID> (daí o s/e/ em --save-path).
  3. Redirecionamento do save_path — um payload REST aninhado constrói Session\Config e, via setSavePath() → setOption() → ini_set('session.save_path', ...) (um efeito colateral global do processo), aponta o manipulador de sessão do PHP para o blob carregado.
  4. Gatilho — uma requisição contendo Cookie: PHPSESSID=<SESSID> força session_start() a ler e unserialize() o arquivo envenenado, disparando o gadget e escrevendo o payload.

Vetores

Todos os três vetores alcançam o mesmo sink (context → urlBuilder → session → sessionConfig → savePath). Eles diferem apenas no endpoint, verbo HTTP e módulo Magento envolvido — útil quando um WAF ou um módulo desabilitado bloqueia um endpoint mas não outro.

MétodoEndpointVerboPonto de entrada na cadeia
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

Nenhum carrinho real é necessário para nenhum vetor. ServiceInputProcessor desserializa os parâmetros do método durante a resolução da entrada — antes do serviço invocar qualquer consulta de carrinho — então um cartId fictício de abc atinge o sink em todos os três. O erro subsequente "carrinho não encontrado" (404/500) é esperado e confirma que o efeito colateral da desserialização já ocorreu.

Uma flag --sku está disponível se você quiser que a ferramenta crie um carrinho de convidado real e adicione um produto antes de acionar (verificado via GraphQL). Isso é opcional e não necessário para exploração — existe apenas para ambientes onde você prefere um fluxo de checkout totalmente realista. Omita-a e a ferramenta usará o carrinho fictício abc.


Pré-condições

  • Armazenamento de sessão baseado em arquivo (var/session/). Sessões baseadas em Redis e banco de dados não são afetadas por esta cadeia específica de RCE. Isso não é enumerável remotamente, então deve ser tentado às cegas.
  • /customer/address_file/upload acessível sem autenticação.
  • Alvo sem patch (pré-APSB25-88 / pré-hotfix 2.4.x).

Requisitos

  • Python 3.8+ com requests
  • phpggc — detectado automaticamente no PATH, locais comuns de instalação, ou puxado como a imagem Docker ambionics/phpggc como fallback
  • payload.php no mesmo diretório que o script (deve começar com <?php)
pip install requests
git clone https://github.com/ambionics/phpggc /opt/phpggc   # or: docker pull ambionics/phpggc

Uso

# 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

Opções

FlagPadrãoDescrição
--host(obrigatório)URL base do alvo
--method(obrigatório)address | checkmo | order
--storedefaultCódigo da loja para a requisição de gatilho (e carrinho, se --sku for usado)
--api-storedefaultCódigo da loja na URL do endpoint de desserialização (all | es | default | custom)
--sku(nenhum)Opcional. Se definido, cria um carrinho de convidado real com este SKU. Não é necessário.
--payload-inpayload.phpPayload PHP a ser escrito no alvo
--payload-out/var/www/html/pub/errors/404.phpCaminho de escrita remoto (deve ser um local executável pela web — veja nota abaixo)
--save-pathmedia/customer_address/s/e/savePath injetado na cadeia do gadget
--phpggc(auto)Caminho explícito para o binário phpggc
--proxyhttp://127.0.0.1:8081Proxy HTTP (ex.: Burp)
--no-proxydesligadoDesabilitar o proxy
--username / --password(nenhum)Credenciais opcionais do cliente para um token Bearer

Escopos de loja

A ferramenta usa dois códigos de loja independentes:

  • --api-store — o escopo na URL da requisição de desserialização (/rest/<api-store>/V1/guest-carts/...), onde ServiceInputProcessor é executado.
  • --store — o escopo para a requisição de gatilho (GET /<store>/) e, se --sku for usado, para as requisições do carrinho.

Os códigos de visualização de loja são definidos pelo administrador; não assuma es/fr. Enumere as visualizações de loja ativas primeiro — uma requisição contra um escopo inexistente simplesmente falha.


Alvo do payload — por que pub/errors/404.php

A configuração padrão do Nginx do Magento só passa sete arquivos PHP para fastcgi_backend:

index.php, get.php, static.php,
errors/report.php, errors/404.php, errors/503.php, health_check.php
Baixar ferramenta