Update: You may also want to look at: Mise à jour: mai Vous voulez également de se pencher sur: MySpace Hack: How To View Any Users Private Videos MySpace hack: comment afficher tous les utilisateurs privés vidéos .

Recently Récemment Samy [samy at namb dot la] released a worm ["Samy worm" or "JS.Spacehero worm"] in MySpace, popular social networking platform like Friendster, which caused him to be added as hero to millions of MySpace users (”but most of all, samy is my hero.”) as well as add him as their friend, all without their explicit permission. [Samy namb à la dot] a sorti un ver [ "ver de Samy" ou "ver JS.Spacehero"] dans MySpace, populaire plate-forme de réseaux sociaux comme Friendster, qui lui a causé d'être ajouté comme héros pour des millions d'utilisateurs de MySpace ( "mais la plupart de tous, Samy est mon héros. "), ainsi que d'ajouter comme leur ami, tous, sans leur autorisation explicite.

After flooding the Network, MySpace stepped in and fixed the hole. Après les inondations du réseau, renforcée de MySpace et fixe le trou. Samy is still “hero” to millions of MySpace users in their profile. Samy est toujours "héros" à des millions d'utilisateurs de MySpace dans leur profil.

The purpose of this article is to highlight the security issues exposed by this worm. Le but de cet article est de mettre en lumière les questions de sécurité exposés par ce ver. It is definitely not limited to MySpace alone and the worm propagated not due to MySpace’s fault but fault of browser like Internet Explorer. Il n'est certainement pas limité à MySpace et seul le ver propage pas due à la faute de MySpace mais faute de navigateur comme Internet Explorer. And the flaw is waiting to be exploited in several other web applications of similar nature like Ryze or LinkedIn etc.. Et la faille est prêt à être exploité dans plusieurs autres applications web de même nature comme Ryze ou LinkedIn etc. In the remainder of this article I will summarize the modus-operandi of his script and suggest on ways to protect your web application against such attacks. Dans le reste de cet article, je vais résumer le modus-operandi de son script et de laisser entendre sur les moyens de protéger votre application Web contre de telles attaques.

Samy used AJAX to add himself as a friend and hero when users visited his page. Samy utilisé AJAX d'ajouter lui-même comme un ami et héros lorsque les utilisateurs ont visité sa page. This requires Javascript to be executed in the browser which does the dirty work. Cela nécessite Javascript pour être exécuté dans le navigateur qui fait le sale boulot.

MySpace dutifully eliminates javascript from users html (which becomes their profile). MySpace loyalement élimine javascript html de la part des utilisateurs (qui devient leur profil). However Sammy disguised the word javascript with an embedded newline - “java\nscript”. Toutefois Sammy déguisée le mot javascript intégré avec une nouvelle ligne - "java \ nscript".

MySpace doesn’t allow script tags. MySpace ne permet pas de balises de script. So he embedded his javascript in CSS - style=”background:url(’javascript:eval(document.all.mycode.expr)’)” Il a donc intégré dans son javascript CSS - style = "background: url (" javascript: eval (document.all.mycode.expr) ') "

AJAX can fetch documents from the same domain (or sub-domain) only. AJAX peut récupérer les documents du même domaine (ou sous-domaine). So if the user was on profile.myspace.com, he moved them to www.myspace.com which provides the same information but allows him to be added as a friend. Donc si l'utilisateur est sur profile.myspace.com, il a déménagé à www.myspace.com qui fournit les mêmes informations, mais lui permet d'être ajoutée comme un ami.
if (location.hostname == 'profile.myspace.com') document.location = 'http://www.myspace.com' + location.pathname + location.search; if (location.hostname == 'profile.myspace.com') document.location = 'http://www.myspace.com' + location.pathname + location.search;

After overcoming a trvial hash issue he adds his code and “but most of all, samy is my hero.” text to users profile. Après avoir surmonté une question de hachage trvial ajoute-t-il et son code ", mais surtout, Samy est mon héros." Text to profil de l'utilisateur. This causes the worm to propagate not only when users visit his site but also when they visit any of the infected users. Cela provoque le ver se propage pas uniquement lorsque les utilisateurs visitent son site, mais aussi quand ils visitent l'un des utilisateurs infectés. Yes, simple exponential spreading. Oui, simple diffusion exponentielle.

Samy provides Samy offre detailed notes and code for his exploit des notes détaillées et le code de son exploitation after the exploit was filtered / stopped by MySpace. après l'exploit a été ou filtrés par arrêté MySpace.

How can you protect your web application from such attacks? Comment pouvez-vous protéger votre application Web contre de telles attaques?
First and foremost I assume you have filtering in place like MySpace did filtering scripts and javascript tags etc. However obviously that is not enough; not even close. D'abord et avant tout, je suppose que vous avez le filtrage en place comme MySpace n'a filtrage des scripts javascript et balises etc Mais évidemment, cela ne suffit pas, pas même à proximité.
Your filtering tags should be intelligent to recognize words separated by newlines as shown above. Votre filtrage des balises doivent être intelligent pour reconnaître les mots séparés par la ligne comme indiqué ci-dessus.

Other users profile (or any html content) should be viewable only from a separate sub-domain. Les autres utilisateurs profil (ou de tout contenu html) devrait être visible uniquement à partir d'un autre sous-domaine.

Any actions like adding a link, friend, connection etc. must be done from pages which can never contains any other users code. Les actions telles que l'ajout d'un lien, un ami, etc connexion doit être effectuée à partir de pages qui ne peut jamais tout contient le code d'autres utilisateurs. If you provide a link while viewing others profile to add his as a friend then on clicking you take him to a separate page where the users gets to edit information about his friend and add him after confirmation. Si vous fournissez un lien tout en affichant le profil d'autres à ajouter que son ami puis un en cliquant vous emmener à une autre page où les utilisateurs est d'éditer des informations sur son ami et lui ajouter après la confirmation. This page should not contain any html content from the user being added. Cette page ne doit pas contenir tout le contenu HTML de l'utilisateur à ajouter.

In essence we need to captalize on AJAX security model which prevents code execution from different site. En substance, nous devons captalize sur AJAX modèle de sécurité qui empêche l'exécution de code de site différent.