Update: You may also want to look at: Actualización: También puede ver en: MySpace Hack: How To View Any Users Private Videos MySpace Hack: ¿Cómo ver a los usuarios vídeos privados .

Recently Recientemente 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 samy a punto la namb] liberado un gusano [ "gusano de Samy" o "JS.Spacehero gusano"] en MySpace, la popular plataforma de redes sociales como Friendster, lo que causó que se le añade como héroe a millones de usuarios de MySpace ( "pero la mayoría de todos, samy samy es mi héroe. ") así como añadir él como su amigo, todos sin su permiso explícito.

After flooding the Network, MySpace stepped in and fixed the hole. Después de las inundaciones la Red, MySpace intervino y fija el agujero. Samy is still “hero” to millions of MySpace users in their profile. Samy sigue siendo "héroe" a millones de usuarios de MySpace en su perfil.

The purpose of this article is to highlight the security issues exposed by this worm. El propósito de este artículo es poner de relieve las cuestiones de seguridad expuestas por este gusano. 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. Es definitivamente no se limita solo a MySpace y el gusano no se propaga debido a MySpace, pero la culpa la culpa de navegador como Internet Explorer. And the flaw is waiting to be exploited in several other web applications of similar nature like Ryze or LinkedIn etc.. Y el defecto está a la espera de ser explotado en varias otras aplicaciones web de naturaleza similar como Ryze o 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. En el resto de este artículo voy a resumir el modus-operandi de su guión y sugerir sobre las formas de proteger la aplicación Web en contra de tales ataques.

Samy used AJAX to add himself as a friend and hero when users visited his page. Samy utiliza AJAX para añadir a si mismo como un amigo y héroe cuando los usuarios visitaron su página. This requires Javascript to be executed in the browser which does the dirty work. Para ello se requiere Javascript para ser ejecutado en el navegador que hace el trabajo sucio.

MySpace dutifully eliminates javascript from users html (which becomes their profile). MySpace diligentemente elimina javascript html de los usuarios (que se convierte en su perfil). However Sammy disguised the word javascript with an embedded newline - “java\nscript”. Sin embargo Sammy encubierta de la palabra javascript incrustado con un salto de línea - "java \ nscript".

MySpace doesn’t allow script tags. MySpace no permite etiquetas de secuencia de comandos. So he embedded his javascript in CSS - style=”background:url(’javascript:eval(document.all.mycode.expr)’)” Así que su javascript embebido en CSS - style = "fondo: url (" javascript: eval (document.all.mycode.expr) ') "

AJAX can fetch documents from the same domain (or sub-domain) only. AJAX puede obtener los documentos desde el mismo dominio (o sub-dominio). 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. Por lo tanto, si el usuario está en profile.myspace.com, se trasladó a www.myspace.com que proporciona la misma información pero le permite ser añadido como amigo.
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. Después de superar una trvial hash cuestión, añade su código y "pero la mayor parte de todos, samy samy es mi héroe." Texto a los usuarios de perfil. This causes the worm to propagate not only when users visit his site but also when they visit any of the infected users. Esto provoca que el gusano para propagarse no sólo cuando los usuarios visitan su sitio, sino también cuando se visita cualquiera de los usuarios infectados. Yes, simple exponential spreading. Sí, simple propagación exponencial.

Samy provides Samy proporciona detailed notes and code for his exploit notas detalladas y el código para su explotación after the exploit was filtered / stopped by MySpace. después de explotar la era filtrada / parado de MySpace.

How can you protect your web application from such attacks? ¿Cómo se puede proteger la aplicación Web de este tipo de ataques?
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. En primer lugar yo asumo que usted ha filtrado en su lugar al igual que hizo MySpace filtrado de scripts de javascript y etiquetas, etc Sin embargo, evidentemente, eso no es suficiente, ni siquiera cerca.
Your filtering tags should be intelligent to recognize words separated by newlines as shown above. Su filtrado de etiquetas inteligentes deben reconocer palabras separadas por saltos de línea como se muestra arriba.

Other users profile (or any html content) should be viewable only from a separate sub-domain. Otros usuarios de perfil (o cualquier contenido html) debe ser visible únicamente de un sub-dominio.

Any actions like adding a link, friend, connection etc. must be done from pages which can never contains any other users code. Cualquier acciones como añadir un enlace, amigo, etc conexión debe hacerse a partir de páginas que nunca contiene a todos los demás usuarios de código. 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 usted proporciona un enlace, mientras que otros: el perfil para añadir a su amigo como una continuación, hacer clic en él que usted toma a una página donde los usuarios llega a modificar la información acerca de su amigo y le agregue después de la confirmación. This page should not contain any html content from the user being added. Esta página no debería contener todo el código HTML de contenido al usuario que se va a añadir.

In essence we need to captalize on AJAX security model which prevents code execution from different site. En esencia tenemos que captalize en AJAX modelo de seguridad que impide la ejecución de código de sitio diferente.