В браузерах на основе Chromium и Firefox реализована поддержка технологии WebRTC для аудио- и видеочатов прямо из окна браузера. Кроме удобства, эта функция имеет неприятный побочный эффект.

В частности, WebRTC допускает отправку запросов к STUN-серверам, которые возвращают локальный и публичный IP-адрес пользователя. Такие запросы можно осуществлять скриптом, поэтому IP-адреса отображаются средствами JavaScript.

Запросы отправляются в обход стандартной процедуры XMLHttpRequest и не видны из консоли разработчика, их нельзя заблокировать плагинами вроде AdBlockPlus или Ghostery. Таким образом, эти запросы могут использовать, например, рекламодатели, для скрытного отслеживания пользователей.

На этой демо-странице ты увидишь свой собственный локальный и внешний IP.

003

Такой код работает в Firefox и Chrome. Его можно скопировать в консоль разработчика для тестирования.

//get the IP addresses associated with an account
function getIPs(callback){
    var ip_dups = {};

    //compatibility for firefox and chrome
    var RTCPeerConnection = window.RTCPeerConnection
        || window.mozRTCPeerConnection
        || window.webkitRTCPeerConnection;
    var mediaConstraints = {
        optional: [{RtpDataChannels: true}]
    };

    //firefox already has a default stun server in about:config
    //    media.peerconnection.default_iceservers =
    //    [{"url": "stun:stun.services.mozilla.com"}]
    var servers = undefined;

    //add same stun server for chrome
    if(window.webkitRTCPeerConnection)
        servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};

    //construct a new RTCPeerConnection
    var pc = new RTCPeerConnection(servers, mediaConstraints);

    //listen for candidate events
    pc.onicecandidate = function(ice){

        //skip non-candidate events
        if(ice.candidate){

            //match just the IP address
            var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/
            var ip_addr = ip_regex.exec(ice.candidate.candidate)[1];

            //remove duplicates
            if(ip_dups[ip_addr] === undefined)
                callback(ip_addr);

            ip_dups[ip_addr] = true;
        }
    };

    //create a bogus data channel
    pc.createDataChannel("");

    //create an offer sdp
    pc.createOffer(function(result){

        //trigger the stun server request
        pc.setLocalDescription(result, function(){}, function(){});

    }, function(){});
}

//Test: Print the IP addresses into the console
getIPs(function(ip){console.log(ip);});

Единственные расширения, которые блокируют такие запросы, — это расширения, полностью запрещающие выполнение скриптов, как NoScript для Firefox. Разумеется, в настройках браузера тоже есть опция, чтобы запретить скрипты.

004

18 комментариев

  1. 29.01.2015 at 15:14

    а то, что mozilla thunderbird светит и локальным ip исходящих писем, это никого уже не смущает?

  2. 29.01.2015 at 15:42

    То то я думаю как они умудряются сканировать порты на машине за роутером

    • 30.01.2015 at 00:04

      бррррр что то дикое ты написал.

      Из известных мне способов пробить NAT может только IRC клиент и то если пользователь сам зайдет по ссылке.(если память не изменяет. IRC открывает порт и поддерживает его в открытом состоянии)

      А пробить NAT …. хм. пруф пож.

    • 30.01.2015 at 23:21

      Так сам роутер порты и сканирует. Или посылает что-нибудт вроде unwanted arp или широковещательные сообщения netbios, например.

  3. 29.01.2015 at 17:00

    А на кой скрин хромой Оперы прикрутили? В «православной» 12.х эта хрень не работает, да, по большому счёту, и не нужна, ибо зло.

  4. 29.01.2015 at 18:40

    Хакер, у тебя уже была эта новость, год назад наверное.
    https://xakep.ru/2014/01/24/61942/

  5. 30.01.2015 at 00:10

    Прошу прощения за оффтоп: А кто уже пользовался «WebRTC»? и как им пользоваться буду благодарен за ссылку

    • 30.01.2015 at 01:03

      Клик правой кнопкой по панели, вытащи кнопку видеочата. Кликни по ней, появится ссылка, открой её в другом Firefox и между ними установится видеосвязь.

      Что хочу сказать по теме. Анонимность вы получите только с прокси. Так что светится ваш локальный IP или нет — неважно.

      • 02.02.2015 at 22:36

        Локальный — не важно. Но там есть такая штука- публичный ип. прокси или впн стоит- не важно, отдаёт реальный айпишник.
        ПС: это не баг, это фича

  6. 30.01.2015 at 01:37

    > в настройках браузерах

Оставить мнение

Check Also

Скрытая сила пробела. Эксплуатируем критическую уязвимость в Apache Tomcat

В этой статье мы поговорим о баге в Apache Tomcat, популярнейшем веб-сервере для сайтов на…