Risque de configuration non sécurisée d'Apache sur les systèmes Microsoft Windows

Date :01 Septembre 2006

Publication: Article

Un Internaute a publié ce mois-ci un avis de sécurité intitulé "CGI Script Source Code Disclosure Vulnerability in Apache for Windows" sur une faiblesse, dans une configuration légèrement spécifique d'un serveur web Apache hébergé par un système Microsoft Windows.

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 :