Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Le Site du Zéro v3 > Rapports de bugs > Faille : "Sea Surf" (XSRF/CSRF) > Lecture du sujet

Faille : "Sea Surf" (XSRF/CSRF)

Pas de protection : danger

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1  2  Suivante
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1  2  Suivante
Hors ligne Jeremie78 # Posté le 07/03/2008 à 23:47:04
Powered by GNU/Linux
Groupe : Membres
Section concernée : Tout le site
URL : les pages produisant des actions sensibles (ajout d'un message, modification d'un paramètre, ...)
Comment reproduire le bug : soumettre des liens dangereux, utiliser le système d'avatar (autorisant les URL externe : danger !!), voire utiliser des pages externes contenant du javascript
Erreur se produisant : les possibilité sont nombreuses. On peut utiliser le système d'avatar pour entraîner des déconnexions massives des utilisateurs, envoyer des liens dangereux actionnant certaines actions (je vais pas les lister :p ), voire, avec un peu de code javascript, soumettre des formulaires à la volée sans l'accord de l'utilisateur (il y a probablement une limitation grâce au système anti-flood, mais celui-ci ne protégera que des envois massifs de type SPAM).


Si vous voulez que je concocte une petite page pour vous montrer comment utiliser tout ça, je peux :) , mais par MP ... sinon ça pourrait donner des idées à certain.
Il existe des protections efficaces pour contrer ces attaques, elles sont assez rébarbatives à mettre en place et ça peut prendre pas mal de temps pour le SDZ vu le nombre de formulaires.


La parade est la suivante :
  • pour toutes les actions ayant des répercussions permanentes (modification, ajout, suppression), effectuer la reqûete via un formulaire plutôt qu'un lien (on transforme les GET en POST).
  • Utiliser un TOKEN pour s'assurer que le formulaire a été soumis par l'utilisateur et non par un script automatique.
Édité le 09/03/2008 à 14:19:48 par Jeremie78

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne karamilo # Posté le 08/03/2008 à 20:48:48
Aussie 'til December
Avatar
Admins
pour toutes les actions ayant des répercussions permanentes (modification, ajout, suppression), effectuer la reqûete via un formulaire plutôt qu'un lien (on transforme les GET en POST).

Déjà fait


Token => non car cette pseudo faille est présente sur tous les sites du web, on ne va pas réinventer le web.
 
Hors ligne Jeremie78 # Posté le 08/03/2008 à 20:55:34
Powered by GNU/Linux
Groupe : Membres
C'est pas une pseudo faille ! C'est pas aprce que peu nombreux sont les sites qui s'en prémunissent, qu'elle doit être prise à la légère.

Si je fais une page contenant un formulaire auto-soumis par du javascript, et que tu visites cette même page, je peux te faire faire tout ce que je veux :) , y compris élever mes droits au rang d'admin (mais il me faut connaitre les infos du formulaire en question).

De même pour le bouton de déconnexion, si quelqu'un le mets comme avatar et qu'il y a du coup des déconnexions de tout ceux qui tentent d'afficher l'avatar ... tu rigoleras moins je pense ;)

Ça s'appelle une faille, si tu veux pas t'en prémunir, fait comme tu le sens, mais après faut pas s'étonner du nombre de sites défacés :p .

Et puis le coup du token, c'est pas très compliqué à mettre en place ... comme les actions ayant des répercutions ne sont faites que par des membres connectés, il suffit de générer un token pour toute la durée de la session, et de le mettre dans tous les formulaires du site. Ce n'est que du copier collé ... Ça va vite quand on a un système de templates !
Édité le 08/03/2008 à 20:57:15 par Jeremie78

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne 1337833K # Posté le 08/03/2008 à 21:09:28
fgsfds
Groupe : Membres
En tout cas, tu vas m'expliquer comment tu mets du JavaScript ou du HTML dans une image par exemple.

Image utilisateur
Big Brother is watching you.
The chocolate is a lie !
Vous pouvez faire un geste gratuit pour changer le monde. :)
Libérez quelqu'un et quelqu'un-d'autre !
 
Hors ligne karamilo # Posté le 08/03/2008 à 21:10:51
Aussie 'til December
Avatar
Admins
Détrompe toi, un token c'est très lourd à mettre en place.
 
Hors ligne Vinc14 # Posté le 08/03/2008 à 21:19:01
Groupe : Membres
Euh... Quelqu'un pourrait m'expliquer en quoi consistent ces "failles" (ici ou par MP si vous préférez) svp ? J'arrive pas à comprendre la faille décrite...

Image utilisateur
Le blog passionnant de Vinc14
日本語と日本の音楽ADDICT
 
Hors ligne Zopieux # Posté le 08/03/2008 à 21:24:02
useless, that is.
Avatar
Validateurs
Il peut exister de nombreuses failles, mais par exemple, on peut logiquement imiter n'importe quel formulaire avec un action= qui pointe vers la page de traitement sur le SdZ, ce qui aurait pour conséquence, si le visiteur est connecté au site, de modifier à son insu (ou presque) ses paramètres. Mais on est pas là pour expliquer les failles, le codeur les connaît, et ça pourrait donner de mauvaises idées.
 
Hors ligne Jeremie78 # Posté le 08/03/2008 à 21:25:28
Powered by GNU/Linux
Groupe : Membres
Bon bin voila moi ce que j'utilise.
J'ai créé 2 fonctions qui font tout le boulot qu'il faut, il suffit de les appeler au bon endroit :
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. // génération d'un nouveau token pour les failles XSRF
  3. function generate_xsrf_token()
  4. {
  5.         if(is_connected())
  6.         {
  7.                 $_SESSION['token_xsrf'] = sha1( $_SESSION['id'].$_SESSION['mdp'].mt_rand() );
  8.         }
  9. }
  10.  
  11. // vérification du token XRSF
  12. function verify_xsrf_token()
  13. {
  14.         if( ! (!empty($_SESSION['token_xsrf']) AND !empty($_POST['token_xsrf']) AND $_SESSION['token_xsrf']==$_POST['token_xsrf']) )
  15.         {
  16.                 die('
  17.                         <html>
  18.                                 <head>
  19.                                         <title>Erreur durant l\'envoie du formulaire !</title>
  20.                                 </head>
  21.                                 <body>
  22.                                         <h1>Erreur : durée maximale d\'envoie du formulaire dépassée !</h1>
  23.  
  24.                                         <p>
  25.                                                 Suivez la procédure ci-dessous pour envoyer à nouveau le contenu du formulaire :
  26.                                         </p>
  27.  
  28.                                         <ul>
  29.                                                 <li>Retournez sur la page précédente en cliquant sur le <strong>bouton "page précédente"</strong> de votre navigateur.</li>
  30.                                                 <li>Rechargez la page en appuyant sur le <strong>touche "F5"</strong>.</li>
  31.                                                 <li>Cliquez à nouveau sur le bouton d\'<strong>envoie du formulaire</strong>.</li>
  32.                                         </ul>
  33.                                 </body>
  34.                         </html>
  35.                 ');
  36.         }
  37. }
  38. ?>


Le token créé est stable durant toute la durée de la session, il est regénéré à chaque nouvelle connexion (de même si connexion automatique, par cookie). Il faut ensuite transformer tous les liens produisant des actions "significatives" en formulaires (c'est pas bien compliqué !), si on utilisait des images, la modification est invisible, si on utilisait du texte dans le liens, on aura un joli bouton :) .
On ajoute dans les formulaires sensibles un champ caché contenant le token :Code : HTML - Afficher / masquer les numéros de ligne
  1. <input type="hidden" name="token_xsrf" value="{TOKEN_XSRF}" />

Et enfin avant chaque traitement de formulaire on lane la fonction de vérification :Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. verify_xsrf_token();
  3. ?>


C'est pas très compliqué et ça prémuni des attaques. Dans ce système, seul les membres ont accès au système de token. Mais de toute façon, les visiteurs n'ont pas d'actions délicates à commettre.

1337833K > pour le coup des avatars je suppose ? Dans ce cas le "sea search" ne se manifeste que par l'activation d'un lien, on ne peut pas manipuler de formulaires. Ce dernier cas nécessite que l'utilisateur ayant les droits nécessaire à l'action visite une page piégée. Ça repose donc en très faible partie sur du social engineering.

Zopieux > on ne fait pas de la sécurité en masquant les failles de sécurités mais en mettant en place des protections bien réels !

Vinc14 > va lire l'article suivant, il explique bien le principe du "sea surf"
introduction au sea surf


EDIT: à mon humble avis on ne communique pas assez sur ce genre de faille ! Alors qu'on est sensibilisé aux injections SQL et aux failles XSS, on passe trop souvent à coté de celle-la ...
Édité le 08/03/2008 à 21:31:53 par Jeremie78

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Zopieux # Posté le 08/03/2008 à 21:31:05
useless, that is.
Avatar
Validateurs
J'ai pas dit le contraire, Jeremie78, mais si tu donnes un article détaillé de Comment powner le SdZ en trois clics, tu es certain que les Zér0s un peu curieux s'amuseront à essayer ta technique et à faire chier le monde.
 
Hors ligne Jeremie78 # Posté le 08/03/2008 à 21:33:55
Powered by GNU/Linux
Groupe : Membres
A moins de connaitre les paramètres des formulaires "sensibles", tu auras un peu de mal à te promouvoir admin. par contre tu peux t'amuser à faire poster par d'autres personnes des messages sur le forum par exemple.

1) Créer une page piégée avec des iframes (1 frame = 1 formulaire) contenant du code javascript (il s'occupe de soumettre les formulaires)
2) envoyer le plus de zéros possibles sur cette page. Il faut, pour ne pas éveiller les soupçons mettre un contenu sur cette page et mettre masquer le iframes (mettre 1 pixel pour largeur et hauteur)

Pour le coup de l'avatar, c'est un peu plus complexe, il faut passer par un script PHP.
1) Créer un script PHP qui affiche une image bidon de petite taille et de poids faible.
2) utiliser l'adresse de ce fichier PHP comme avatar (le site télécharge l'avatar et remarque que ses dimensions son correctent, il l'accepte)
3) Modifier le script PHP pour effectuer une redirection vers le page de deconnexion

Le tour est joué, tout ceux qui verrons votre avatar seront deconnectés.

Moi j'appelle ça des failles :) . Il n'y a pas assez de contrôle sur le contenu fournit pas l'utilisateur. Le manque de vérification est ce qui entraine les attaques ...

Les parades à ces 2 attaques sont simples :
- pour le coup des formulaires, utilisation du système de token comme expliqué plus haut
- pour les avatars, interdire les URL externes. les avatars sont stockés obligatoirement sur le site.
Édité le 08/03/2008 à 21:43:36 par Jeremie78

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Zopieux # Posté le 08/03/2008 à 21:43:19
useless, that is.
Avatar
Validateurs
Je trouve cela idiot d'interdire les URL externes, ça peut être utile. Et, à mon sens, je n'ai jamais vu de faille ce genre depuis que je navigue sur le SdZ, c'est-à-dire depuis relativement longtemps.
 
Hors ligne Jeremie78 # Posté le 08/03/2008 à 21:44:13
Powered by GNU/Linux
Groupe : Membres
Si tu veux je mets en pratique la faille des avatars devant tes yeux ... tu seras déconnecté !
Mais je vois pas l'intérêt de mettre le bordel sur un site que j'aime bien :) .
Édité le 08/03/2008 à 21:47:29 par Jeremie78

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne mt9 # Posté le 08/03/2008 à 21:51:40
Groupe : Bannis
Si tu regardes le lien de déconnexion, il inclut l'id du membre, donc tu peux uniquement viser un membre

Ta mère est tellement grosse qu'elle rentre pas dans un malloc()
 
Hors ligne Jeremie78 # Posté le 08/03/2008 à 21:54:26
Powered by GNU/Linux
Groupe : Membres
Oui en effet ... bon bin tu peux au moins embêter un membre en particulier :p (ça devient moins intéressant en effet)

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne the_fear # Posté le 08/03/2008 à 21:57:49
Avatar
Groupe : Membres
Euh pour l'histoire de l'avatar, t'es sûr que ça marche sachant qu'une fois l'image sur le site, il ne s'agit plus d'un script php mais belle et bien de l'image générée, rendant donc inutile une modification du script php situé sur un autre serveur. (ou j'ai rien compris.)
Hors ligne Jeremie78 # Posté le 08/03/2008 à 21:59:50
Powered by GNU/Linux
Groupe : Membres
the_fear > je crois que tu as pas bien compris :p
le script PHP comme il est sur ton site tu peux toujours le modifier.

Si tu récupère les avatars, tu ne récupère que des images, donc comme elles sont stockées sur le serveur, tu empêches les problèmes de sea surf

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne the_fear # Posté le 08/03/2008 à 22:02:25
Avatar
Groupe : Membres
Ah oui non j'ai rien dis, je savais même pas que l'on pouvait indiquer un avatar situé sur un autre serveur que celui du site du zéro. (d'où mon étonnement quand à cette histoire de modifier un script PHP qui du coup n'est plus en relation si l'avatar est hébergé sur le serveur du site.)

Bon bah j'ai compris donc, je connaissais pas cette histoire c'est sympa, faudra que je test un jour. (en local bien entendu lol)
Édité le 08/03/2008 à 22:02:47 par the_fear
Hors ligne 1337833K # Posté le 08/03/2008 à 22:04:29
fgsfds
Groupe : Membres
Ah j'ai compris ! Donc, si je comprends bien, tu mets ça dans l'image :
Code : PHP - Afficher / masquer les numéros de ligne
  1. <? header("Redirection: deconnexion.php"); ?>

C'est ça ? Si ça marche, en effet, c'est une faille très dangereuse ...

Image utilisateur
Big Brother is watching you.
The chocolate is a lie !
Vous pouvez faire un geste gratuit pour changer le monde. :)
Libérez quelqu'un et quelqu'un-d'autre !
 
Hors ligne Jeremie78 # Posté le 08/03/2008 à 22:05:50
Powered by GNU/Linux
Groupe : Membres
Oui, sauf qu'en l'occurence, comme mt9 l'a fait remarqué, le sdz fait en sorte que a limite cette action à 1 seul membre dont on a l'ID au préalable.

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne the_fear # Posté le 08/03/2008 à 22:16:10
Avatar
Groupe : Membres
Euh juste comme ça, le fichier PHP qui génère donc l'avatar, il a un REFERER de la page visité sur le moment ou celui de la page précédente ?
Hors ligne Vinc14 # Posté le 08/03/2008 à 22:22:33
Groupe : Membres
Hum, pour générer une image PHP il faut mettre un header disant qu'on va générer du PNG par exemple. Il me semble que le 3è paramètre de header() est un booléan pour qu'un fichier PHP puisse avoir 2 headers mais c'est pas dit que ça marche.

Image utilisateur
Le blog passionnant de Vinc14
日本語と日本の音楽ADDICT
 
Hors ligne 1337833K # Posté le 08/03/2008 à 22:27:02
fgsfds
Groupe : Membres
Bon, j'ai testé plusieurs fois en local, et je n'ai pas réussi à réaliser cette faille. Tu es sur que c'est possible ?

EDIT: J'ai réussi, c'est hallucinant comme c'est dangereux et puissant ... Et même pas besoin de PHP ni de redirection ...
Édité le 08/03/2008 à 22:34:26 par 1337833K

Image utilisateur
Big Brother is watching you.
The chocolate is a lie !
Vous pouvez faire un geste gratuit pour changer le monde. :)
Libérez quelqu'un et quelqu'un-d'autre !
 
Hors ligne Takeo92 # Posté le 08/03/2008 à 22:37:57
GRENOBLE e BASTA !!
Avatar
Groupe : Membres
Moi j'aurai juste interdit les images autre que de vraies extensions d'images permises. Je sais c'est chiant surtout sur un site de développeur, mais tu n'est sur de pas avoir de problèmes.

Et euh, c'est sur que tu pourrais arriver à faire deux trois trucs (supprimer le tuto d'un user), mais comme tu connais rien aux scripts d'admin, tu peux rien faire sur les administrateurs/validateurs/modérateurs (encore modérateurs tu peux essayer de deviner) et donc c'est pas une faille très importante (pour supprimer des tutos faut trouver les bons gens à faire venir sur les bons liens... autant lui piquer sa PHPSESSID sur un lien externe ça reviendra au même).

Image utilisateur

Image utilisateur
Mais qui donc a misé 10€ avec une côte de 6 ? :-°
 
Hors ligne Vinc14 # Posté le 08/03/2008 à 22:40:11
Groupe : Membres
J'ai uploadé un fichier PHP qui contient "<?php header("Location : http://www.siteduzero.com/") ?>", lorsque je vais sur la page je suis redirigé mais lorsque je tente d'insérer une image ayant l'url du fichier uploadé (sur un autre site mais dans mon profil juste pour tester) je suis pas redirigé... Par contre la même chose mais cette fois dans le fichier : "<?php $file = fopen("test", "w"); fclose($file); ?>" et le fichier "test" a été créé sur mon FTP !

Image utilisateur
Le blog passionnant de Vinc14
日本語と日本の音楽ADDICT
 
Hors ligne Takeo92 # Posté le 08/03/2008 à 22:41:30
GRENOBLE e BASTA !!
Avatar
Groupe : Membres
Citation : Vinc14
J'ai uploadé un fichier PHP qui contient "<?php header("Location : http://www.siteduzero.com/") ?>", lorsque je vais sur la page je suis redirigé mais lorsque je tente d'insérer une image ayant l'url du fichier uploadé (sur un autre site mais dans mon profil juste pour tester) je suis pas redirigé... Par contre la même chose mais cette fois dans le fichier : "<?php $file = fopen("test", "w"); fclose($file); ?>" et le fichier "test" a été créé sur mon FTP !


Je pense que ça sert à rien de dire tous vos tests et vos réussites. Tout le monde sait ce qu'on peut faire, pas besoin d'en faire 10posts pour dire "j'ai réussi", "j'ai pas réussi", "uahhh trop puissant", "ah uééé la big de faille!!!".

Karamilo viendra dire ce qu'il en pense de ce que le monsieur qui a signalé le bug a dit, a donné comme fonctions et les quelques pauvres idées qui en sont sorties. Sert à rien d'encombrer le topic après.

EDIT :
Je répond au message juste en-dessous :
...
Mais là que veux-tu faire avec ça ?
Déconnecter, wahou...
C'est pas du code opensource, tu connais pas l'architectures des pages, alors tu pourras faire des trucs à petite échelle, pas à grandes échelles comme sur des CMS par exemple.
Édité le 08/03/2008 à 22:45:42 par Takeo92

Image utilisateur

Image utilisateur
Mais qui donc a misé 10€ avec une côte de 6 ? :-°
 
Hors ligne 1337833K # Posté le 08/03/2008 à 22:43:20
fgsfds
Groupe : Membres
Bah, en même temps, c'est un peu la faille de la mort qui tue vu que tu peux faire faire des requêtes GET par un autre membre.
Édité le 08/03/2008 à 22:46:37 par 1337833K

Image utilisateur
Big Brother is watching you.
The chocolate is a lie !
Vous pouvez faire un geste gratuit pour changer le monde. :)
Libérez quelqu'un et quelqu'un-d'autre !
 
Hors ligne Vinc14 # Posté le 08/03/2008 à 22:49:48
Groupe : Membres
<snip> (rien dit)
Édité le 08/03/2008 à 23:05:55 par Vinc14

Image utilisateur
Le blog passionnant de Vinc14
日本語と日本の音楽ADDICT
 
Hors ligne Jeremie78 # Posté le 08/03/2008 à 23:17:30
Powered by GNU/Linux
Groupe : Membres
the_fear > De la page visitée sur le moment.1
1337833K > tu peux aussi faire des POST

Concernant cette faille, ce qui me dérange est l'inaction des webmaster. ils considèrent que comme ils ne sont pas (encore) touchés, alors elle n'es pas utilisée ... ce qui st évidemment faux !
Édité le 08/03/2008 à 23:21:22 par Jeremie78

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne ornithorynx # Posté le 09/03/2008 à 09:26:09
Groupe : Bannis
Citation
C'est pas du code opensource, tu connais pas l'architectures des pages, alors tu pourras faire des trucs à petite échelle, pas à grandes échelles comme sur des CMS par exemple.

Regarde les rapports de bug, on a parfois des URL de pages admin, de suppression de membres, d'édition de tutos, etc.
Hors ligne Takeo92 # Posté le 09/03/2008 à 09:45:21
GRENOBLE e BASTA !!
Avatar
Groupe : Membres
Je suis d'accord aussi avec le fait que tu as des liens admins.
Mais ils sont protégés par un .htaccess il me semble.
Hors il faudrait que l'admin (se) soit loggué sur l'admin et qu'il lise ton topic en même temps pour espérer faire un truc avec les pauvres liens que tu connais de tes reports de bugs.

Dans le moindre lien de déconnexion tu as l'id du membre.
D'accord tu peux la chopper facilement, mais déjà ça complique un peu les choses.
En 3 ans elle a a jamais été utilisée ;) Si c'était critique comme Jérémy le pense ça serait déjà utilisé et réparé.
Édité le 09/03/2008 à 09:52:50 par Takeo92

Image utilisateur

Image utilisateur
Mais qui donc a misé 10€ avec une côte de 6 ? :-°
 

Retour au forum "Rapports de bugs" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 474 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0525s (0.0292s)