Adbleed

Adblock Filter List Fingerprinting

This proof-of-concept demonstrates that users of adblockers with country-specific filter lists (e.g., EasyList Germany, Liste FR) can be partially de-anonymized even when using a VPN. By probing blocked domains unique to each country's filter list, we can identify which lists are active — revealing the user's likely country or language.

Your IP location United States via 216.73.216.129 — this is what your IP says. The detection below checks what your adblocker says.

Country Filter Lists

Each card represents a country-specific adblock filter list. We probe 30 domains per list that are blocked exclusively by that country's list.

How It Works

1

Domain Extraction

Each country-specific filter list blocks ad-serving domains unique to that region. For example, EasyList Germany blocks adnx.de, adition.de, and hundreds of other German ad networks that are not in the base EasyList. We extracted and cross-referenced all domain rules against the base EasyList (54,000+ domains) to find domains blocked only by the country list.

2

Domain Probing

We attempt to load a tiny resource (favicon) from 30 country-specific domains. When an adblocker blocks the request, the error fires almost instantly (< 30ms) because the request is intercepted before reaching the network. A normal network failure (DNS timeout, connection refused) takes much longer (> 100ms). This timing difference reveals which domains are being blocked.

3

Fingerprint Assembly

If 20+ out of 30 probed domains are blocked instantly, we conclude that the country's filter list is active. The combination of detected lists creates a unique fingerprint that can reveal the user's location or language, even through a VPN or proxy.

Methodology Notes

  • All 30 domains per country are selected to ensure they are absent from the base EasyList (54,415 rules) and are tested against Brave Browser's default Shields to limit false positives. Results may vary depending on the adblocker in use.
  • Detection logic requires at least 20 out of 30 domain probes to be blocked. This high threshold reduces false positives caused by browsers that include additional generic filter lists beyond EasyList.
  • Adblocker blocks (errors in less than 30ms) are distinguished from standard network failures (errors in more than 100ms) using performance.now() high-resolution timing.
  • Known-blocked domains (positive controls) and known-good domains (negative controls) are probed to verify adblocker functionality and calibrate timing.
  • All detection operates client-side in pure JavaScript. The page can be served as a static file.

Try It Yourself

Enable a country-specific filter list in your adblocker, then re-run the detection to see it get identified. Here's how to toggle lists in common setups.

Brave Browser

  1. Open brave://settings/shields/filters in your address bar
  2. Browse the list of available filter lists
  3. Toggle on any country-specific list (e.g., EasyList Germany, Liste FR)
  4. Return to this page and click Run Detection

uBlock Origin

  1. Click the uBlock Origin icon in your toolbar, then the gear icon to open the dashboard
  2. Go to the Filter lists tab
  3. Expand the Regions, languages section
  4. Check any country list, click Apply changes, and re-run detection

AdBlock Plus

  1. Click the ABP icon and select Settings
  2. Go to the Advanced tab
  3. Under Filter lists, click Add a new filter list
  4. Select a language-specific list from the dropdown and click Add

AdGuard

  1. Open AdGuard and go to Settings → Filters
  2. Find the Language-specific category
  3. Enable any regional filter (e.g., AdGuard German filter)
  4. Wait for the list to update, then re-run detection here

Pi-hole / DNS-level

  1. Open your Pi-hole admin panel at http://pi.hole/admin
  2. Go to Group Management → Adlists
  3. Add a country-specific blocklist URL (e.g., the EasyList Germany URL)
  4. Run pihole -g to update gravity, then re-run detection

Note: DNS-level blocking may not trigger the same timing signature as browser-based adblockers. Results may differ.

Firefox with built-in tracking protection

  1. Firefox's Enhanced Tracking Protection uses Disconnect lists, not EasyList
  2. To test with country lists, install uBlock Origin from the Add-ons store
  3. Follow the uBlock Origin instructions above to enable regional lists