Injection de SSI : Vulnérabilités et Exploitation

La technique Server Side Includes (SSI) est une méthode de développement web côté serveur permettant d'intégrer dynamiquement du contenu dans des pages HTML. Bien que moins courante aujourd'hui, elle peut encore présenter des vulnérabilités si elle n'est pas correctement configurée.

Principes fondamentaux du SSI

Le SSI permet d'insérer des instructions dans des fichiers HTML (souvent renommés en .shtml, .shtm, ou .stm) qui sont traitées par le serveur web avant l'envoi de la page au client. Ces instructions peuvent inclure du contenu d'autres fichiers, des variables d'environnement, des dates, ou même exécuter des commandes système.

Le principal avantage du SSI est de pouvoir générer du contenu dynamique sans nécessiter de scripts CGI complets ou d'autres technologies dynamiques plus lourdes. Il est particulièrement utile pour inclure des éléments répétitifs comme des en-têtes ou des pieds de page.

Pour des raisons de sécurité, la plupart des serveurs web modernes désactivent le SSI par défaut. Son activation nécessite une modification de la configuraton du serveur.

Syntaxe de base du SSI

Les instructions SSI sont encapsulées dans des commentaires HTML et commencent par #. Voici les commandes les plus courantes :

  • #config : Définit le format des messages d'erreur, des dates et des tailles de fichiers renvoyés au client.
  • #echo : Affiche la valeur d'une variable d'environnement.
  • #exec : Exécute une commande shell ou une application externe et insère sa sortie dans la page.
  • #flastmod : Insère la date de dernière modification d'un fichier.
  • #fsize : Insère la taille d'un fichier.
  • #include : Inclut le contenu d'un autre fichier dans la page actuelle.

Exemples de syntaxe :

1. Affichage de variables serveur :


2. Inclusion de fichiers :


3. Informations sur les fichiers :


<!#flastmod file="nom_fichier.html" –>

4. Exécution de commandes :

<!--#exec cmd="commande" -->
``` : Exécute une commande shell.
Exemple : ```
<!--#exec cmd="cat /etc/passwd" -->
<!--#exec cgi="chemin_cgi" -->
``` : Exécute un script CGI.
Exemple : ```
<!--#exec cgi="/cgi-bin/mon_script.cgi" -->

Vulnérabilités d'injection SSI

La possibilité d'exécuter des commandes système via la directive #exec ouvre la porte aux vulnérabilités d'injection SSI. Si une partie de la sortie de ces commandes est affichée directement dans la page HTML sans échappement approprié, et que cette sortie dépend d'une entrée utilisateur non validée, une injection peut survenir.

Conditions préalables :

  • Le serveur web doit supporter et avoir activé la fonctionnalité SSI.
  • L'application web doit intégrer des données fournies par l'utilisateur dans la réponse HTML.
  • Les entrées utilisateur ne doivent pas être correctement filtrées ou échappées.

Scénarios d'exploitation :

  • Injection de type Cross-Site Scripting (XSS) : Si une page vulnérable à un XSS reflété accepte une charge utile SSI au lieu d'un script JavaScript, et que le SSI est activé, cela peut mener à une injection SSI.
  • Téléversement de fichiers : Si une application web permet le téléversement de fichiers et qu'un fichier .shtml peut être téléversé et exécuté par le serveur, cela peut permettre l'exécution de commandes à distance.

Exemple concret :

Dans un environnement où SSI est activé et où un fichier .shtml peut être téléversé, un attaquant pourrait téléverser un fichier comme shell.shtml contenant :

<!--#exec cmd="id" -->

En accédant à ce fichier via le navigateur, la commande id serait exécutée sur le serveur, et son résultat affiché.

Contournement de filtres :

Lors de défis de sécurité, des filtres peuvent être mis en place pour bloquer certaines commandes ou chaînes de caractères. Par exemple, si fl est filtré pour empêcher la lecture de fichiers flag, des caractères génériques comme ? peuvent être utilisés pour contourner le filtre lors de l'accès au fichier.

Pour lire le contenu d'un fichier comme /fffffflllll11111aaaaa4444ggggg, des commandes comme cut peuvent être utilisées, en spécifiant le nombre de caractères ou d'octets à extraire :

<!--#exec cmd="cut -c 1-100 /fffff?lllll11111aaaaa4444ggggg" -->

Une autre technique avancée peut impliquer l'utilisation de la commande tar pour archiver le contenu du système de fichiers (en excluant certains répertoires sensibles) et télécharger l'archive résultante pour une analyse hors ligne.

<!--#exec cmd="tar cvf /var/www/html/upload/archive.tar / --exclude=/bin --exclude=/etc ..." -->

Extensions : Technologies de mise en cache de contenu dynamique

Le SSI fait partie d'une catégorie plus large de techniques visant à optimiser la génération de contenu dynamique, souvent par le biais de la mise en cache. D'autres technologies notables incluent :

  • Client-Side Includes (CSI) : Le contenu dynamique est géré côté client via des technologies comme AJAX ou les iframes. Aucune configuration serveur spécifique n'est requise.
  • Server Side Includes (SSI) : Traitement côté serveur via des directives spécifiques, nécessitant un support serveur dédié et souvent utilisé avec des extensions de fichiers comme .shtml.
  • Edge Side Includes (ESI) : Une technologie de mise en cache côté serveur (souvent au niveau du réseau de diffusion de contenu - CDN) qui utilise des directives spécifiques pour assembler des pages à partir de fragments mis en cache.

Ces technologies visent à réduire la charge sur le serveur en traitant dynamiquement uniquement les parties nécessaires d'une page, tout en servant le reste de manière statique.

Étiquettes: SSI Server Side Includes injection RCE vulnérabilité

Publié le 29 juillet à 04h29