PHP-Nuke : Cross Site Scripting Permanent ***************************************** Informations : °°°°°°°°°°°°°° Langage : PHP Website : http://www.phpnuke.org Version testée : 6.5 FINAL Problème : Cross Site Scripting Developpement : °°°°°°°°°°°°°°° Plus besoin de présenter PHP-Nuke... J'ai aussi testé ce qui suit sur la version 6.5.1 FR de phpnuke-france (http://www.phpnuke-france.org) avec succès. Francisco Burzi a été prévenu le 11 avril, ainsi que le webmaster de phpnuke-france, le 12. A la base, ce texte avait pour but de parler uniquement des problèmes de XSS (Cross Site Scripting) dans PHP-Nuke via les feuilles de style et les balises . Comme je ne suis jamais sûr que la documentation trouvée à ce sujet était complète, si quelqu'un à des précisions, merci de m'en faire profiter :) Voici trois schèma de possibilité pour faire executer un javascript ("alert()" dans ce cas), via le style : url() execute une fois l'url (donc le javascript), par contre expression() est une chaîne sans fin, qui executera le javascript jusqu'à ce que la page soit quittée. Donc, pour faire executer une fois la fonction javascript alert() sur le profile, via l'url du site web, sans que le script soit visible, il faudra entrer comme site par exemple : http://" style="list-style:url(javascript:alert()); visibility:hidden; et pour le faire executer à l'infini par exemple : http://" style="zoom:expression(alert()); visibility:hidden; La même chose est possible via l'e-mail. Voilà pour le profile :) Comme j'ai dit le reste est le même principe. Au moins dans les commentaires et les messages privés (sauf quand c'est le module phpBB), certaines balises html sont autorisées. En voici la liste "officielle" qui est bien suffisante pour mettre en cause la sûreté des comptes : - - - - -
- -
- -
  • -
      -
        On retouve notre balise , et bien d'autres pour lesquelles l'utilisation du style est similaire. En effet, peut être comme dans le profile, de la même façon que ou
        ou
        etc... On aurait pu encore une fois utiliser onclick="" etc mais comme on a vu c'est pas le plus pratique. Donc si je met dans un commentaire, par exemple :
        , le javascript sera correctement executé chez tout ceux qui visualiseront le commentaire. Par contre il me sera impossible d'envoyer dans un commentaire le
        dont j'ai parlé plus haut. En effet, PHP-Nuke contient un filtre empechant l'envois du mot "script" si il est entre les caractères < et >, ce qui est le cas ici. Pour passer ce filtre, il suffit par exemple de remplacer la lettre c de script par sa valeur cryptée c, pour donner quelque chose du style : Patch : °°°°°°° Un patch est disponible sur http://www.phpsecure.info. Il remplace les mots : 'url(','expression(','onclick','ondblclick','onhelp','onmousedown','onmousemove','onmouseout','onmouseover','onmouseup','onblur','onafterupdate','onbeforeupdate','onkeydown','onkeypress','onkeyup','onfocus','onerror','onload','onunload' par : 'url*(','noexpression(','on*click','on*dblclick','on*help','on*mousedown','on*mousemove','on*mouseout','on*mouseover','on*mouseup','on*blur','on*afterupdate','on*beforeupdate','on*keydown','on*keypress','on*keyup','on*focus','on*error','on*load','on*unload' les rendant inutilisables. C'est le système qu'utilisent hotmail, caramail,... Ce n'est pas le plus sûr, mais le moins restrictifs. Greetz : °°°°°°°° http://www.yoyodesign.org pour ses textes sur les feuilles de style. Le programme TopStyle Lite qui m'a permis de faire des tests sur ces dernières. http://olivier.bichler.free.fr sur ses précisions au niveau des balises html. Credits : °°°°°°°°° Auteur : frog-m@n E-mail : leseulfrog@hotmail.com Websites : http://www.phpsecure.info, http://www.frog-man.org Date : 24/04/03