SERVER-SIDE TEMPLATE INJECTION JUAN CARLOS PIÑEROS GARCÍA JIMMY ALEJANDRO ORTIZ PELÁEZ ¿QUÉ ES SSTI?
• La inyección de plantilla del lado del servidor es una vulnerabilidad en
la que el atacante inyecta de manera maliciosa una entrada en una plantilla para ejecutar comandos del lado del servidor. Esta se produce cuando se incrusta una entrada de usuario no válida en el motor de plantillas, lo que generalmente puede conducir a la ejecución remota de código (RCE) ¿QUÉ ES SSTI?
• Algunas aplicaciones web utilizan motores de plantillas para separar la
presentación visual (HTML, CSS…) de la lógica de la aplicación (PHP, Python…). Estos motores permiten la creación de archivos de plantilla en la aplicación. Cuando se utiliza la aplicación, el motor de plantillas reemplazará las variables contenidas en esta con valores y se transformará en una página web (HTML) y luego la enviará al cliente. ¿QUÉ ES SSTI? • Se produce una vulnerabilidad de inyección de plantilla del lado del servidor (SSTI) cuando los datos del usuario se incrustan directamente en una plantilla y luego el motor de plantilla los interpreta. Esto permite a los atacantes inyectar directivas arbitrarias para manipular el motor de plantillas. ¿QUÉ SON LAS PLANTILLAS DEL LADO DEL SERVIDOR? • Las plantillas del lado del servidor proporcionan un método más fácil de administrar la generación dinámica de código HTML. La gran ventaja es que puede generar páginas HTML dinámicas que, en el lado del servidor, se leen como HTML estático ¿EN QUÉ SITUACIONES SE PRODUCE ESTA VULNERABILIDAD? • El origen del problema es que los datos transmitidos por los usuarios son interpretados directamente por el motor de plantillas (como datos dinámicos), en lugar de integrarse como datos fijos. Este tipo de vulnerabilidad se encuentra con mayor frecuencia en sitios que desean ofrecer funciones de personalización avanzadas, como wikis, blogs, aplicaciones de marketing o CMS. Una vulnerabilidad SSTI suele ocurrir cuando se modifica una plantilla para obtener un resultado personalizado para una necesidad específica y los usuarios tienen acceso a las funciones de modificación de la plantilla. ¿CÓMO ENCONTRAR UNA VULNERABILIDAD SSTI? • Las fallas de SSTI se descubren con menos frecuencia, ya que son menos conocidas y menos investigadas que las fallas de Cross Site Scripting (XSS). Su identificación se realiza en dos partes: • Una primera fase de detección de la vulnerabilidad. • Una segunda fase para identificar el motor de plantillas utilizado. DETECTAR LA VULNERABILIDAD
• Para identificar las vulnerabilidades de SSTI, use una carga útil de
Polyglot compuesta por caracteres especiales que se usan comúnmente en expresiones de plantilla para confundir la plantilla. “${{<%[%'"}}%\”. • En caso de una vulnerabilidad, se puede devolver un mensaje de error o el servidor puede generar la excepción. Esto se puede usar para identificar la vulnerabilidad y el motor de plantillas en uso. IDENTIFICAR EL MOTOR DE PLANTILLAS UTILIZADO • Para identificar la vulnerabilidad, se puede seguir la siguiente lista de tareas pendientes: • Detectar dónde existe la inyección de plantilla • Identificar el motor de plantillas y validar la vulnerabilidad • Seguir los manuales para el motor de plantilla específico • Explotar la vulnerabilidad ¿CÓMO PREVENIR DEFECTOS DE SSTI? Desinfección Sandboxing Lógica menos plantilla
Esto implica detectar y El objetivo es proporcionar un Existen plantillas de motor sin
eliminar contenido entorno cerrado, donde los lógica, que separan la potencialmente malicioso módulos y características representación visual y la antes de usarlo en la plantilla. riesgosos están interpretación del código Por lo tanto, es necesario deshabilitados. Si se tanto como sea posible. analizar de manera eficiente interpretan los datos los datos transmitidos por los proporcionados por el usuarios. Para ello, son usuario, no se puede posibles varios medios (uso proporcionar acceso a otras de expresiones regulares, funciones o datos. listas blancas de expresiones autorizadas, etc.). HERRAMIENTAS AUTOMATIZADAS
• Tplmap ayuda en la explotación de las vulnerabilidades de inyección
de código y de plantilla del lado del servidor con varias técnicas de escape de sandbox para obtener acceso al sistema operativo subyacente, la herramienta y su conjunto de pruebas están desarrollados para investigar la clase de vulnerabilidad SSTI y para usarse como herramientas de seguridad ofensivas durante las pruebas de penetración de aplicaciones web. LINKS DE INTERÉS • Tplmap • Template-engines-special-vars • Server Side Template Injection • WebsitesVulnerableToSSTI • Online FreeMarker Template Tester • Remediación SSTI • Exploits