Livre blanc présentant les techniques aveugles basées sur les erreurs et booléennes pour SSTI et l'injection de code, avec des payloads universels pour six langages de programmation et une intégration dans SSTImap.
[!NOTE] Ceci est la deuxième version du livre blanc basé sur les résultats que j'ai présentés avant la sortie de SSTImap version 1.3.1. Des améliorations ultérieures seraient adaptées à ce format en tant que version 1.2 de la recherche à une date ultérieure.
Certaines catégories de vulnérabilités peuvent à première vue sembler bien connues et quelque peu évidentes. Il peut sembler que toutes les techniques possibles pour ces vulnérabilités sont connues, de sorte que seuls des payloads pour des cas inhabituels pourraient être découverts. L'injection de templates côté serveur (SSTI) et l'injection de code sont souvent considérées comme ces catégories bien connues.
Parfois, de nouvelles techniques avec des noms explicites sont rencontrées pour ces vulnérabilités. De nombreux chercheurs pourraient considérer ces techniques comme bien connues ou même se souvenir de les avoir utilisées, mais en réalité, la technique peut n'exister que comme un nom communément compris sans recherche, descriptions ou payloads universels. Elle pourrait être mentionnée quelques fois avec des payloads pour des cas très spécifiques, mais elle ne serait pas testée et le potentiel réel de cette technique pourrait rester inconnu pendant des années.
Cette recherche introduit deux de ces techniques pour l'injection de code et la SSTI : Error-Based et Boolean Error-Based Blind. Je fournirai des payloads pour l'injection de code et la SSTI dans six langages de programmation : Python, PHP, Java, Ruby, NodeJS et Elixir. De plus, je fournirai des payloads de détection universelle, capables de détecter rapidement même les injections aveugles.
Je fournirai la chronologie complète de mes recherches, de la découverte des premières pistes jusqu'aux conclusions finales. J'explorerai également le processus de création de nouveaux payloads pour des langages de programmation et des templates non mentionnés dans cette recherche.
Dans cette recherche, je montrerai des exemples d'applications pratiques des nouvelles techniques et partagerai des domaines potentiels de recherche ultérieure. Tous les payloads fournis peuvent être utilisés pour détecter et exploiter des vulnérabilités dans des applications réelles. De plus, tous les payloads fournis ont été ajoutés à l'outil open source SSTImap, ce qui facilite l'application des résultats de cette recherche à des cibles réelles.
Les vulnérabilités d'injection de templates côté serveur apparaissent sur les sites web dynamiques utilisant des moteurs de templates pour le rendu côté serveur, lorsque l'entrée utilisateur non fiable est insérée dans le template avant qu'il ne soit traité par le moteur de templates. Un acteur malveillant peut insérer une syntaxe de template valide, qui sera traitée par un moteur de templates lors du rendu de la page. De nombreux moteurs de templates offrent une certaine forme de fonctionnalité d'exécution de code, ce qui conduit souvent à une exécution de code à distance (RCE) sur le serveur cible. Cette recherche se concentre sur les moteurs de templates offrant de telles capacités en cas d'exploitation.
Les vulnérabilités SSTI sont connues depuis 2015, et depuis lors, de nombreux payloads ont été découverts permettant l'exfiltration d'informations, le contournement de filtres et l'évasion de sandbox. Malgré cela, la plupart des payloads affichent soit le résultat directement sur la page, soit se concentrent sur le fait de l'exécution du code lui-même, en ignorant les résultats produits par ce code.

Une autre technique SSTI bien connue est l'aveugle basée sur le temps, qui consiste à ajouter un délai à la commande shell exécutée. Cette technique permet de déterminer le succès de l'exécution du code injecté, mais nécessite de deviner le payload pour l'exécution de commande OS, ce qui rend plus difficile la détection d'une SSTI aveugle dans un moteur de templates inconnu du chercheur.

La classe de vulnérabilité SSTI et les deux techniques d'exploitation connues ont été découvertes en 2015 par James Kettle. Ces techniques sont décrites en détail dans sa recherche "Server-Side Template Injection: RCE For The Modern Web App". [^1] En dix ans depuis, aucune nouvelle technique d'exploitation n'a été documentée. Une seule technique de détection a été découverte en 2023, utilisant des payloads polyglottes pour tester plusieurs moteurs de templates à la fois. Cette technique a été découverte par Maximilian Hildebrand et décrite dans sa recherche "Improving the Detection and Identification of Template Engines for Large-Scale Template Injection Scanning". [^2] La technique se concentre sur la détermination des moteurs de templates en utilisant un nombre minimal de requêtes, mais ne fonctionne que pour des contextes d'injection simples.

La majorité des moteurs de templates basés sur des langages de programmation interprétés, tels que PHP, NodeJS et Python, permettent directement d'évaluer les expressions des langages de programmation correspondants. Cette capacité nous permet d'utiliser des payloads pour une catégorie plus large de vulnérabilités d'injection de code en les encapsulant dans le format correct de la balise de template.
L'injection de code peut également se produire sans SSTI, lorsque l'entrée utilisateur non fiable peut atteindre eval() ou une fonction dangereuse similaire.
Il est souvent considéré que l'exploitation d'une injection de code consiste simplement à programmer dans le langage correspondant,
de sorte que les techniques et les payloads ne sont documentés que pour des exemples de vulnérabilités spécifiques, qui nécessitent d'adapter le code à l'application cible.