Source: Searchlight Cyber (slcyber.io). Contexte: billet de recherche technique de Tomais Williamson analysant CVE-2025-54236 (« SessionReaper ») dans Magento/Adobe Commerce, son patch, et un enchaînement d’exploitation conduisant à une exécution de code à distance non authentifiée sur certaines configurations.
• Nature de la faille: bypass de fonctionnalité de sécurité menant à une désérialisation imbriquée dans l’API Web de Magento. Adobe qualifie l’issue de « security feature bypass », mais la recherche montre un impact critique: RCE sur les instances utilisant un stockage de session basé sur fichiers; des configurations non-fichier (ex. Redis) peuvent aussi être concernées mais différemment.
• Analyse du patch: le correctif limite la désérialisation aux types simples et aux Api Data Objects dans ServiceInputProcessor, réduisant fortement les chaînes d’instanciation possibles. Avant patch, une chaîne typée atteint SessionManager pour contrôler session.save_path via SessionConfig et ini_set(), provoquant le chargement de sessions depuis un répertoire arbitraire.
• Chaîne d’exploitation illustrée: départ depuis des types exposés à des endpoints API non authentifiés (ex. MagentoQuoteModelQuotePayment) jusqu’à MagentoFrameworkSessionConfig via une série d’objets. L’abus de session.save_path rend possible la désérialisation de données placées côté disque. Un endpoint d’upload non authentifié est mis à profit: POST /customer/address_file/upload (avec un form_key arbitraire correspondant cookie/param) permet d’écrire un fichier sous pub/media/customer_address/... en utilisant un attribut valide (ex. country_id). Un gadget phpggc (dépendance Guzzle) sert à produire un payload de file write, menant in fine à l’écriture et l’exécution d’un script depuis le webroot. Sur instances vulnérables avec chemin de session invalide, la requête retourne 500 (contre 400 si patchée), signal utile pour distinguer l’état de patch.
• Portée et variantes: d’autres types/points d’entrée API atteignent SessionConfig (ex. QuoteAddress, QuoteItem). Pour Redis, la chaîne fichier ne s’applique pas telle quelle; la recherche n’a pas démontré d’écriture clé Redis menant à exécution dans cette version, mais souligne la large surface de classes potentiellement chaînables. Le patch actuel bride les chaînes à ~3 sauts avec les nouvelles contraintes.
• Conclusion: article de recherche technique visant à documenter la vulnérabilité, montrer une preuve de concept de RCE sur sessions fichier, et évaluer l’efficacité du patch d’Adobe qui limite désormais les types désérialisables et les setters atteignables.
TTPs observés:
- Abus de désérialisation imbriquée via API (
ServiceInputProcessor) - Manipulation de
session.save_pathparSessionConfigpour rediriger la lecture des sessions - Upload de fichier non authentifié via
/customer/address_file/uploadaveccustom_attributes[country_id] - Génération de charge utile avec phpggc (gadget Guzzle/FW1) pour écriture de fichier et RCE
- Utilisation d’API REST publiques (
PUT /rest/default/V1/guest-carts/abc/order) et cookiePHPSESSID
IOCs: Aucun indicateur réseau (IP/domaines/hashes) spécifique fourni. Endpoints mentionnés: /customer/address_file/upload, /rest/default/V1/guest-carts/abc/order.
🧠 TTPs et IOCs détectés
TTP
Abus de désérialisation imbriquée via API (ServiceInputProcessor), Manipulation de session.save_path par SessionConfig pour rediriger la lecture des sessions, Upload de fichier non authentifié via /customer/address_file/upload avec custom_attributes[country_id], Génération de charge utile avec phpggc (gadget Guzzle/FW1) pour écriture de fichier et RCE, Utilisation d’API REST publiques (PUT /rest/default/V1/guest-carts/abc/order) et cookie PHPSESSID
IOC
Endpoints mentionnés: /customer/address_file/upload, /rest/default/V1/guest-carts/abc/order
🔗 Source originale : https://slcyber.io/assetnote-security-research-center/why-nested-deserialization-is-still-harmful-magento-rce-cve-2025-54236/