Principe de l'attaque
En 1996, Jennifer Myers a identifié et signalé l'ignoble vulnérabilité PHF. Bien que cette attaque soit daté, elle constitue un excellent exemple d'attaque pour validité d'entrée. Une fois que vous avez compris comment cette attaque fonctionne, vous pouvez appliquer ces connaissances à de nombreuses autres attaques du même genre. Nous n'allons pas consacrer une place énorme à ce sujet ici. Notre objectif est ici de vous expliquer ce qu'est une attaque par validation d'entrée et comment elle peut permettre à des pirates d'obtenir l'accès à un système UNIX.
Une attaque par validation d'entrée se produit lorsque:
-
Un programme ne parvient pas à reconnaître une entrée incorrecte du point de vue de la syntaxe.
-
Un module accepte une entrée étrangère.
-
Un module ne parvient pas à traiter des champs d'entrée manquants.
PHF est un script d'interface de passerelle commune (common gatway interface, CGI) qui est devenu un standard avec les premières versions du server Web Apache et de NCSA HTTPD. Malheureusement, ce programme n'analysait pas et ne validait pas correctement les entrées qu'il recevait. La version originale du script PHF acceptait le caractère de retour à la ligne (%0a) et exécutait toute commande subséquente avec les droits de l'identifiant utilisateur exécutant le serveur Web. L'outil d'attaque PHF d'origine se présentait comme suit :
/cgi-bin/phf?Qalias=x%0a/bin/cat%20/ect/passwd
Sous cette forme, cet outil ne faisait rien de plus que cat avec le fichier des mots de passe. Bien sûr, ces renseignement pouvaient être utilisés pour identifier les identifiants utilisateurs ainsi que des mots de passe cryptés dans l'hypothèse ou les fichiers de mots de passe n'était pas protégés. Dans la plupart des cas, un pirate inexpérimenté cherche à déplomber le fichier de mots de passe et à se connecter au système vulnérable. Un pirate digne de ce nom pourrait obtenir un accès interpréteur de commandes direct au système.
PHF était un outil d'attaque très populaire en 1996 et 1997 et de nombreux sites ont été infiltré à la suite de cette attaque simple mais efficace. Il nous parrait important de comprendre comment cette vulnérabilité a été exploitée de façon à pouvoir appliquer ce concept à d'autres attaques par validation d'entrée. Sous UNIX, il existe des métacaratères qui sont réservés à des usages spéciaux. Ces métacaractères comprennent principalement : / \ < > ! $ % ^ & * | { } [ ] ' " ~ ; .
Si un programme ou un script CGI acceptait des entrée fournies par un utilisateur et qu'il ne validait pas convenablement ces données, il pourrait être trompé et amené à exécuter du code arbitraire. Cette opération est parfois appelé "échappée" vers un interpréteur de commandes et implique l'utilisation frauduleuse de l'un des métacaractères UNIX comme entrée fournie par l'utilisateur.
C'est une attaque très courante et nullement limitée à PHF. On trouve un grand nombre d'exemples de programmes CGI peu sûrs qui ont été fournis par défaut avec une installation de serveur Web.
Pire encore, de nombreux programmes vulnérables sont rédigés par des développeurs de sites Web qui n'ont que peu d'expérience du développement de programmes sécurisés.
Malheureusement, ces attaques vont continuer à proliférer avec l'arrivée d'application de commerce électronique dotées de nouvelles fonctionnalités qui en accroissent la complexité.
Parades
Des méthodes de codage sécurisées sont l'une des meilleures mesures de sécurité préventive et ce concept vaut pour les attaques par validation d'entrée.
Il est capital de s'assurer que les programmes et scripts n'acceptent que les données qu'ils sont supposées recevoir et qu'ils rejettent tout le reste.
Il est difficile d'exclure toute donnée parasite et, inévitablement, vous allez rater un élément critique. Vérifiez et testez en outre tout code une fois rédigé.