Explotación de Server-Side Template Injection (SSTI) y vulnerabilidades

    El Server-Side Template Injection (SSTI) es una vulnerabilidad de seguridad en la que un atacante puede inyectar código malicioso en una plantilla de servidor.


    Las plantillas de servidor son archivos que contienen código que se utiliza para generar contenido dinámico en una aplicación web. Los atacantes pueden aprovechar una vulnerabilidad de SSTI para inyectar código malicioso en una plantilla de servidor, lo que les permite ejecutar comandos en el servidor y obtener acceso no autorizado tanto a la aplicación web como a posibles datos sensibles.

    Las vulnerabilidades de inyección de plantillas del lado del servidor pueden exponer los sitios web a una variedad de ataques según el motor de plantillas en cuestión y cómo lo usa exactamente la aplicación. En ciertas circunstancias excepcionales, estas vulnerabilidades no representan un riesgo real para la seguridad. Sin embargo, la mayoría de las veces, el impacto de la inyección de plantillas del lado del servidor puede ser catastrófico.

    En el extremo más severo de la escala, un atacante puede potencialmente lograr la ejecución remota de código, tomando el control total del servidor back-end y usándolo para realizar otros ataques en la infraestructura interna.

    Incluso en los casos en los que no es posible la ejecución remota completa del código, un atacante a menudo puede usar la inyección de plantillas del lado del servidor como base para muchos otros ataques, lo que podría obtener acceso de lectura a datos confidenciales y archivos arbitrarios en el servidor. Por ejemplo, imagina que una aplicación web utiliza plantillas de servidor para generar correos electrónicos personalizados. Un atacante podría aprovechar una vulnerabilidad de SSTI para inyectar código malicioso en la plantilla de correo electrónico, lo que permitiría al atacante ejecutar comandos en el servidor y obtener acceso no autorizado a los datos sensibles de la aplicación web.

    Para prevenir los ataques de SSTI, los desarrolladores de aplicaciones web deben validar y filtrar adecuadamente la entrada del usuario y utilizar herramientas y frameworks de plantillas seguros que implementen medidas de seguridad para prevenir la inyección de código malicioso.


Detección    


     Las vulnerabilidades de inyección de plantillas del lado del servidor a menudo pasan desapercibidas no porque sean complejas sino porque solo son realmente evidentes para los auditores que las buscan explícitamente. Si puede detectar que existe una vulnerabilidad, puede ser sorprendentemente fácil explotarla. Esto es especialmente cierto en entornos sin zona de pruebas.

    Como con cualquier vulnerabilidad, el primer paso hacia la explotación es poder encontrarla. Quizá el enfoque inicial más simple sea tratar de fuzzear la plantilla mediante la inyección de una secuencia de caracteres especiales comúnmente utilizados en expresiones de plantilla, como ${{<%[%'"}}%\. Si se genera una excepción, esto indica que el servidor está interpretando potencialmente la sintaxis de la plantilla inyectada de alguna manera. Esta es una señal de que puede existir una vulnerabilidad a la inyección de plantillas del lado del servidor.

    Las vulnerabilidades de inyección de plantillas del lado del servidor ocurren en dos contextos distintos, cada uno de los cuales requiere su propio método de detección. Independientemente de los resultados de sus intentos de fuzzing, es importante probar también los siguientes enfoques específicos del contexto. Si el fuzzing no fue concluyente, una vulnerabilidad aún puede revelarse utilizando uno de estos enfoques. Incluso si fuzzing sugirió una vulnerabilidad de inyección de plantilla, aún necesita identificar su contexto para poder explotarla.


Para poder ver todo esto más claro, vamos a ir con un ejemplo práctico. Para ello vamos a emplear el laboratorio de Sam Bown.


A través de una primera comprobación revisaremos la entrada de usuario «Search Users here…«



Para mayor comodidad en las comprobaciones y revisar las peticiones enviadas y respuestas del servidor, nos pondremos con el Repeater de BurpSuite.

Como parte de la metodología de actuación en estos casos, vamos a tomar en cuenta el siguiente diagrama (PortSwigger), que nos permitirá identificar el motor de plantilla empleado por esta aplicación web.


Por tanto, trasladaremos estas comprobaciones para identificar el motor de plantilla.


Después de esta breve comprobación tendremos resuelta la primera necesidad: conocer el motor de plantilla empleado por la aplicación web.



Explotación


Después de detectar que existe una vulnerabilidad potencial e identificar con éxito el motor de plantillas, puede comenzar a intentar encontrar formas de explotarla.

En esta pagina encontrareis numerosas plantillas para explotar dicha vulnerabilidad

Si bien sabemos que una de las formas más básicas de ejecutar comandos del sistema en Python es a través de la siguiente manera:


Debemos tomar en cuenta que Jinja2 cuenta con algunas limitaciones, como la imposibilidad de declarar de forma directa import, por tanto esto anterior no nos será válido. Vamos ha realizarlo a través de una variante: revisando las clases de un objeto. Para esto emplearemos una cadena vacía que irá entre comillas simples, de la siguiente forma:


Ahora valiendonos del atributo .__mro__ revisaremos las posibilidades de saltar por el árbol de objetos.


Ya estando en la cima de la jerarquía es momento de revisar las subclases, para ello nos valdremos de .__subclasses__(). Aquí obtendremos toda la herencia de los atributos y métodos de una clase


Emplearemos este método (file) para leer los archivos del sistema:



Y la utilizaremos haciendo una llamada a os.popen para entablarnos una reverse shell 


No hay comentarios:

Publicar un comentario