the_open_door
café
ESEN
← Volver al índice

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.php

Se 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.

Máquinas donde se aplica