You are on page 1of 4

1.

Mise en vidence de la faille


Supposons que nous disposons d'un serveur Apache local et que nous avons une page index.php trs simple comme ceci :

<h1>Bonjour !</h1>

Pour accder la page, nous accdons l'URL http://127.0.0.1/~trance/vuln/ avec un navigateur Web. La requte envoye est grossirement la suivante :

GET http://127.0.0.1/~trance/vuln/ HTTP/1.1 Host: 127.0.0.1

La rponse reue comporte alors le code HTML de la page Web. Jusqu'ici, tout est normal : Apache n'a fait qu'interprter la requte GET qu'on lui a envoy. Maintenant, imaginez que nous envoyons une requte mal forme qui n'est pas de type GET, comme :

n1Mp0rTeKwa http://127.0.0.1/~trance/vuln/ HTTP/1.1 Host: 127.0.0.1 Et l, nous constatons qu'Apache ne fait absolument aucune diffrence entre cette et la requte prcdente ! Il n'y a aucune erreur ; il renvoie la mme chose. A premire vue, cela ne choque pas forcment, mais on s'aperoit assez vite que l'on peut tirer profit de cette faille pour contourner certaines protections .htaccess.

2. Contourner le "Limit GET POST"


Dans de nombreux cas, un webmaster peut souhaiter restreindre l'accs un fichier ou un dossier sur son site Web. Pour cela, il place des fichiers .htaccess. Ces fichiers modifient localement la configuration d'Apache et utilisent une certaine syntaxe qui permet de faire des choses assez puissantes. La description de cette syntaxe est connue, et beaucoup de sites Web l'illustrent. Certains proposent une solution simple pour protger l'accs un fichier par un mot de passe. Il suffit, selon eux, de crer un .htaccess selon ce modle :

<Files fichierAProteger.php> AuthUserFile /chemin/vers/.htpasswd AuthName "Zone accs restreint" AuthType Basic <Limit GET POST> require valid-user </Limit> </Files>

Ce fichier permet d'indiquer Apache de refuser toute requte POST ou GET si l'utilisateur n'est pas identifi avec un login et un mot de passe apparaissant dans le fichier .htpasswd correspondant. En fait, peu importe qu'il y ait de .htpasswd ; la faille ne se situe pas ce niveau. Souvenez-vous de ce que nous avons vu plus haut. Nous avons vu qu'Apache interprtait toutes les requtes qu'il ne comprenait pas comme des requtes GET. Ainsi, nous pouvons utiliser cela notre avantage pour accder la page protge sans s'authentifier ! Exemple : imaginons que nous avons un .htaccess rudimentaire de ce type dans le mme dossier :

<Limit GET POST> Deny from all </Limit>


Logiquement, ce fichier est cens interdire tout accs aux pages du dossier. Le hic, c'est que seules les requtes GET ou POST sont concernes... Tentez d'accder la page avec le navigateur : vous obtenez une erreur 403, puisque votre navigateur envoie implicitement un GET. Maintenant, envoyez une requte incorrecte avec un outil comme Netcat :

n1Mp0rTeKwa http://127.0.0.1/~trance/vuln/ HTTP/1.1 Host: 127.0.0.1

Et vous obtiendrez la rponse suivante :

<h1>Bonjour !</h1>
Voila donc comment contourner la protection... Simple, n'est-ce pas ? Le pire, dans tout cela, c'est que la majorit des webmasters protgent leurs sites de cette faon. Et j'en faisais partie, jusqu' ce qu'on me le signale ;)

3. Correction
La correction est ultra-simple : n'utilisez pas l'instruction "limit" quand vous voulez restreindre l'accs un fichier ou dossier ! Bannissez les lignes "" et "" de vos fichiers .htaccess et vous viterez ce genre de problmes. D'ailleurs, la documentation d'Apache prcise bien qu'en gnral, il ne faut pas utiliser lorsque l'on cherche restreindre l'accs. Je cite : "In the general case, access control directives should not be placed within a section."

4. Limites
Un petit bmol cependant : pour le moment, nous n'avons pas trouv le moyen de fausser les requtes POST en injectant des donnes. Ainsi, si vous avez des formulaires POST protgs par des .htaccess, ils sont priori srs. Mais je vous conseille quand mme de patcher vos .htaccess en retirant les lignes "<Limit>" un peu trop dangereuses...
.

You might also like