WebAssembly-Based Fingerprinting: How Hidden Modules Analyze Your CPU Cache

BadB

Professional
Messages
2,415
Reaction score
2,363
Points
113
How websites use WASM to measure cache access times and identify processor microarchitecture

Introduction: A Compiler in Your Browser​

You've disabled JavaScript. You've blocked Canvas, WebGL, and AudioContext.
You're convinced, "Now I'm invisible".

But you're instantly blocked.

The reason? WebAssembly (WASM)—a compact, fast, and invisible to most anti-detection solutions module that silently measures CPU cache access microseconds — and that's exactly what it reveals:
  • Processor type (Intel vs AMD vs Apple Silicon),
  • Microarchitecture (Skylake, Zen 3, M1),
  • Even the system load level.

In this article, we'll take a deep technical look at how WASM fingerprinting works, why it doesn't rely on JavaScript, and how even your cache can give away your hardware.

Part 1: What is WebAssembly Fingerprinting?​

⚙️ Technical definition​

WebAssembly (WASM) is a binary instruction format that runs in the browser at near-native speed.
Unlike JavaScript, WASM:
  • Does not have direct access to the DOM,
  • But it can perform low-level operations with memory and timers.

💡 Key fact:
WASM can measure the execution time of operations with an accuracy of 0.1 nanoseconds - and use this to analyze the CPU cache.

Part 2: How WASM Measures CPU Cache​

🔬 Analysis Method: Cache Timing Attack​

Step 1: Create a controlled load
WASM module:
  • Allocates a large array in memory,
  • Fills it with random data,
  • Clears the CPU cache (via clflush or equivalent).

Step 2: Measuring access time
C:
// Example in C (compiled in WASM)
uint64_t start = rdtsc();
volatile char x = array[0]; // Read from memory
uint64_t end = rdtsc();
uint64_t latency = end - start;

💀 Problem:
Browsers prohibit rdtsc, but WASM uses high-precision timers via JS wrappers.

Step 3: Building a cache profile
  • The access time to different levels of cache is measured:
    • L1 Cache: ~1–2 cycles,
    • L2 Cache: ~10–20 cycles,
    • L3 Cache: ~40–100 cycles,
    • RAM: ~200+ clock cycles.

📊 Entropy:
The combination of latencies gives an entropy of 28–32 bits1 in 4 billion.

Part 3: How Microarchitecture Affects Latency​

📈 CPU Latency Table (2026)​

ProcessorL1 LatencyL2 LatencyL3 LatencyPeculiarities
Intel i5-12400 (Alder Lake)1.2 ns12.5 ns45.3 nsHybrid architecture
AMD Ryzen 5 5600X (Zen 3)1.0 ns10.2 ns38.7 nsSingle CCD
Apple M1 (Firestorm)0.9 ns9.8 nsNo L3Unified memory
Intel Xeon E5-2670 (Sandy Bridge)1.5 ns18.3 ns62.1 nsOld architecture

💀 Anomaly example:
You claim Intel i5-12400, but L3 latency = 38.7 ns → the system sees: “It’s AMD”fraud score = 95+

Part 4: How Fraud Engines Use WASM Fingerprinting​

🧠 Analysis process (Cloudflare, Akamai)​

Step 1: Collecting Reference Profiles
  • The system collects a latency databasefor real users:
    • Intel Alder Lake: L3 = 45.3 ± 2.1 ns,
    • AMD Zen 3: L3 = 38.7 ± 1.8 ns.

Step 2: Compare with the current profile
  • If your profile:
    • L3 = 38.7 ns,
  • The system compares with the base → determines: “This is AMD, not Intel ”.

Step 3: Assigning a Trust Score
  • Match: low fraud score,
  • Mismatch: high fraud score.

📈 CPU identification accuracy by WASM latencies: 94% (according to Cloudflare, Q1 2026).

Part 5: How to Test Your Vulnerabilities​

🔍 Step 1: Use test sites​


🔍 Step 2: Run a local test​

js:
Code:
// Loading the WASM module
fetch('cache-timing.wasm')
.then(response => response.arrayBuffer())
.then(bytes => WebAssembly.instantiate(bytes))
.then(result => {
const latency = result.instance.exports.measureCacheLatency();
console.log('L3 Cache Latency:', latency, 'ns');
});

💡 Rule:
If L3 latency does not match the declared CPU → you have already been given away.

Part 6: How to Protect Yourself from WASM Fingerprinting​

🔧 OS and hardware level​

🪟 Windows 10 Pro (bare metal)
  • Use real hardware with Intel CPU,
  • Update the chipset drivers,
  • Avoid CPU overclocking (causes latency instability).

🐧 Linux (VPS - not recommended)
  • Virtualization distorts latencies,
  • This gives away VPS → avoid.

🔧 Browser level​

🦊 Firefox
  1. Enter about:config,
  2. Find:
    • javascript.options.wasm → false.

🦒 Chrome / Chromium
  • There is no built-in way to disable WASM,
  • Use anti-detect browsers.

🐬 Dolphin Anty
  1. When creating a profile,
  2. In the Scripts section,
  3. Select: "Disable WebAssembly".

⚠️ The hard truth:
Disabling WASM is the only reliable defense.
Latency spoofing is impossible.

Part 7: Why Most Carders Fail​

❌ Common Mistakes​

ErrorConsequence
Using VPS/RDPDistorted latencies → anomaly
Ignoring WASMThey think it's "just a compiler" → failure
Disabling JavaScript onlyWASM works without JS → leak

💀Field data (2026):
78% of failures are due to WASM Fingerprinting, even with a perfect Canvas.

Part 8: Practical Guide - Secure Profile​

🔹 Step 1: Set up RDP​

  • Install Windows 10 Pro on bare metal (Hetzner AX41),
  • Make sure you are using Intel i5-12400.

🔹 Step 2: Check latencies​

  • Run the test above,
  • Make sure that:
    • L1: 1.0–1.4 ns,
    • L2: 11–14 ns,
    • L3: 43–47 ns.

🔹 Step 3: Disable WASM​

  • В Dolphin Anty → Disable WebAssembly,
  • Check out wasmfp.com

✅ Result:
Your profile will match the real Intel CPUlow fraud score.

Conclusion: Cache is the new fingerprint​

WebAssembly Fingerprinting isn't just "another API". It's a physical fingerprint of your CPU that no anti-detection browser can hide.

💬 Final thought:
True anonymity doesn't start with disabling JavaScript, but with understanding that even caches have a frequency.
Because in a world of fraud, even a nanosecond can give you away.

Stay technically accurate. Stay on top of your hardware.
And remember: in the world of security, cache is identity.
 
Top