Back to Intelligence

PEEP Post-Compromise Toolkit: Detecting and Removing Malicious Chromium Extensions Injected via Forged Secure Preferences

SA
Security Arsenal Team
September 7, 2026
10 min read

Security researchers have disclosed PEEP, a post-compromise toolkit that converts Chrome and Microsoft Edge into covert command-and-execution channels on an already-breached host. PEEP masquerades as a benign bookmarks extension — but it never touches the Chrome Web Store or Edge Add-ons catalog. Instead, its installer (which requires prior administrative or code-execution access) injects the extension directly into Chromium browser profiles and forges the cryptographic integrity checks in the Secure Preferences file, bypassing Web Store validation, enterprise extension policies enforced at the store layer, and — critically — the user prompt that normally accompanies any extension install.

This is not a browser vulnerability in the classic sense. There is no CVE here because nothing is "broken" — PEEP abuses a legitimate Chromium trust mechanism by pre-computing the HMAC values that Chrome and Edge use to validate preference integrity. That is precisely what makes it dangerous: once PEEP is resident, the browser itself becomes the attacker's trusted proxy. Every command it executes rides on the reputation of chrome.exe or msedge.exe, inherits the user's identity and proxy configuration, and blends into some of the noisiest, least-scrutinized process trees in enterprise telemetry.

The defensive takeaway is blunt: if you find PEEP on a host, the extension is the least of your problems. PEEP is explicitly post-compromise tooling — its presence means an attacker already had code execution on that machine. The extension is persistence and a stealthy execution channel. Treat any detection as a full incident-response trigger, not a malware cleanup ticket.

Technical Analysis

Affected Products and Platforms

  • Google Chrome (all Chromium versions on Windows, macOS, and Linux — enterprise impact is overwhelmingly Windows)
  • Microsoft Edge (Chromium-based, all current versions)
  • Any other Chromium-derived browser that implements the same Secure Preferences MAC scheme

How the Attack Works

Understanding the mechanism is essential to building detections, because every stage leaves an artifact.

1. Prerequisite access. The PEEP installer requires existing administrative or code-execution capability on the host. This is stage two — delivered after initial access via phishing, exposed RDP, exploited edge devices, or hands-on intrusion.

2. Direct profile injection. Rather than installing through the Web Store (which triggers store-side review, enterprise allowlist checks, and a visible user consent dialog), the installer writes the extension payload — manifest, JavaScript, native messaging components — directly into the browser profile on disk, typically under:

  • %LOCALAPPDATA%\Google\Chrome\User Data\<Profile>\Extensions\<extension_id>\<version>\
  • %LOCALAPPDATA%\Microsoft\Edge\User Data\<Profile>\Extensions\<extension_id>\<version>\

3. Secure Preferences forgery. Chromium protects its Secure Preferences JSON file with HMAC-based integrity values (protection.macs and protection.super_mac), keyed per-machine and per-profile. Tampering normally causes Chrome to reset or discard the altered settings. PEEP's installer pre-computes valid MACs for the injected extension entries, so the browser accepts the forged configuration as legitimate. The extension appears in extensions.settings.<id> as enabled — with from_webstore set to false, a field that becomes one of our best forensic discriminators.

4. Execution channel. The fake bookmarks extension carries permissions that allow it to read and modify data, communicate with external infrastructure, and — via native messaging or content-script-driven orchestration — broker command execution on the host. Because the browser process initiates the activity, downstream execution inherits the browser's network trust, proxy auto-configuration, and user context.

5. Stealth characteristics. No Web Store listing to review. No consent prompt. No entry that matches enterprise extension inventories pulled from store-based sources. The extension ID is attacker-generated, and the display name mimics a bookmarks utility — exactly the kind of thing users ignore.

Exploitation Status

  • Status: Publicly disclosed toolkit with documented techniques; proof-of-concept capability described by the disclosing researchers.
  • CVE: None assigned — this is abuse of legitimate Chromium functionality, not a patched vulnerability.
  • CISA KEV: Not applicable; there is no vendor patch forthcoming because Chrome and Edge are behaving as designed.
  • Practical risk: High for post-compromise dwell time. Expect red teams and intrusion actors to adopt this pattern rapidly — it is low-cost, high-stealth persistence that survives browser updates and most extension hygiene audits.

Detection & Response

This is a technical threat. The detections below target the three most reliable observable behaviors: (1) non-browser processes writing to Secure Preferences, (2) browsers spawning command interpreters, and (3) sideloaded extension artifacts on disk. Tune the parent-process filters for your environment — legitimate browser crash handlers and update mechanisms rarely touch these paths, but enterprise sync and backup agents occasionally do.

Sigma Rules

YAML
---
title: Chromium Browser Spawning Command Interpreter
description: Detects chrome.exe or msedge.exe spawning command shells or script hosts, consistent with PEEP-style extension-brokered host command execution.
id: 3f8a1b2c-7d4e-4f1a-9b2c-5e6d7a8b9c01
status: experimental
references:
  - https://attack.mitre.org/techniques/T1176/
  - https://thehackernews.com/2026/09/peep-turns-chrome-and-edge-into-post.html
author: Security Arsenal
date: 2026/09/22
tags:
  - attack.persistence
  - attack.execution
  - attack.t1176
logsource:
  category: process_creation
  product: windows
detection:
  selection_parent:
    ParentImage|endswith:
      - '\chrome.exe'
      - '\msedge.exe'
  selection_child:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\pwsh.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\mshta.exe'
      - '\rundll32.exe'
      - '\regsvr32.exe'
  condition: selection_parent and selection_child
falsepositives:
  - Rare enterprise browser plugins invoking native helpers; investigate rather than auto-exclude
level: high
---
title: Secure Preferences Modified by Non-Browser Process
description: Detects writes to Chromium Secure Preferences by processes other than the browser itself, consistent with PEEP's forged-preference injection technique.
id: 9c2d4e6f-1a3b-4c5d-8e7f-2a4b6c8d0e12
status: experimental
references:
  - https://attack.mitre.org/techniques/T1176/
  - https://thehackernews.com/2026/09/peep-turns-chrome-and-edge-into-post.html
author: Security Arsenal
date: 2026/09/22
tags:
  - attack.persistence
  - attack.defense_evasion
  - attack.t1176
logsource:
  category: file_change
  product: windows
detection:
  selection:
    TargetFilename|endswith:
      - '\Google\Chrome\User Data\Default\Secure Preferences'
      - '\Microsoft\Edge\User Data\Default\Secure Preferences'
    TargetFilename|contains:
      - '\User Data\Profile'
  filter_browser:
    Image|endswith:
      - '\chrome.exe'
      - '\msedge.exe'
  condition: selection and not filter_browser
falsepositives:
  - Enterprise backup or sync agents touching profile files; scope exclusions by signed binary hash
level: high
---
title: Chromium Extension Sideloading via Command Line
description: Detects Chrome or Edge launched with flags that load unpacked or non-store extensions, a technique used to stage or test injected extensions like PEEP's payload.
id: 5b7c9d1e-3f5a-4b6c-9d8e-4f6a8b0c2e45
status: experimental
references:
  - https://attack.mitre.org/techniques/T1176/
author: Security Arsenal
date: 2026/09/22
tags:
  - attack.persistence
  - attack.t1176
logsource:
  category: process_creation
  product: windows
detection:
  selection:
    Image|endswith:
      - '\chrome.exe'
      - '\msedge.exe'
    CommandLine|contains:
      - '--load-extension'
      - '--disable-extensions-except'
      - '--whitelisted-extension-id'
  condition: selection
falsepositives:
  - Legitimate extension developers and QA teams; restrict via group policy rather than detection tuning
level: medium

KQL (Microsoft Sentinel / Defender)

KQL — Microsoft Sentinel / Defender
// Hunt 1: Browsers spawning command interpreters — PEEP execution channel
DeviceProcessEvents
| where TimeGenerated > ago(7d)
| where InitiatingProcessFileName in~ ("chrome.exe", "msedge.exe")
| where FileName in~ ("cmd.exe", "powershell.exe", "pwsh.exe", "wscript.exe",
                      "cscript.exe", "mshta.exe", "rundll32.exe", "regsvr32.exe")
| project TimeGenerated, DeviceName, AccountName, InitiatingProcessFileName,
          InitiatingProcessCommandLine, FileName, ProcessCommandLine, SHA256
| sort by TimeGenerated desc
;
// Hunt 2: Non-browser processes writing Secure Preferences — injection artifact
DeviceFileEvents
| where TimeGenerated > ago(14d)
| where FolderPath has "Secure Preferences"
| where FolderPath has_any ("Google\\Chrome\\User Data", "Microsoft\\Edge\\User Data")
| where ActionType in ("FileCreated", "FileModified", "FileRenamed")
| where InitiatingProcessFileName !in~ ("chrome.exe", "msedge.exe", "msedgewebview2.exe")
| project TimeGenerated, DeviceName, InitiatingProcessFileName,
          InitiatingProcessCommandLine, FolderPath, ActionType, SHA256
| sort by TimeGenerated desc

Velociraptor VQL

VQL — Velociraptor
-- PEEP hunt: enumerate sideloaded Chromium extensions and profile injection artifacts
-- Flags extensions written to profile directories and Secure Preferences markers
-- indicating non-Web-Store installs (from_webstore=false)

LET ext_manifests = SELECT FullPath, Mtime, Size
FROM glob(globs="C:/Users/*/AppData/Local/*/User Data/*/Extensions/*/*/manifest.json")
WHERE NOT IsDir

LET secure_prefs = SELECT FullPath, Mtime,
       read_file(filename=FullPath) AS Content
FROM glob(globs="C:/Users/*/AppData/Local/*/User Data/*/Secure Preferences")
WHERE Content =~ '"from_webstore": ?false'

SELECT "Extension Directory" AS Artifact, FullPath, Mtime, Size, "" AS SideloadIndicator
FROM ext_manifests
UNION ALL
SELECT "Secure Preferences" AS Artifact, FullPath, Mtime, 0 AS Size,
       "contains from_webstore=false entries" AS SideloadIndicator
FROM secure_prefs
ORDER BY Mtime DESC

Remediation & Hunt Script (PowerShell)

Run the following on suspected hosts, or deploy at scale via your RMM/EDR. It enumerates Chromium profiles, flags extensions not installed from the official stores, optionally quarantines them, and applies the hardening policies that close this persistence path. Review flagged extensions against your approved inventory before enabling -Remediate.

PowerShell
#Requires -RunAsAdministrator
# PEEP-Style Malicious Extension Detection and Remediation
param([switch]$Remediate)

$report = @()
$profileRoots = @(
    "$env:LOCALAPPDATA\Google\Chrome\User Data",
    "$env:LOCALAPPDATA\Microsoft\Edge\User Data"
)

foreach ($root in $profileRoots) {
    if (-not (Test-Path $root)) { continue }
    $browser = if ($root -match 'Chrome') { 'Chrome' } else { 'Edge' }
    Get-ChildItem $root -Directory |
        Where-Object { $_.Name -eq 'Default' -or $_.Name -like 'Profile *' } |
        ForEach-Object {
            $spPath = Join-Path $_.FullName 'Secure Preferences'
            if (-not (Test-Path $spPath)) { return }
            $sp = Get-Content $spPath -Raw | ConvertFrom-Json
            $extSettings = $sp.extensions.settings
            if (-not $extSettings) { return }
            foreach ($prop in $extSettings.PSObject.Properties) {
                $ext = $prop.Value
                $sideloaded = ($ext.from_webstore -eq $false)
                if ($sideloaded) {
                    $entry = [PSCustomObject]@{
                        Browser      = $browser
                        Profile      = $_.Name
                        ExtensionId  = $prop.Name
                        DisplayName  = $ext.manifest.name
                        InstallPath  = $ext.path
                        FromWebStore = $ext.from_webstore
                        State        = $ext.state
                    }
                    $report += $entry
                    if ($Remediate) {
                        $extDir = Join-Path $_.FullName ("Extensions\" + $prop.Name)
                        if (Test-Path $extDir) {
                            Copy-Item $spPath "$spPath.bak_$(Get-Date -Format 'yyyyMMddHHmmss')" -Force
                            Rename-Item $extDir "$extDir.quarantined" -Force
                            Write-Host "[QUARANTINED] $browser/$($_.Name): $($prop.Name)" -ForegroundColor Yellow
                        }
                    }
                }
            }
        }
}

$report | Format-Table -AutoSize
if (-not $Remediate) { Write-Host "Re-run with -Remediate to quarantine flagged extensions." }

# Hardening: block non-store extension installs and disable developer mode (machine-wide)
$chromePolicy = 'HKLM:\SOFTWARE\Policies\Google\Chrome'
$edgePolicy   = 'HKLM:\SOFTWARE\Policies\Microsoft\Edge'
foreach ($policyRoot in @($chromePolicy, $edgePolicy)) {
    New-Item $policyRoot -Force | Out-Null
    New-Item "$policyRoot\ExtensionInstallBlocklist" -Force | Out-Null
    # Block all extensions not explicitly allowlisted via ExtensionInstallAllowlist
    New-ItemProperty "$policyRoot\ExtensionInstallBlocklist" -Name '1' -Value '*' -PropertyType String -Force | Out-Null
    # Disable developer mode / sideload UI
    New-ItemProperty $policyRoot -Name 'DeveloperToolsAvailability' -Value 2 -PropertyType DWord -Force | Out-Null
    # Prevent --load-extension style developer workflows
    New-ItemProperty $policyRoot -Name 'ExtensionInstallSources' -Value 'https://clients2.google.com/service/update2/crx' -PropertyType String -Force | Out-Null
}
Write-Host "[HARDENED] Extension install blocklist and developer mode restrictions applied. Reboot browsers to enforce." -ForegroundColor Green

Remediation

There is no patch — this is architectural abuse, not a bug. Your remediation strategy is detection, eradication, and policy hardening. Prioritized actions:

  1. Scope the incident first. PEEP requires prior administrative or code-execution access. Finding it means the host was already compromised. Initiate IR procedures: isolate the host, acquire memory and disk before cleanup, and hunt laterally for the initial access vector. Do not treat this as "delete the extension and move on."

  2. Eradicate the extension. Quarantine or delete the injected extension directory and remove its entries from Secure Preferences (back up the file first for forensics). Close all browser processes before modifying profile files, or Chromium will rewrite your changes on exit.

  3. Enforce extension allowlisting. Deploy ExtensionInstallBlocklist = * plus a curated ExtensionInstallAllowlist via Group Policy or Intune for both Chrome and Edge. This is the single most effective control — it renders sideloaded extensions inert even when Secure Preferences is forged.

  4. Disable developer mode and extension sideload flags. Set DeveloperToolsAvailability = 2 and monitor for --load-extension command-line usage. Reference: Chrome Enterprise extension policies and Microsoft Edge policy documentation.

  5. Reset browser-stored credentials. Any host with a malicious extension should be assumed to have had session cookies, saved passwords, and autofill data exfiltrated. Force password resets for accounts accessible from the host and revoke active sessions/tokens.

  6. Deploy the detections above to your SIEM and EDR. Baseline Secure Preferences write activity per host — deviation from browser-only writers is a high-fidelity signal in most environments.

  7. Add Secure Preferences integrity to your vulnerability/configuration management scans. A weekly sweep comparing on-disk extension directories against your approved extension inventory catches what real-time controls miss.

  8. Educate your SOC on the kill chain. Browser-based persistence is chronically under-hunted. Add extension enumeration to your standard host triage checklist for any malware or intrusion case.

Final Assessment

PEEP is a reminder that persistence mechanisms don't need vulnerabilities — they need trust. Chromium's Secure Preferences integrity model was designed to stop preference tampering, and PEEP defeats it not by breaking the crypto but by computing valid MACs with administrative access it already had. Defenders can't wait for a patch that will never come. Extension allowlisting, Secure Preferences write monitoring, and disciplined incident scoping are the controls that matter here — and they're available to every enterprise today.

Related Resources

Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.