Server Side Inclusion
Inclusion côté serveur (SSI)
Description
Les vulnérabilités d'injection Server-Side Include (SSI) se produisent lorsqu'une application incorpore des données contrôlables par l'utilisateur dans une réponse qui est ensuite analysée pour les directives Server-Side Include. Si l'entrée utilisateur fournie n'est pas strictement validée, des acteurs malveillants peuvent manipuler ou insérer des directives pour exécuter du code malveillant.
L'exploitation des vulnérabilités d'injection SSI permet souvent l'injection de contenu arbitraire, tel que du JavaScript, dans la réponse de l'application, présentant des risques similaires au cross-site scripting (XSS). Selon la configuration du serveur, la vulnérabilité peut également permettre d'accéder à des fichiers protégés ou d'exécuter des commandes système arbitraires sur le serveur.
L'injection SSI peut avoir plusieurs points d'injection tels que les formulaires POST, les en-têtes HTTP, les cookies...
- Exécution de code :
GET / HTTP/1.1
Host: localhost
Referer: <!--#exec cmd="/bin/ls"-->
- Inclusion de fichiers :
POST /contact HTTP/1.1
Host: localhost
body=<!--#include virtual="/proc/version"-->
Recommandation
Pour atténuer le risque de vulnérabilités d'injection Server-Side Include, considérez les recommandations suivantes :
-
Désactiver SSI : si ce n'est pas nécessaire, la désactivation de SSI est la recommandation infaillible pour atténuer le risque d'injection SSI, restreindre SSI à un nombre limité de pages aiderait également à atténuer certains des risques.
-
Validation et Sanitisation des Entrées : Sanitisez et/ou encodez les entrées fournies par l'utilisateur (notamment les caractères spéciaux HTML comme <>) avant de les passer à une page ayant des autorisations d'exécution SSI.
-
Utiliser suEXEC : Utilisez suEXEC pour restreindre les autorisations de l'utilisateur exécutant les directives SSI.
<!--#if expr="$user_input =~ /^[a-zA-Z0-9_\-]+$/i" -->
<!--#include virtual="/web/$user_input" -->
<!--#else -->
Invalid input!
<!--#endif -->
Liens
Normes
- GDPR:
- ART_5
- ART_32
- PCI_STANDARDS:
- REQ_6_2
- REQ_6_3
- REQ_11_3
- SOC2_CONTROLS:
- CC_2_1
- CC_3_4
- CC_4_1
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5
- HIPAA_CONTROLS:
- SECURITY212
- SECURITY213
- SECURITY255