Skip to content
KitploitKITPLOIT
OutilsBlog
Log in
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
SessionReaper-CVE-2025-54236 — Preuve de concept Magento Session Reaper - CVE-2025-54236 | Kitploit
Outils/GitHubGitHub/alexb616/sessionreaper-cve-2025-54236
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebTests d'IntrusionRed TeamingDéveloppement de Charges Utiles
GitHub
alexb616/sessionreaper-cve-2025-54236

SessionReaper-CVE-2025-54236

Preuve de concept Magento Session Reaper - CVE-2025-54236

Voir le dépôt
121il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

SessionReaper — CVE-2025-54236

PoC unifié pour CVE-2025-54236 (« SessionReaper »), une RCE non authentifiée critique dans Magento 2 / Adobe Commerce via une désérialisation imbriquée dans l'API REST.

  • CVSS : 9,1 (Critique)
  • Cause racine : Validation d’entrée incorrecte (CWE-20) dans ServiceInputProcessor ; la primitive d’exploitation est une désérialisation non sécurisée (CWE-502)
  • Chercheur original : Daniel « Blaklis » Le Gall (divulgation responsable via HackerOne)
  • Nom inventé par : Sansec
  • Corrigé dans : Adobe APSB25-88 (correctif d’urgence, 2025-09-09)

Pour les tests de sécurité autorisés uniquement. Utilisez exclusivement contre des systèmes que vous possédez ou pour lesquels vous avez une autorisation écrite explicite.


Ce qu’il fait

L’outil enchaine trois étapes communes à chaque vecteur, plus un déclencheur :

  1. Génération du gadget — phpggc -se -a Guzzle/FW1 <remote_path> <payload.php> construit un objet sérialisé qui écrit payload.php dans <remote_path> lors de sa désérialisation.
  2. Téléversement de session factice — POST /customer/address_file/upload stocke le blob sérialisé sous sess_<SESSID>. Magento disperse les fichiers d’adresse téléversés selon les premiers caractères du nom de fichier, donc il aboutit dans media/customer_address/s/e/sess_<SESSID> (d’où le s/e/ dans --save-path).
  3. Redirection save_path — une charge utile REST imbriquée construit Session\Config et, via setSavePath() → setOption() → ini_set('session.save_path', ...) (un effet de bord global au processus), redirige le gestionnaire de session PHP vers le blob téléversé.
  4. Déclencheur — une requête transportant Cookie: PHPSESSID=<SESSID> force session_start() à lire et unserialize() le fichier empoisonné, déclenchant le gadget et écrivant la charge utile.

Vecteurs

Les trois vecteurs atteignent le même puits (context → urlBuilder → session → sessionConfig → savePath). Ils diffèrent uniquement par le point de terminaison, le verbe HTTP et le module Magento impliqué — utile lorsqu’un WAF ou un module désactivé bloque un point de terminaison mais pas un autre.

MéthodePoint de terminaisonVerbePoint d’entrée dans la chaîne
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

Aucun panier réel n’est nécessaire pour aucun vecteur. ServiceInputProcessor désérialise les paramètres de méthode lors de la résolution d’entrée — avant que le service n’invoque une quelconque recherche de panier — donc un cartId factice abc atteint le puits sur les trois. L’erreur « panier introuvable » (404/500) qui s’ensuit est attendue et confirme que l’effet de bord de désérialisation s’est déjà déclenché.

Un indicateur --sku est disponible si vous souhaitez que l’outil crée un véritable panier invité et ajoute un produit avant le déclenchement (vérifié via GraphQL). Ceci est optionnel et non nécessaire pour l’exploitation — il existe uniquement pour les environnements où vous préférez un flux de paiement totalement réaliste. Ommettez-le et l’outil utilise le panier factice abc.


Prérequis

  • Stockage de session basé sur fichiers (var/session/). Les sessions basées sur Redis et bases de données ne sont pas affectées par cette chaîne RCE spécifique. Ce n’est pas énumérable à distance, donc doit être tenté à l’aveugle.
  • /customer/address_file/upload accessible sans authentification.
  • Cible non corrigée (pré-APSB25-88 / pré-2.4.x hotfix).

Prérequis logiciels

  • Python 3.8+ avec requests
  • phpggc — détecté automatiquement dans le PATH, les emplacements d’installation courants, ou extrait comme image Docker ambionics/phpggc en solution de repli
  • payload.php dans le même répertoire que le script (doit commencer par <?php)
pip install requests
git clone https://github.com/ambionics/phpggc /opt/phpggc   # ou : docker pull ambionics/phpggc

Utilisation

# order (vecteur original) — pas de panier, pas d’identifiants
python3 session_reaper.py --host https://target.com --method order

# checkmo — point de terminaison de paiement, portée de la boutique espagnole pour l’API REST
python3 session_reaper.py --host https://target.com --method checkmo --api-store es

# address — point de terminaison d’expédition
python3 session_reaper.py --host https://target.com --method address --api-store all

# optionnel : utiliser un vrai panier avec un SKU connu (non requis)
python3 session_reaper.py --host https://target.com --method address --sku PROD-001

Options

IndicateurValeur par défautDescription
--host(requis)URL de base de la cible
--method(requis)address | checkmo | order
--storedefaultCode de boutique pour la requête de déclenchement (et panier, si --sku utilisé)
--api-storedefaultCode de boutique dans l’URL du point de terminaison de désérialisation (all | es | default | personnalisé)
--sku(aucun)Optionnel. S’il est défini, crée un vrai panier invité avec ce SKU. Non requis.
--payload-inpayload.phpCharge utile PHP à écrire sur la cible
--payload-out/var/www/html/pub/errors/404.phpChemin d’écriture distant (doit être un emplacement exécutable par le web — voir note ci-dessous)
--save-pathmedia/customer_address/s/e/savePath injecté dans la chaîne du gadget
--phpggc(auto)Chemin explicite vers le binaire phpggc
--proxyhttp://127.0.0.1:8081Proxy HTTP (ex. Burp)
--no-proxydésactivéDésactiver le proxy
--username / --password(aucun)Identifiants client optionnels pour un jeton Bearer

Portées de boutique

L’outil utilise deux codes de boutique indépendants :

  • --api-store — la portée dans l’URL de la requête de désérialisation (/rest/<api-store>/V1/guest-carts/...), où ServiceInputProcessor s’exécute.
  • --store — la portée pour la requête de déclenchement (GET /<store>/) et, si --sku est utilisé, pour les requêtes de panier.

Les codes de vue de boutique sont définis par l’administrateur ; ne présumez pas es/fr. Énumérez d’abord les vues de boutique actives — une requête contre une portée inexistante échoue simplement.


Cible de la charge utile — pourquoi pub/errors/404.php

Télécharger l’outil