RCE in LimeSurvey via plugin upload
LimeSurvey es un gestor de encuestas en PHP. Como muchos CMS, permite ampliar su funcionalidad instalando plugins desde el panel de administración, y ahí está el abuso clásico: un plugin es un .zip con código PHP que el servidor descomprime y deja accesible, así que subir un plugin malicioso equivale a subir una webshell.
Un plugin de LimeSurvey necesita un config.xml con sus metadatos (nombre, versión, compatibilidad) y los ficheros del plugin. Para colar una shell se empaqueta el config.xml junto a un revshell.php:
zip plugin.zip config.xml revshell.phpSe sube en Configuración → Plugins → Subir e instalar, y una vez instalado el .php queda accesible bajo el directorio de uploads del plugin (algo como /upload/plugins/<name>/revshell.php). Pidiéndolo con el navegador o curl, se ejecuta y devuelve la shell, normalmente como www-data.
El requisito es acceso de administrador al panel; en la práctica ese acceso suele venir de credenciales reutilizadas o filtradas. Hay versiones con CVE específicas, pero el patrón "administrador puede instalar plugins = administrador puede ejecutar código" es transversal a casi todas.
Cómo detectarlo. La firma es una subida de plugin autenticada (POST al endpoint de instalación de plugins) seguida de la aparición de un .php nuevo en /upload/plugins/<name>/ (FIM) y una petición directa a ese fichero; ninguna instalación legítima deja un revshell.php accesible. La confirmación en el host es el proceso web (www-data) lanzando sh/bash como hijo al pedir ese .php (auditd/Sysmon for Linux). Un login de administrador desde una IP externa poco antes es el indicio previo.
Defensa. Restringir quién puede instalar plugins, validar y firmar los paquetes, aislar el directorio de uploads (sin ejecución de PHP) y mantener LimeSurvey actualizado. Sobre todo, no exponer el panel de administración ni reutilizar contraseñas entre servicios.