Journal XSS

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-1
13
avr.
2011

Aujourd'hui la tribune a reçu de terribles tremblements, en effet, une faille d'amplitude sismique élevée tellement sa trivialité fait peur aux yeux, a permis de se rendre compte que ce site est codé avec les pieds :

Hello

  • # explications ?

    Posté par  (site web personnel) . Évalué à 2.

    C'est pas que j'ai rien compris mais presque. Il y a une image pas belle certes, et ?

    Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

    • [^] # Re: explications ?

      Posté par  . Évalué à 8.

      C'est que tu as de la chance que ce soit une image et pas du javascript qui récupère tes cookies linuxfr.org.

      • [^] # Re: explications ?

        Posté par  (site web personnel) . Évalué à 2.

        Tu ne peux pas récupérer simplement les cookies avec un javascript. Ils sont en httpOnly.

        • [^] # Re: explications ?

          Posté par  . Évalué à -1.

          Euh, un petit script avec document.cookie et document.location, je ne vois pas ce qu'il y a de très compliqué pour envoyer sur une url pirate les cookies

          • [^] # Re: explications ?

            Posté par  (site web personnel) . Évalué à 4.

            Ça ne va pas marcher pour les cookies de LinuxFr.org qui sont en HttpOnly et ne dont donc pas accessibles avec du javascript.

            Pour rappel, http://tools.ietf.org/html/draft-ietf-httpstate-cookie-21#section-4.1.2.6 indique :

            The HttpOnly attribute limits the scope of the cookie to HTTP requests. In particular, the attribute instructs the user agent to omit the cookie when providing access to cookies via "non-HTTP" APIs (such as a web browser API that exposes cookies to scripts).

            • [^] # Re: explications ?

              Posté par  . Évalué à 1.

              Avec un peu d'imagination, on peut d'une part faire changer le mot de passe du compte, et d'autre part faire poster un message sur la tribune permettant à l'attaquant d'identifier les comptes compromis, et ainsi de se loguer avec.

              • [^] # Re: explications ?

                Posté par  (site web personnel) . Évalué à 5.

                Avec un peu d'imagination, on peut d'une part faire changer le mot de passe du compte

                Il y a besoin de rentrer le mot de passe actuel pour le changer, le cookie ne suffit pas. Par contre, tu peux effectivement poster sur la tribune.

    • [^] # Re: explications ?

      Posté par  (site web personnel) . Évalué à 5.

      Ok je n'avais pas vu ton pseudo, j'ai compris. Effectivement pour être de la faille stupide c'est de la faille stupide.

      Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

    • [^] # Re: explications ?

      Posté par  (site web personnel) . Évalué à 3.

      l'avatar comme pseudo. avec ça y au moins moyen de péter toutes les mises en page. fatche j'ai peur :)

      • [^] # Re: explications ?

        Posté par  . Évalué à 4.

        Tu fais de la mauvaise foi.

        Avec une balise <script> au lieu d'un balise img, ça pourrait faire plus que de péter une mise en page.

  • # Et XKCD alors ?

    Posté par  . Évalué à 10.

    Obligé de tout faire soi-même !
    Tout part à vélo, ma bonne dame...

  • # ça c'est la classe

    Posté par  . Évalué à 3.

    c'est quand même mieux que les navetars moisis !

    je votre contre la résolution de cette faille !

  • # Suivi

    Posté par  (site web personnel) . Évalué à 9.

    Pour info, il y a également une entrée de suivi sur le sujet : http://linuxfr.org/suivi/petit-probleme-daffichage-du-login-dans-la-tribune et la faille en question vient d'être corrigée avec https://github.com/nono/linuxfr.org/commit/3ba7867634a29723771d8f1c6e5e5017e4fde9c8

    • [^] # Nouvelle faille? cette fois dans le RSS

      Posté par  (site web personnel) . Évalué à 3.

      Peut-être une nouvelle faille, mais dans le flux RSS: mon lecteur (akregator) affiche la photo - en taille originale - en lieu et place du pseudo. Pas très agréable. Ça vient peut-être d'akregator, mais dans le doute...

      "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

  • # On voit d'où vient la fôte

    Posté par  (site web personnel) . Évalué à 4.

    Ça a été réalisé sous Windows ! Vite, il faut résoudre la faille !

    Commentaire sous licence LPRAB - http://sam.zoy.org/lprab/

  • # Ruby pour les nuls

    Posté par  . Évalué à 3.

    Moi kini connait rien en ruby, ça fait quoi de faire @user_name = h @user_name ?

    • [^] # Re: Ruby pour les nuls

      Posté par  (site web personnel) . Évalué à 3.

      h est une méthode fournie par Ruby on Rails qui sert à échapper un contenu HTML. Il remplace <, > et & par les entités HTML correspondantes, ce qui évite les attaques XSS.

      • [^] # Re: Ruby pour les nuls

        Posté par  . Évalué à 1.

        Sans oublier les quotes :)

        Les données sont enregistrées échappées ? Pourquoi ne pas le faire à l'affichage ? C'est pas la vue qui devrait se charger de ce genre de choses ? (et le moteur de template le fait pas automatiquement ?)

        • [^] # Re: Ruby pour les nuls

          Posté par  . Évalué à 1.

          C'est pour l'optimisation. C'est inutile d'échapper tout le temps la donnée si elle peut l'être qu'une seule fois au moment de la sauvegarde. En particulier pour les longues chaines de caractères comme un journal et un commentaire¹ destinées à être exclusivement utilisées en étant échappées.

          Cela me rappelle un passé très lointain où les forums phpbb et invision étaient comparés et il était dit dans l'article quelque chose du genre: Mais qui peut être aussi fou d'échapper à chaque fois les même données (c'était phpbb). A l'époque où les systèmes de cache étaient peu utilisé, le gain en charge CPU pour un grand forum était vraiment non négligeable.

          Quant au modèle MVC, c'est bien la vue qui est censée faire cela, mais ici c'est un cas particulier pour une optimisation. Les rares framework que j'ai pu voir échappent bien par défaut les données, sauf si on les oblige à ne pas le faire pour certaines données précises. Donc la "vue" sait que ce genre de cas arrive et l'autorise.

          ¹ On parle d'username dans ce sujet mais sans savoir d'où vraiment la ligne de code sort, donc je ne m'avance pas plus.

          • [^] # Re: Ruby pour les nuls

            Posté par  . Évalué à 1.

            C'est inutile d'échapper tout le temps la donnée si elle peut l'être qu'une seule fois au moment de la sauvegarde

            Heu dans ce cas précis ok, mais la phrase est tournée comme si ça s'appliquait en général ;-)

            Dans le cas général c'est juste une fausse bonne idée, on se retrouve à jongler avec des données dont on ne sait plus trop lesquelles sont échappées ou pas, pour quoi elles sont échappées, etc. En plus un fonction d'échappement html c'est un remplacement de 4 caractères dans une chaîne, c'est pas une fonction coûteuse.

            • [^] # Re: Ruby pour les nuls

              Posté par  . Évalué à -7.

              Dans le cas général c'est juste une fausse bonne idée, on se retrouve à jongler avec des données dont on ne sait plus trop lesquelles sont échappées ou pas, pour quoi elles sont échappées, etc

              D'ou l'interet de nomme judicieusement les champs des objects. Beaucoup se foutent de java et de ses nom des methodes demsurement long, mais au moins entry.getCommentsHTMLEscaped(), ca laisse pas de doute.

              En plus un fonction d'échappement html c'est un remplacement de 4 caractères dans une chaîne, c'est pas une fonction coûteuse.

              T'en es si sur que ca?
              Meme si ta chaine fait 10 000 de long et que tu la sert 1000 fois par seconde? Ou pire, si elle fait 100 de long mais uqe t'en sert 100 a la fois, 1000 fois par secondes?
              Comment t'html-escaoe qq chose comme: <img src="plop" width="42" height="42" onload="alert.show('Attention derriere toi! un singe a trois tete!')"/>
              ou
              <a href="du cul du cul du cul">Un site sur les bebe phoques</a>

              tu remplace just les angles brackets par des & lt; & gt;?
              Ou tu dumpes tout sauf le src pour image?
              Pour le a tu fais comment?
              Et si le html est mal forme, mais suffisament bien pour etre interprete par un browser?

              If you can find a host for me that has a friendly parrot, I will be very very glad. If you can find someone who has a friendly parrot I can visit with, that will be nice too.

          • [^] # Re: Ruby pour les nuls

            Posté par  (site web personnel) . Évalué à 3.

            C'est inutile d'échapper tout le temps la donnée si elle peut l'être qu'une seule fois au moment de la sauvegarde.

            Il faut quand même faire attention aux utilisations futures. Les méthodes pour échapper un contenu ne sont pas les mêmes pour une sortie en HTML, un flux RSS ou ATOM ou si le contenu va se retrouver dans javascript ou JSON (cas d'un widget exportable par exemple). C'est aussi une mauvaise idée que de vouloir échapper les < et > d'un identifiant (la personne serait obligée de taper l'entité HTML correspondante pour s'identifier).

            C'est pour l'optimisation.

            Je n'ai pas fait ça pour optimiser le temps CPU mais pour éviter de dupliquer la logique d'échappement entre la vue normale en HTML et les mises à jour envoyées via le daemon Board.

        • [^] # Re: Ruby pour les nuls

          Posté par  (site web personnel) . Évalué à 3.

          Les données sont enregistrées échappées ?

          Oui.

          Pourquoi ne pas le faire à l'affichage ?

          Parce que ce n'est pas aussi simple que ça en a l'air.

          C'est pas la vue qui devrait se charger de ce genre de choses ?

          Si.

          et le moteur de template le fait pas automatiquement ?

          Si, aussi.

          Mais la tribune est un cas particulier, les messages qui y sont postés sont poussés aux navigateurs via une technique de long-polling en passant par un daemon intermédiaire (Board). Du coup, pour éviter d'avoir à échapper deux fois les mêmes champs (une fois pour l'affichage normal et une fois pour le rafraichissement automatique en JS), je préfère faire ça en amont.

          C'est un choix discutable mais, pour le moment, je privilégie la non-duplication du code à la pureté idéologique.

    • [^] # Re: Ruby pour les nuls

      Posté par  . Évalué à 4.

      Si tu parles le perl, c'est comme q($user_name). Si tu parles ni le perl ni le ruby, tu peux lire : http://www.railsrocket.com/the-mysterious-h-function

  • # Ça serait pas arrivé avec django...

    Posté par  . Évalué à 1.

    Et oui, Django a l'échappement automatique ! Bienvenue au XXIème siècle !

    Et en plus avec Django vous avez un vrai langage et pas un pseudo-perl !

    </troll>

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.