Risque de configuration non sécurisée d'Apache sur les systèmes Microsoft Windows
Date : 01 Septembre 2006
Cette vulnérabilité étant due à une configuration particulière du serveur web, le Cert-IST n'a pas publié d'avis de sécurité sur cette faiblesse, mais a jugé intéressant d'informer sa communauté sur les moyens de contourner cette faille via une configuration classique et sécurisée d'Apache.
Scripts CGI :
Un script CGI ("Common Gateway Interface") est un programme (dans un langage de programmation quelconque : C++, PHP, Perl, …), exécuté par le serveur web, et qui génère dynamiquement du code HTML.
Configuration d'Apache :
La configuration du serveur web Apache se fait via des directives dans le fichier texte "httpd.conf" (par défaut).
La
directive "DocumentRoot" indique la racine de l'arborescence
des documents visibles depuis Internet.
Par exemple si un serveur Apache est configuré avec :
DocumentRoot "/home/webmaster/site/htdocs"
Alors l'url "http::/[SiteWeb]/toto.html" permet de lire le
fichier "/home/webmaster/site/htdocs/toto.html" sur le système
de ce serveur.
Remarque : Si cette directive n'est pas présente dans le fichier "httpd.conf" c'est le répertoire "/usr/local/apache/htdocs" qui est utilisé comme valeur par défaut.
La directive "ScriptAlias"
associe une URL à la racine de l'arborescence des scripts depuis Internet. Par
exemple si un serveur Apache est configuré avec :
ScriptAlias /cgi-bin/ "/home/webmaster/site/cgi-bin"
Alors l'url "http::/[SiteWeb]/cgi-bin/script" permet
d'exécuter le script CGI "/home/webmaster/site/cgi-bin/script"
sur le système de ce serveur.
Remarque : C'est le module "mod_alias", qui identifie les URL qui font référence à un script CGI et confie alors le traitement de la requête au module "mod_cgi".
Risque :
Le risque existe sur un serveur Apache hébergé sur un
système "case insensitive" (non sensible à la différence
Majuscules/Minuscules) comme les systèmes Microsoft Windows, et configuré avec
une arborescence de scripts incluse dans celle des documents :
DocumentRoot "[arborescence]/htdocs"
ScriptAlias /cgi-bin/ "[arborescence]/htdocs /cgi-bin"
Dans
cette configuration, une personne malveillante peut lire à distance le code
source des scripts CGI via un url du type "http::/[SiteWeb]/CGI-BIN/script".
En
effet le module mod_alias n'identifie pas cette URL comme référençant un
script CGI (elle ne contient pas "/cgi-bin/") et le serveur
envoie donc le contenu du fichier "[arborescence]/htdocs /cgi-bin/script".
Conseils pour une configuration sécurisée :
Le
premier conseil, de bon sens, consiste à ne pas mettre les scripts CGI dans
l'arborescence des documents web via une configuration du type :
DocumentRoot "[arborescence]/htdocs"
ScriptAlias /cgi-bin/ "[arborescence]/htdocs /cgi-bin"
Si
cette solution n'est pas possible, il faut alors appliquer celle indiquée dans
la documentation de la directive "ScriptAlias" (citée en
référence). Elle consiste à utiliser les directives
"<Directory>", "SetHandler", et "Options" à
la place de "ScriptAlias":
<Directory [arborescence]/htdocs /cgi-bin >
SetHandler cgi-script
Options ExecCGI
</Directory>
Pour plus d'information :
- Avis de "Susam Pal" sur Bugtraq : http://www.securityfocus.com/archive/1/442882
- Réponse de Joe Orton (Red Hat) : http://www.securityfocus.com/archive/1/443346
- Référence CVE : http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-4110
- Documentation de la directive "DocumentationRoot" : http://httpd.apache.org/docs/2.2/mod/core.html#documentroot
- Documentation de la directive "ScriptAlias" : http://httpd.apache.org/docs/2.2/mod/mod_alias.html#scriptalias