the_open_door
café
ESEN
← Volver al índice

Magento Shoplift (CVE-2015-1397)

Shoplift (CVE-2015-1397) es una vulnerabilidad crítica de Magento Community y Enterprise anteriores al parche SUPEE-5344 (febrero de 2015). Permite a un atacante no autenticado crear una cuenta de administrador en la tienda con una sola petición HTTP, lo que en la práctica equivale a comprometer todo el panel.

El fallo vive en el endpoint index.php/admin/Cms_Wysiwyg/directive/index/. Magento procesa un parámetro ___directive codificado en base64 sin sanear correctamente un filtro de producto (popularity[from], popularity[to], popularity[field_expr]), lo que deja inyectar SQL en una consulta interna. El payload clásico encadena un INSERT en las tablas admin_user y admin_role:

SET @SALT = 'rp';
SET @PASS = CONCAT(MD5(CONCAT(@SALT, '<password>')), CONCAT(':', @SALT));
INSERT INTO admin_user (firstname, lastname, email, username, password, ...) VALUES (...);
INSERT INTO admin_role (parent_id, tree_level, sort_order, role_type, user_id, role_name) VALUES (...);

Con eso se crea un usuario (en el exploit público 37977.py, las credenciales por defecto son forme:forme) con rol de administrador. La contraseña se guarda como md5(salt+pass):salt, el formato heredado de Magento 1.x.

searchsploit -m 37977
python2 37977.py http://<ip>/    # crea el admin forme:forme

Detalle práctico. Los exploits antiguos usan una sintaxis de comentario SQL (-- ) que algunas versiones recientes de MySQL/MariaDB rechazan; a veces hay que limpiar el comentario del payload y ajustar la variable target para que apunte al index.php correcto. Una vez creado el admin, el acceso al panel suele ser la antesala de RCE (por ejemplo, el ataque FrogHopper o la subida de plantillas), por lo que conecta de forma natural con el RCE por subida de fichero.

Cómo detectarlo. La firma en el log de acceso es una petición (habitualmente POST) al endpoint index.php/admin/Cms_Wysiwyg/directive/index/ con un parámetro ___directive en base64 y, al descodificarlo, los filtros popularity[field_expr]/popularity[from] con SQL (SET @SALT, INSERT INTO admin_user): ninguna operación legítima del panel usa esa combinación, y un WAF con reglas de Shoplift la bloquea. La confirmación es la aparición de una fila nueva en admin_user/admin_role (auditoría de la BD) sin el alta correspondiente en los logs de la aplicación, o un primer login de ese admin desde una IP externa.

Defensa. Aplicar SUPEE-5344 (o actualizar a una rama soportada), restringir el acceso al panel /admin por IP/VPN, y monitorizar inserciones anómalas en admin_user. Magento 1.x está fuera de soporte: lo razonable es migrar.

Herramientasmagescan

Máquinas donde se aplica