Tuesday, September 8, 2026

VoidStealer Steals Chrome Secrets Without Injection or Privilege Escalation

A new variant of the MaaS infostealer VoidStealer has become the first malware observed in the wild to weaponize a debugger‑based bypass for Google Chrome’s Application‑Bound Encryption (ABE), using hardware breakpoints to steal Chrome’s v20_master_key directly from browser memory.

Unlike previous ABE bypasses, this method requires neither SYSTEM‑level privilege escalation nor code injection into the browser process, significantly reducing the detection footprint while still giving attackers full access to ABE‑protected cookies and credentials.

ABE stores secrets such as cookies and, in some configurations, passwords as v20‑prefixed values encrypted with a per‑application AES‑GCM key (often referred to as the v20_master_key), which is itself protected using CryptProtectData under NT AUTHORITY\SYSTEM and decrypted via the Google Chrome Elevation Service when Chrome calls IElevator::Decrypt.

Traditional infostealers have responded with several bypasses, including running as SYSTEM and replicating the service logic or injecting into the browser to invoke IElevator::DecryptData via COM from inside the Chrome context. However, both approaches are relatively noisy in EDR telemetry.

Google introduced ABE in Chrome 127 in July 2024 to make cookie and, progressively, other secret theft attempts noisier by tying decryption to Chrome’s identity and a privileged elevation service.

VoidStealer v2.0 changelog (Source : Google).
VoidStealer v2.0 changelog (Source : Google).

VoidStealer follows this pattern by implementing the “classic” COM‑based IElevator::DecryptData injection technique as a fallback.

However, its standout feature in v2.0 is a debugger‑driven method that sidesteps both SYSTEM and injection requirements by stealing the master key at the brief moment it exists in plaintext during normal ABE decryption.

This makes the new bypass especially attractive to threat actors who want to evade behavioral detections focused on privilege escalation, process hollowing, and remote thread injection into browsers.

Debugger‑Based v20_master_key

The new technique, copied almost directly from Meckazin’s open‑source ElevationKatz project, hinges on attaching to Chrome or Edge as a debugger and leveraging hardware breakpoints to intercept the v20_master_key when Chrome decrypts it to process ABE‑protected data.

VoidStealer creating a suspended browser process, resuming it, and attaching to it as a debugger (Source : Google).
VoidStealer creating a suspended browser process, resuming it, and attaching to it as a debugger (Source : Google).

VoidStealer v2.0 begins by spawning a hidden browser instance with CreateProcessW using SW_HIDE and CREATE_SUSPENDED, then quickly resuming it and attaching as a debugger via DebugActiveProcess, capitalizing on the fact that browsers typically load and decrypt cookies during startup.

Once attached, VoidStealer waits for LOAD_DLL_DEBUG_EVENT notifications, identifies chrome.dll or msedge.dll, and scans the module’s .rdata section with ReadProcessMemory to locate the OSCrypt.AppBoundProvider.Decrypt.ResultCode string, which Chromium places immediately after a call to os_crypt::DecryptAppBoundString in the ABE decryption path.

ABE-protected value decryption visualization (Source : Google).
 ABE-protected value decryption visualization (Source : Google).

It then scans the .text section for LEA instructions (48 8D 0D …) whose computed displacement resolves to that string, yielding a precise instruction address that is executed when the v20_master_key is resident in plaintext.

Using NtGetNextThread and SetThreadContext, VoidStealer configures a hardware breakpoint (DR0/DR7) at that address across all existing and newly created browser threads, avoiding any patching of browser memory that a software breakpoint would require.

Python script for extracting encrypted passwords from Chrome (Source : Google).
Python script for extracting encrypted passwords from Chrome (Source : Google).

When the browser hits this breakpoint during startup, the current builds of Chrome and Edge place a pointer to the v20_master_key in R15 (Chrome) or R14 (Edge), allowing VoidStealer to follow the register value and extract the key with a pair of ReadProcessMemory calls, without any CryptUnprotectData or CryptUnprotectMemory usage inside the victim process.

Once the v20_master_key is obtained, the infostealer can offline‑decrypt any v20‑prefixed ABE‑protected cookies and credentials from the browser SQLite databases, effectively nullifying ABE’s protection for that profile.

Detection Opportunities for Defenders

While implementation details may vary as other malware families adopt similar techniques, the bypass exhibits several stable behavioral invariants that defenders can target.

Following the cross-reference in chrome.dll, we can see that the disassembled code corresponds to the source code and that the cross-reference comes from a LEA instruction. 

The disassembled code corresponding to the source code  (Source : Google).
The disassembled code corresponding to the source code  (Source : Google).

First, the attack requires either launching a browser under a debugger or attaching a debugger to an existing Chrome or Edge process, which is highly atypical for non‑developer software; monitoring for DebugActiveProcess, debug object handles, or unexpected parent processes for chrome.exe/msedge.exe can surface such activity.

Second, the technique depends on intensive browser memory reads, including scanning .text/.rdata sections and reading key material, so correlating ReadProcessMemory calls against browser processes from unsigned or untrusted binaries is a strong hunting signal.

In addition, most infostealers will try to conceal the helper browser instance used for the bypass, for example by creating it with SW_HIDE, running in headless mode, or placing windows off‑screen, making hidden or non‑interactive browser sessions launched by unknown parents another important indicator.

Telemetry pipelines that fuse process creation, debugger attachment, memory‑access patterns, and hidden‑window flags are well positioned to catch this new class of ABE bypass even though it avoids privilege escalation and direct code injection.

Follow us on Google NewsLinkedIn, and X to Get Instant Updates and Set GBH as a Preferred Source in Google.

Mayura Kathir
Mayura Kathirhttps://gbhackers.com/
Mayura Kathir is a cybersecurity reporter at GBHackers News, covering daily incidents including data breaches, malware attacks, cybercrime, vulnerabilities, zero-day exploits, and more.

Hot this week

How To Access Dark Web Anonymously and know its Secretive and Mysterious Activities

What is Deep Web The deep web, invisible web, or...

How to Build and Run a Security Operations Center (SOC Guide) – 2023

Today’s Cyber security operations center (CSOC) should have everything...

Russian Hackers Bypass EDR to Deliver a Weaponized TeamViewer Component

TeamViewer's popularity and remote access capabilities make it an...

Web Server Penetration Testing Checklist – 2026

Web server pentesting is performed under three significant categories: identity,...

ATM Penetration Testing – Advanced Testing Methods to Find The Vulnerabilities

ATM Penetration testing, Hackers have found different approaches to...

Related Articles

Recent News