
# Laboratorio Docker que demuestra CVE-2026-17532, un XSS reflejado no autenticado en Seraphinite Accelerator que se encadena a RCE mediante la sesión de administrador, con script de explotación y web shell.
Un laboratorio Docker para CVE-2026-17532, un XSS reflejado no autenticado en el plugin de WordPress Seraphinite Accelerator que encadena hasta ejecución remota de código en el momento en que un administrador con sesión iniciada abre un enlace manipulado.
Artículo completo: BLOG
python3 o php en el host (solo para construir la URL del exploit - exploit.sh usa el que esté presente)docker compose down -v # limpia datos antiguos
docker compose up -d
docker compose logs -f wpcli
Espera a que aparezca LAB READY, luego pulsa Ctrl-C. WordPress ahora está en con el plugin vulnerable activo y el caché de páginas habilitado.
http://127.0.0.1:8080El contenedor wpcli es un instalador de un solo uso; se cierra después de la configuración. Eso es normal.
Inicia sesión como administrador en http://127.0.0.1:8080/wp-admin
adminadmin-lab-pwConstruye la URL manipulada y ábrela en el mismo navegador:
./exploit.sh # o: ./exploit.sh http://127.0.0.1:8080
La página se cuelga durante ~5 segundos - eso es un sleep( 5 ) literal en la rama selfTest del plugin, no un laboratorio roto. Luego el XSS se ejecuta, escribe el web shell usando tu sesión de administrador y registra la URL del shell en la consola del navegador.
http://127.0.0.1:8080/wp-content/plugins/hello.php?c=id
O ábrelo sin ?c= para un cuadro de entrada interactivo.
xss.js se ejecuta en la sesión del administrador y en el mismo origen, por lo que puede:
GET wp-admin/plugin-editor.php y extraer el nonce de edición de un solo uso del HTML.POST a admin-ajax.php con action=edit-theme-plugin-file, escribiendo un web shell PHP en hello.php.¿Por qué hello.php? Porque está inactivo. Cuando editas un plugin activo y el cambio provocaría un error fatal en el sitio, WordPress detecta el error y revierte el archivo. Los plugins inactivos omiten esa comprobación, por lo que el shell se escribe y permanece escrito. Cualquier archivo de plugin inactivo escribible funciona; hello.php simplemente viene con WordPress por defecto.
Todo el script está incrustado en la URL manipulada, por lo que no se necesita un servidor atacante.
docker compose down -v