Security researcher Gal Weizman of Forever Security has disclosed BragJack, a proof-of-concept attack that demonstrates something many of us in the defensive community have been warning about since agentic AI browsers shipped: a single malicious browser extension can fully hijack the built-in AI assistant across Chrome, Edge, Opera Neon, Perplexity Comet, and Claude in Chrome. The technique, dubbed Prompt Forcing, earned Weizman over $20,000 in bug bounties and resulted in two CVE assignments — a strong signal that vendors treat this as a genuine vulnerability class, not a theoretical curiosity.
Why should your SOC care today? Because AI browser agents are no longer passive chatbots. They read page content, summarize documents, fill forms, click links, and in agentic products like Comet and Claude in Chrome, they take actions on behalf of the user — with the user's authenticated session. An extension that can inject or override the prompts those agents receive effectively inherits everything the agent can do: reading sensitive page content, exfiltrating data from authenticated SaaS sessions, and executing attacker-directed actions inside corporate web applications. This collapses the extension threat model and the prompt-injection threat model into a single attack surface, and most enterprise controls today monitor neither.
Technical Analysis
Affected Products and Platforms
Based on the disclosure, the Prompt Forcing technique was demonstrated against:
- Google Chrome (built-in AI assistant integration)
- Microsoft Edge (Copilot integration in the browser context)
- Opera Neon (agentic browser)
- Perplexity Comet (agentic AI browser)
- Claude in Chrome (Anthropic's agentic browser integration)
The common denominator is not a specific rendering engine bug — it is the architectural trust relationship between browser extensions and the embedded AI agent. Extensions operate with elevated privileges inside the browser process and can read and modify page DOM, intercept network traffic, and interact with other browser components. BragJack abuses that position to influence the instruction stream the AI agent consumes.
How Prompt Forcing Works (Defender's View)
From a detection engineering perspective, the attack chain looks like this:
- Delivery — The victim installs a malicious extension. In practice this happens via social engineering to a lookalike store listing, sideloading with
--load-extensionflags, developer-mode installs, or enterprise force-install policy abuse (a path we routinely see abused in the wild for extension-based malware). - Persistence — The extension runs with content-script or background-service-worker privileges. No further user interaction is required.
- Prompt manipulation — Instead of attacking the page, the extension targets the agent's context: injecting attacker-controlled instructions into the content the AI assistant ingests, or directly manipulating the prompt the extension-facing agent APIs receive. The user sees a normal interaction; the agent receives poisoned instructions.
- Action execution — The hijacked agent performs attacker-directed behavior: reading and exfiltrating page content (including authenticated session data), summarizing attacker-chosen content, navigating to malicious URLs, or interacting with web applications using the victim's identity.
The critical defensive insight: the malware never leaves the browser process, never drops a traditional payload, and never touches the disk outside the extension directory. Classic EDR telemetry around process execution will see only chrome.exe or msedge.exe doing what browsers normally do.
Exploitation Status
BragJack is a disclosed proof-of-concept, not a confirmed in-the-wild campaign — but treat that distinction with appropriate skepticism. The research earned bounties from multiple vendors and two CVEs, which means the affected vendors validated the attack paths. Historically, the gap between a high-quality public PoC for browser-extension abuse and criminal adoption (particularly by the malvertising and data-theft extension ecosystem) is measured in weeks, not months. There is no indication of CISA KEV inclusion at this time. The two CVE identifiers were not enumerated in the public summary; track the vendor security advisories from Google, Microsoft, Opera, Perplexity, and Anthropic for the formal assignments and patch guidance.
Detection & Response
The honest truth from the SOC floor: there is no single high-fidelity signature for "an extension is hijacking an AI agent." What we can detect with confidence are the preconditions and delivery mechanisms — non-store extension installs, force-install policy tampering, and anomalous extension deployments — plus behavioral analytics on agent network traffic. The detections below are tuned to fire on the abnormal, not the routine.
SIGMA Rules
---
title: Browser Launched With Extension Sideloading Flags
id: 3f8c2a71-9b4d-4e6f-a1c2-7d5e8f0a1b3c
status: experimental
description: Detects Chrome, Edge, or Chromium-based AI browsers launched with flags that load unpacked/sideloaded extensions or suppress extension security prompts. Sideloading is the primary delivery path for malicious extensions used in BragJack-style AI agent hijacking.
references:
- https://www.bleepingcomputer.com/news/security/bragjack-attacks-hijack-ai-browser-agents-through-malicious-extensions/
- https://attack.mitre.org/techniques/T1176/
author: Security Arsenal
date: 2026/02/10
tags:
- attack.persistence
- attack.t1176
logsource:
category: process_creation
product: windows
detection:
selection_browser:
Image|endswith:
- '\chrome.exe'
- '\msedge.exe'
- '\opera.exe'
- '\neon.exe'
- '\comet.exe'
selection_flags:
CommandLine|contains:
- '--load-extension'
- '--disable-extensions-except'
- '--disable-component-extensions-with-background-pages'
- '--allowlisted-extension-id'
condition: selection_browser and selection_flags
falsepositives:
- Legitimate extension developers and QA teams (scope by user/hostname)
- Enterprise automation frameworks that load helper extensions
level: high
---
title: Browser Extension Force-Install Policy Tampering
id: 8a1d4e52-6c3b-4f7a-b2d9-1e4c7a0f3b6d
status: experimental
description: Detects registry modification of Chrome/Edge ExtensionInstallForcelist or extension settings policies. Adversaries use force-install policies to silently deploy malicious extensions capable of hijacking AI browser agents, bypassing user consent entirely.
references:
- https://www.bleepingcomputer.com/news/security/bragjack-attacks-hijack-ai-browser-agents-through-malicious-extensions/
- https://attack.mitre.org/techniques/T1176/
author: Security Arsenal
date: 2026/02/10
tags:
- attack.persistence
- attack.privilege_escalation
- attack.t1176
logsource:
category: registry_set
product: windows
detection:
selection:
TargetObject|contains:
- '\Policies\Google\Chrome\ExtensionInstallForcelist'
- '\Policies\Microsoft\Edge\ExtensionInstallForcelist'
- '\Policies\Google\Chrome\ExtensionInstallAllowlist'
- '\Policies\Microsoft\Edge\ExtensionInstallAllowlist'
- '\Policies\Google\Chrome\ExtensionInstallBlocklist'
- '\Policies\Microsoft\Edge\ExtensionInstallBlocklist'
falsepositives:
- Legitimate GPO/MDM policy deployment (correlate with change management; alert on values pushed by non-SYSTEM, non-MDM processes)
level: high
---
title: Extension Manifest Written Outside Managed Store Path
id: 2c7b9f14-5a8e-4d1c-9e3b-6f0a2d8c4e7b
status: experimental
description: Detects creation of a browser extension manifest.json in user-writable directories outside the managed extension store cache, indicating a developer-mode or unpacked extension deployment consistent with BragJack delivery.
references:
- https://www.bleepingcomputer.com/news/security/bragjack-attacks-hijack-ai-browser-agents-through-malicious-extensions/
- https://attack.mitre.org/techniques/T1176/
author: Security Arsenal
date: 2026/02/10
tags:
- attack.persistence
- attack.t1176
logsource:
category: file_event
product: windows
detection:
selection:
TargetFilename|endswith: '\manifest.json'
filter_store:
TargetFilename|contains:
- '\AppData\Local\Google\Chrome\User Data\Default\Extensions\'
- '\AppData\Local\Microsoft\Edge\User Data\Default\Extensions\'
condition: selection and not filter_store
falsepositives:
- Web developers working on local extension or web app projects (tune by excluding known dev paths such as node_modules and source repos)
level: medium
KQL (Microsoft Sentinel / Defender)
This hunt identifies non-store (sideloaded or developer-mode) extension deployments and correlates them with browser processes that subsequently communicate with AI assistant service endpoints — the precondition chain for BragJack-style hijacking. Baseline extension IDs in your environment first; enterprise force-installed extensions will otherwise dominate results.
let AIDomains = dynamic(["copilot.microsoft.com", "claude.ai", "api.anthropic.com", "perplexity.ai", "gemini.google.com", "edgeservices.bing.com"]);
let SideloadedExt =
DeviceFileEvents
| where TimeGenerated > ago(7d)
| where FileName =~ "manifest.json"
| where FolderPath has_any ("\\Google\\Chrome\\", "\\Microsoft\\Edge\\", "\\Opera\\", "\\Comet\\")
| where FolderPath !has "\\Extensions\\" // outside store-managed cache = unpacked/dev-mode
| project DeviceName, TimeGenerated, FolderPath, InitiatingProcessFileName, InitiatingProcessAccountName;
let SuspiciousLaunch =
DeviceProcessEvents
| where TimeGenerated > ago(7d)
| where FileName in~ ("chrome.exe", "msedge.exe", "opera.exe", "comet.exe")
| where ProcessCommandLine has_any ("--load-extension", "--disable-extensions-except")
| project DeviceName, LaunchTime=TimeGenerated, ProcessCommandLine, AccountName;
SideloadedExt
| join kind=inner SuspiciousLaunch on DeviceName
| extend PossibleBragJackPrecondition = "Sideloaded extension + extension-loading browser flags"
| join kind=leftouter (
DeviceNetworkEvents
| where TimeGenerated > ago(7d)
| where RemoteUrl has_any (AIDomains)
| project DeviceName, AITrafficTime=TimeGenerated, RemoteUrl, InitiatingProcessFileName
) on DeviceName
| summarize ExtensionPaths = make_set(FolderPath), Launches = make_set(ProcessCommandLine), AIEndpoints = make_set(RemoteUrl)
by DeviceName, InitiatingProcessAccountName
| extend Severity = iff(isnotempty(AIEndpoints), "High", "Medium")
| sort by Severity asc;
Velociraptor VQL
Use this artifact during triage to enumerate all installed Chromium-family extensions per user profile, flagging developer-mode / unpacked extensions (those not present in the store-managed Extensions directory) and recently modified extension folders — the forensic footprint a BragJack-style implant leaves behind.
-- BragJack Triage: Enumerate Chromium extension installs and flag non-store extensions
LET profiles = SELECT FullPath
FROM glob(globs='C:/Users/*/AppData/Local/*/User Data/*/Extensions/*/*',
accessor='ntfs')
LET unpacked = SELECT FullPath AS ManifestPath,
Mtime AS LastModified
FROM glob(globs='C:/Users/*/AppData/Local/{Google/Chrome,Microsoft/Edge}/User Data/*/Local Extension Settings/**', accessor='ntfs')
LET suspect_manifests = SELECT FullPath AS ManifestPath, Mtime AS LastModified
FROM glob(globs='C:/Users/*/**/manifest.json', accessor='ntfs')
WHERE ManifestPath !~ 'Extensions'
AND ManifestPath !~ 'node_modules'
AND ManifestPath =~ 'manifest.json$'
SELECT * FROM suspect_manifests
UNION ALL
SELECT FullPath AS ManifestPath, Mtime AS LastModified
FROM profiles
WHERE LastModified > now() - 604800000000000 -- modified in last 7 days
Remediation & Audit Script
Run this PowerShell as a spot-check or deploy via your RMM to audit all Chromium-family browsers for extensions that did not come from the managed store path or your approved allowlist. Populate $ApprovedExtensionIds with your enterprise force-installed extension IDs before running at scale.
# BragJack defensive audit: enumerate Chromium extensions and flag non-allowlisted installs
$ApprovedExtensionIds = @('YOUR-APPROVED-ID-1','YOUR-APPROVED-ID-2') # populate from your software inventory
$browserExtPaths = @(
"$env:LOCALAPPDATA\Google\Chrome\User Data\Default\Extensions",
"$env:LOCALAPPDATA\Microsoft\Edge\User Data\Default\Extensions",
"$env:APPDATA\Opera Software\Opera Stable\Extensions"
)
# Also audit all user profiles on multi-user systems
$allProfiles = Get-ChildItem 'C:\Users' -Directory -ErrorAction SilentlyContinue
foreach ($p in $allProfiles) {
$browserExtPaths += "$($p.FullName)\AppData\Local\Google\Chrome\User Data\Default\Extensions"
$browserExtPaths += "$($p.FullName)\AppData\Local\Microsoft\Edge\User Data\Default\Extensions"
}
$report = foreach ($path in $browserExtPaths) {
if (Test-Path $path) {
Get-ChildItem $path -Directory -ErrorAction SilentlyContinue | ForEach-Object {
$extId = $_.Name
$latest = Get-ChildItem $_.FullName -Directory | Sort-Object LastWriteTime -Descending | Select-Object -First 1
[PSCustomObject]@{
ExtensionId = $extId
Path = $_.FullName
LastModified = $latest.LastWriteTime
Allowlisted = ($ApprovedExtensionIds -contains $extId)
}
}
}
}
# Flag: any extension not on the allowlist warrants review; recently modified ones are highest priority
$report | Where-Object { -not $_.Allowlisted } |
Sort-Object LastModified -Descending |
Format-Table -AutoSize
# Audit force-install and blocklist policies for tampering
$policyKeys = @(
'HKLM:\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist',
'HKLM:\SOFTWARE\Policies\Microsoft\Edge\ExtensionInstallForcelist',
'HKLM:\SOFTWARE\WOW6432Node\Google\Chrome\Extensions',
'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Edge\Extensions'
)
foreach ($key in $policyKeys) {
if (Test-Path $key) {
Write-Host "`n[POLICY] $key" -ForegroundColor Yellow
Get-ItemProperty $key | Format-List
}
}
# Check for developer-mode / unpacked extension indicators in Chrome Preferences
$prefFiles = Get-ChildItem 'C:\Users\*\AppData\Local\Google\Chrome\User Data\Default\Preferences' -ErrorAction SilentlyContinue
foreach ($pref in $prefFiles) {
$json = Get-Content $pref.FullName -Raw | ConvertFrom-Json -ErrorAction SilentlyContinue
if ($json.extensions.settings) {
$json.extensions.settings.PSObject.Properties | ForEach-Object {
if ($_.Value.location -eq 4 -or $_.Value.path -notmatch 'Extensions') {
Write-Host "[SUSPICIOUS] Unpacked/dev-mode extension $($_.Name) in $($pref.FullName)" -ForegroundColor Red
}
}
}
}
Remediation
There is no single patch to deploy here — this is an architectural weakness class being addressed vendor-by-vendor. Act on all of the following in parallel:
- Enforce an extension allowlist today. This is the single highest-value control. Use Chrome's
ExtensionInstallBlocklistset to*combined withExtensionInstallAllowlist(or Edge equivalents viaADMX/Intune) so only vetted extension IDs can install. This kills the BragJack delivery vector outright, regardless of how the social engineering arrives. Reference: Chrome Enterprise extension policy documentation and Microsoft Edge extension policies. - Disable developer mode and block sideloading. Set
ExtensionSettingsto prohibit unpacked extensions, and alert on any browser launched with--load-extension(the Sigma rule above). Developer mode has no legitimate use outside a small, known engineering population — scope the exception to them. - Govern AI browser agents like privileged applications. Inventory who in your organization uses Opera Neon, Perplexity Comet, Claude in Chrome, or browser-integrated Copilot/Gemini features. Where the agentic capability is not a business requirement, disable it via vendor policy (e.g., Edge's Copilot administrative controls). Where it is required, restrict which sites the agent can access and prohibit agent use on sessions handling regulated data (PCI cardholder data, PHI) until vendor mitigations for Prompt Forcing are confirmed deployed.
- Track the two assigned CVEs. Monitor security release notes from Google (Chrome releases), Microsoft (Edge/Security Update Guide), Opera, Perplexity, and Anthropic for the CVE identifiers tied to this research and apply the corresponding browser updates as they ship. Ensure your fleet is on a rapid browser update ring — agentic features are iterating weekly, and so are their fixes.
- Baseline and alert on extension inventory drift. Push the audit script above (or your EDR equivalent) on a schedule. Any new extension appearing outside change control is an investigation trigger — this has been true for years, and AI agents have only raised the stakes.
- Educate users on the new social engineering shape. Expect lures like "install this extension to unlock AI features" or fake AI assistant extensions. Add this specifically to phishing awareness content; generic extension warnings no longer cover the threat model.
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.