L’objectif de ce tutorial est d’expliquer une faille qui a été découverte dans les .htaccess, cette faille qui affecte un nombre importants de sites qui utilisent les fichiers .htaccess comme solution afin de restreindre l’accès à certains fichiers sensibles!

Apache c’est quoi?

Apache HTTP Server, souvent appelé Apache, est un logiciel de serveur HTTP produit par l’Apache Software Foundation. il permet tout simplement d’héberger un site web, il peut évidement tourner sur plusieurs plateformes, sur un total de 182 millions de sites, Apache est utilisé pour 91,5 millions, contre 62,8 millions pour Microsoft IIS.

Un .htaccess à quoi ça sert?

un .htacces est un fichier interprété par le serveur apache qui agit sur le répertoire dans-lequel il se trouve, il est généralement utilisé pour protéger l’accès à un répertoire ou un fichier par un mot de passe, définir les pages d’erreurs personnalisées, gérer la réécriture d’url, définir les mime-type et encore plus…, mais ce qui nous intéresse le plus dans ce tutoriel, c’est restriction d’accès à un répertoire ou un fichier.

Problème :

Parmi les utilités d’un .htaccess, il existe la directive LIMIT qui permet de restreindre l’accès à certains parties sur un site web, en effet cette protection peut facilement être contournée si elle n’est pas correctement mise en place

Exemple :

On considère que nous avons un serveur web local et qu’on veut restreindre l’accès au répertoire /sercret/ , on y met un .htaccess contenant le code suivant :

AuthUserFile /repertoire/de/votre/fichier/.htpasswd
AuthName "Accès protégé"
Require valid-user
AuthType Basic

Ce fichier permet d’indiquer à Apache de refuser toute requête GET ou POST si l’utilisateur n’est pas identifié avec un login et un mot de passe apparaissant dans le fichier .htpasswd

Pour accéder à ce dossier, nous appelons l’url http://localhost/secret/ via un navigateur web .
La requête envoyée ressemblera à :

GET /secret HTTP/1.1
Host: localhost
Connection: close

on aura le prompt qui nous demandera les identifiant pour accéder au dossier, jusque là tout est normale, le serveur apache ne fait qu’interpréter la requête qu’on lui demande.

maintenant imaginons qu’on envoie une requête différente de GET et POST

Exemple :

AuthUserFile /repertoire/de/votre/fichier/.htpasswd
AuthName "Accès protégé"
Require valid-user
AuthType Basic
Deny from all

Dans ce cas Apache interprétera la requête et n’affichera aucune erreur, bien qu’on a pas utilisé GET ou POST qui sont restreint grâce à la directive LIMIT, apache agira gentiment et nous affichera le contenu du répertoire /secret/ ;)

Logiquement apache est censé interdire l’accès à tout ficher dans le répertoire concerné, le soucis c’est que cette protection est appliqué seulement si le navigateur appelle la page via GET ou POST, par defaut nos navigateurs appellent implicitement les page avec des recettes GET, pour contourner cette protection, il suffit de se servir d’un outil comme NetCat ou bien LiveHttpHeaders (Extension Firefox) on modifiant le GET par n’importe koi et vous hop vous aurez le contenu de la page qui s’affichera :)

Comment se protéger ?

c’est assez simple, n’utilisez pas la directive LIMIT dans vos .htaccess pour restreindre l’accès à vos fichiers sensibles, virez les lignes <Limit> … </Limit> de tous vos fichiers .htaccess, ça vous évitera ce genre de problèmes

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

  1. Canyo****N dit :

    Très bon. Merci

  2. Xavier dit :

    A noter que free semble filtrer les méthodes pour ses pages perso.

  3. NoCrash dit :

    Salut Mister,

    Vraiment super ton site, mais une petite erreur sur cette faille. En effet, de cette manière, il n’y a pas de faille. Tu parles de contourner les mais il n’y en a aucun dans ton code.

    Require valid-user

    ==> Voici un code vulnérable

    Tu l’as bien dit dans ta conclusion en plus, je pense que tu as mis ton code sécurisé au lieu de mettre le vulnérable :)

  4. NoCrash dit :

    Hum Hum, les « chevron » LIMIT « chevron » et « chevron » / LIMIT « chevron » on été supprimé de mon post précédent. Cela à peut être fait la même chose pour ton article

  5. ice_breaker dit :

    en changeant les méthodes GET et POST on ne risque pas d’avoir un 501 ?