Vulnerabilité "Escape shell" ============================ 1) INTRO ======== Escape shell : sortie sur un shell. Beaucoup de programmeur CGI, PHP,... oublie certaine regle de securité importante. En l'occurence là, c'est l'escape shell. Ce bug est, je sais pas nouveau mais encore courament vue. C'est pour ca que j'ecris ce texte. 2) FONCTIONNEMENT ================= Utilisation de caractere speciaux dans une variable qui est utiliser ensuite dans une commande shell (souvent system). Imaginons qu'une page formulaire doit envoyer une variable a un script php qui doit lui meme reprendre la variable pour l'executer par une commande system() EX 1 : pour un "whois" Je veux verifier un nom de domaine via ma page web. je vais donc utiliser $lenomdomaine est une variable envoyer par un formulaire La il y a un bug dans ce code, car il n'y pas de filtre de caracteres dans la variable $lenomdemaine.C'est a dire que si je reprend la variable et que au lieu de mettre "microsoft.com", je mette "yahoo.com;ps%20ax" j'aurais fait une liste de processe de la machine :-), je peut tres bien mettre '/bin/sh', 'halt', 'reboot', 'rm -rf /',.... 3) SOLUTION =========== Comme je l'ais dit il faut filtrer les caracteres dans le buffer et autorisé uniquement : "azertyuiopqsdfghjklmwxcvbn1234567890" Je vous propose un solution en PHP : Erreur : Le nom de domaine $domaine$point n'est pas valide.
"; } else { $lower = strtolower($domaine); for($d=0; $dErreur : Caractere non reconnu pour le domaine.
"; } else { // Verification caractere par caractere $lower = strtolower($point); for($d=0; $dErreur : Caractere non reconnu pour le point.
"; } else { system("whois $domaine$point"); } } } ?> 4) CONCLUSION ============= J'ai ecris ce texte uniquement pour les languages via page web, mais ce bug existe aussi sur les languages en C/C++, PERL, XALAN,.... Attention aussi le bug peut etre encore plus puissant quand le server web est lancer en root ! Alors faite attention quand vous programmer :-) 5) SYSTEME ========== Linux xBSD 6) CREDITS ========== Descript Lionel