Skip to content

What is a WebRTC leak, and how do you test for one?

WebRTC is the browser technology behind video calls and peer-to-peer connections. To connect two people directly, it collects ICE candidates: the addresses a peer could use to reach you. Any web page can ask for these with a few lines of JavaScript, no permission prompt needed. A WebRTC leak is when those candidates reveal an address you meant to hide, usually your real public IP while you are using a VPN or proxy.

There are two kinds of address involved. Host candidates describe your own network interfaces; historically that meant your local address, such as 192.168.1.20. Server-reflexive candidates come from asking a public STUN server what address it sees; that is your public IP. The leak happens because WebRTC sends that STUN request over UDP, directly, even when your web traffic goes through a proxy. The page then sees one address in the connection and another over WebRTC.

What a normal result looks like today. Chrome, Firefox and Safari no longer publish your local address by default. They replace it with a random name ending in .local (mDNS), unique per site. So a host candidate like c6d5cfe9-….local is your browser protecting you, not leaking. Some test pages still count it as a leak; CreepJS is one of them. A public IP in the server-reflexive candidate is only a leak if it differs from the IP you are browsing from.

How to test. Connect to your VPN or proxy, then open a WebRTC test such as the WebRTC page on BrowserLeaks, the WebRTC section of BrowserScan, or the Clearcote audit, which runs seven WebRTC checks and explains each one. Compare the public address WebRTC shows with the IP the site shows for your connection. Same address: no leak. Your real home address: a leak.

One common false alarm. On a dual-stack home connection, a page may load over IPv6 while WebRTC reports your IPv4 address. Both are genuinely yours and there is no VPN to bypass, but some tests read the difference as a hidden IP. In our own test, BrowserScan took 10% off a genuine Chrome for exactly this, on a home line with no proxy at all.

How to fix a real leak. Use a VPN app with WebRTC leak protection turned on, or restrict WebRTC in the browser. In Brave, set Settings → Privacy and security → WebRTC IP handling policy to "Disable non-proxied UDP". In Chrome, there's no built-in setting: install Google's own WebRTC Network Limiter extension, or, on managed machines, set the WebRtcIPHandling policy. In Firefox, setting media.peerconnection.enabled to false in about:config turns WebRTC off entirely, which also breaks video calls in the browser.

Disabling WebRTC completely closes the leak, but it is visible: a site can tell a browser that offers no candidates at all from one that offers a protected .local address, and the first is much rarer. For automation behind a proxy, the cleaner answer is to make WebRTC report the proxy's address. In Clearcote's latest build, --webrtc-ip does exactly that: the engine presents the given address as the public candidate and sends no real STUN request, so the real IP never leaves the machine and the two addresses agree. See the fingerprint flags.

Related reading

Q&AWhat does WebRTC SDP reveal about a browser?A local SDP offer — no iceServers, zero network traffic — is a manifest of the native WebRTC stack: codec order, rtcp-fb lines and extmap URIs.Q&AWhat is a timezone / IP mismatch?When a browser's timezone, locale and language don't match the geolocation of its IP (often a proxy), the contradiction flags the session as suspicious.Q&AWhat is browser fingerprinting?Browser fingerprinting identifies a device by combining signals like canvas, WebGL, fonts, and hardware into a stable, often unique hash — without cookies.Free toolWebRTC leak test: is your real IP exposed?Check whether WebRTC reveals an IP other than your connection's, and whether your time zone and languages fit your IP's location. Nothing is stored.Test guideBrowserLeaks, explainedBrowserLeaks isn't one test with a score. It is a toolbox of separate pages, each showing the raw values your browser reports about one thing: your IP, JavaScript, WebRTC, canvas, WebGL, fonts, TLS and more. That makes it the best place to check one specific value.Test guideBrowserScan, explainedBrowserScan gives your browser an authenticity percentage and lists exactly what it took points off for. That makes it one of the easier tests to read, as long as you know which deductions come from your connection rather than your browser.DocsFingerprint flags and profilesReference for every Clearcote fingerprint switch: seed-derived personas, real Chrome profile imports, WebGPU/WebGL controls, locale, storage and canvas noise.

Clearcote puts this into practice

An open-source Chromium with fingerprint control compiled into the engine. A drop-in for Playwright & Puppeteer.

Free for one browser with GitHub. No card.