← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2026-11038 · CWE-20 · Disclosed 2026-06-04

Insufficient policy enforcement in Subresource Integrity in Google Chrome prior to 149

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

This is a fake parcel getting waved through because the warehouse cached the first label and skipped checking the tamper seal later

CVE-2026-11038 is a Chrome Subresource Integrity (SRI) policy-enforcement bypass affecting versions prior to 149.0.7827.53 on Linux and 149.0.7827.53/54 on Windows and macOS. The public Chromium report that appears to match this CVE describes a case where an integrity-less modulepreload populates Chrome's module cache first, and a later SRI-pinned module script reuses that cached entry without applying the expected integrity metadata. If the attacker can alter the bytes served for that module URL, Chrome may execute code that does not match the page's declared SRI hash.

Google's MEDIUM 6.5 label is technically defensible in a vacuum because a successful bypass can let attacker-controlled JavaScript run with the victim page's normal authority. But for enterprise patch triage, that overstates the operational urgency: this needs user interaction, a specific affected application pattern, and usually some upstream content/CDN tampering position before it pays off. No KEV, near-zero EPSS, and no credible broad exploitation signals push this down into workstation hygiene, not front-of-queue fire drill.

"Real bug, weak fleet priority: the exploit chain is narrow, brittle, and needs a very specific web app pattern."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Find a page with the right module pattern

The attacker needs a target web application that first loads a cross-origin JavaScript module with <link rel="modulepreload"> without integrity, then later loads the same URL as an SRI-pinned module script. The public Chromium PoC for issue 507024118 demonstrates exactly that sequence.
Conditions required:
  • Victim browses to an affected site or app
  • The site uses cross-origin module scripts
  • The same module URL is first fetched by integrity-less modulepreload and later by SRI-pinned script
Where this breaks in practice:
  • This is a niche app design pattern, not a universal browser condition
  • Many enterprises do not run internally developed apps that use this exact ES module loading sequence
  • If the page never uses modulepreload this way, the chain dies immediately
Detection/coverage: No network scanner will flag this reliably. Coverage is app-behavior and browser-version dependent, so normal vuln scanners mostly stop at version detection.
STEP 02

Control or tamper with the module bytes

The attacker then needs to influence the bytes returned from the cross-origin module URL—typically via compromised CDN content, compromised hosting, malicious edge worker, or some other upstream content position. The bug does not create that foothold; it only makes SRI fail open in this narrow cache path once the bytes are already hostile.
Conditions required:
  • Attacker can modify or substitute the targeted module response
  • Victim's browser can reach the attacker-influenced module origin
Where this breaks in practice:
  • This is a second-stage prerequisite that often implies supply-chain compromise or adjacent web infrastructure compromise
  • If the CDN/origin is well controlled, the bug is inert
  • TLS alone is not enough if the content origin itself is compromised, but most random phishers do not control your production module CDN
Detection/coverage: Best chances are CDN integrity monitoring, web app change auditing, CSP/SRI report collection, and origin diffing. EDR on the endpoint will usually just see normal browser activity.
STEP 03

Trigger the cache reuse path

When the victim loads the page, Chrome first caches the integrity-less modulepreload result in the module map. The later SRI-pinned module request reuses that cached entry instead of forcing a fresh integrity-aware fetch, so the mismatched module can execute despite the page declaring an expected hash.
Conditions required:
  • Victim uses vulnerable Chrome build
  • The two requests target the same module URL and type
  • The earlier preload occurs before the SRI-pinned script fetch
Where this breaks in practice:
  • The ordering matters
  • Browser version matters
  • Even slight app implementation differences can prevent the vulnerable code path
Detection/coverage: Browser logging is limited. Detection is mostly inferential through script behavior, SRI/CSP reports, or reproducing against known app patterns.
STEP 04

Abuse same-origin execution inside the victim page

Once the substituted module runs, it executes with the authority of the victim page's module context. That can mean DOM reads, token theft from page-accessible state, transaction tampering, or content modification inside the web session—but only within what the page itself can already access.
Conditions required:
  • Malicious module executes successfully
  • The victim page exposes interesting data or actions to client-side JavaScript
Where this breaks in practice:
  • Impact is bounded to the page/session authority; this is not a browser sandbox escape or host compromise
  • HttpOnly cookies, server-side authorization, and strong anti-CSRF patterns can limit downstream abuse
Detection/coverage: Behavioral anomalies may be visible in browser telemetry, web session analytics, or outbound requests from the application origin. Generic EDR detections are inconsistent because the browser is doing expected browser things.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo current evidence of active exploitation found in public vendor-facing advisories reviewed; not present in CISA KEV at reassessment time.
Public PoC availabilityYes, public technical PoC exists in the Chromium bug that appears to match this CVE: issue 507024118 includes PoC attachments and step-by-step impact notes.
EPSS0.00021 from the supplied intel, which is effectively near-zero predicted exploitation probability. A public authoritative percentile was not confirmed during this review.
KEV statusNot KEV-listed. Checked against the CISA Known Exploited Vulnerabilities Catalog.
CVSS meaningCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N means remote, no auth, but user interaction required, with impact modeled mainly as integrity loss rather than host compromise.
Affected versionsChrome before 149.0.7827.53; platform rollout references show 149.0.7827.53/54 for Windows/macOS and 149.0.7827.53 for Linux.
Fixed versionsUpgrade to 149.0.7827.53 on Linux and 149.0.7827.53/54 on Windows/macOS. For enterprise-managed Chrome, this is a normal browser channel update rather than a distro backport story.
Exposure / scanning dataShodan/Censys/FOFA are largely irrelevant here because this is a client-side browser flaw, not an internet-facing service fingerprint. Fleet exposure is your installed Chrome population, not open ports.
Disclosure timelineUser-supplied disclosure date is 2026-06-04. Public platform advisories around the fixed build landed May 29, 2026 (early stable) and June 2-3, 2026 (broader advisory references).
Researcher / reportingThe public Chromium issue that appears to describe this bug credits M. Fauzan Wijaya (Gh05t666nero). Inference: Google did not explicitly map that public issue to CVE-2026-11038 in the sources reviewed, but the component, version window, and impact pattern line up closely.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (3.3/10)

The single biggest downward driver is that exploitation needs a very specific web application loading pattern plus an attacker position to tamper with the module origin's bytes. That makes this a narrow browser bypass with real integrity impact, but poor mass-exploitation economics compared with the server-side and sandbox-escape issues that should consume emergency patch capacity.

HIGH Affected version and fixed build identification
MEDIUM Mapping of the public Chromium PoC issue to this exact CVE
HIGH Priority downgrade based on real-world exploitation friction

Why this verdict

  • Baseline starts at vendor 6.5, then drops hard for prerequisite chaining: user interaction is required, so this is already not wormable or silently remote against your fleet.
  • Minus for narrow exposure population: the vulnerable path appears to require the exact combination of integrity-less modulepreload followed by an SRI-pinned module request for the same URL. That is a small subset of Chrome browsing activity, not the average page load.
  • Minus for attacker position and absent threat signal: the attacker usually needs control of or tampering ability over the served module bytes, which often implies separate infrastructure compromise, while EPSS is tiny and KEV is absent.

Why not higher?

This is not a host compromise, sandbox escape, or unauthenticated server-side bug. The exploit chain depends on browser version, page structure, request ordering, and upstream content manipulation, which compounds friction at every hop and sharply limits the reachable population.

Why not lower?

It is still a bona fide security control bypass in a widely deployed browser, and if the chain lands the attacker can run malicious JavaScript with the victim page's authority. For organizations with high-trust internal web apps or sensitive customer workflows that lean on SRI, the integrity impact is real enough that IGNORE would be too dismissive.

05 · Compensating Control

What to do — in priority order.

  1. Keep Chrome auto-update healthy — Validate enterprise update telemetry, Omaha/Google Update health, and relaunch compliance so the fixed build rolls naturally. For a LOW finding there is no SLA; handle this in normal endpoint maintenance rather than a special campaign.
  2. Monitor SRI and CSP reporting — If you operate internal or customer-facing web apps, collect SRI/CSP violation reports and watch for module load anomalies, especially around cross-origin ES modules and modulepreload. This is the best compensating visibility while normal browser maintenance catches up.
  3. Review cross-origin module design — Application teams should avoid relying on fragile preload/integrity combinations without testing browser behavior, and should prefer consistent integrity metadata on preloaded modules. For this LOW verdict, schedule that review as backlog hygiene rather than an emergency architecture sprint.
  4. Isolate high-risk browsing tiers — For admins, finance staff, and privileged operators, use hardened browsing profiles, remote browser isolation, or separate admin workstations where already available. That reduces the blast radius of browser-layer edge cases even when they are not patch-now events.
What doesn't work
  • A network vulnerability scan will not tell you whether the dangerous page pattern exists; this is a client/browser execution-path flaw, not a remotely enumerable server daemon.
  • MFA does nothing to stop same-origin JavaScript from acting inside an already authenticated browser session.
  • EDR alone is weak here because the browser is executing script in a normal browser process; unless payload behavior becomes obviously malicious, many products will see standard web activity.
06 · Verification

Crowdsourced verification payload.

Run this on the target Windows endpoint or through your remote management tool as a standard user; admin is helpful but not required. Example: powershell -ExecutionPolicy Bypass -File .\check-chrome-cve-2026-11038.ps1. The script checks common machine-wide and per-user Chrome installs and prints VULNERABLE, PATCHED, or UNKNOWN.

noisgate-verify.ps1
POWERSHELLREAD-ONLYSAFE
# check-chrome-cve-2026-11038.ps1

# Purpose: Detect whether Google Chrome on Windows is older than the fixed version for CVE-2026-11038.

# Fixed versions: 149.0.7827.53 / .54 on Windows. This script treats >= 149.0.7827.53 as patched.

# Exit codes: 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN


$ErrorActionPreference = 'SilentlyContinue'
$FixedVersion = [version]'149.0.7827.53'

function Get-ChromeCandidates {
    $paths = New-Object System.Collections.Generic.List[string]

    $envPaths = @(
        "$env:ProgramFiles\Google\Chrome\Application\chrome.exe",
        "$env:ProgramFiles(x86)\Google\Chrome\Application\chrome.exe",
        "$env:LocalAppData\Google\Chrome\Application\chrome.exe"
    )

    foreach ($p in $envPaths) {
        if ($p -and (Test-Path $p)) { [void]$paths.Add($p) }
    }

    $regLocations = @(
        'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe',
        'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe',
        'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe'
    )

    foreach ($key in $regLocations) {
        $item = Get-ItemProperty -Path $key
        if ($item -and $item.'(default)' -and (Test-Path $item.'(default)')) {
            [void]$paths.Add($item.'(default)')
        }
        elseif ($item -and $item.Path -and (Test-Path $item.Path)) {
            [void]$paths.Add($item.Path)
        }
    }

    return $paths | Select-Object -Unique
}

function Get-FileVersionObject([string]$Path) {
    try {
        $fv = (Get-Item $Path).VersionInfo.ProductVersion
        if (-not $fv) { return $null }
        $clean = ($fv -split '\s+')[0]
        return [version]$clean
    }
    catch {
        return $null
    }
}

$candidates = Get-ChromeCandidates
if (-not $candidates -or $candidates.Count -eq 0) {
    Write-Output 'UNKNOWN - Chrome executable not found in common locations.'
    exit 2
}

$results = @()
foreach ($exe in $candidates) {
    $ver = Get-FileVersionObject -Path $exe
    $results += [pscustomobject]@{
        Path = $exe
        Version = if ($ver) { $ver.ToString() } else { $null }
        Vulnerable = if ($ver) { $ver -lt $FixedVersion } else { $null }
    }
}

$known = $results | Where-Object { $_.Version }
if (-not $known -or $known.Count -eq 0) {
    Write-Output 'UNKNOWN - Chrome found, but version could not be determined.'
    $results | ForEach-Object { Write-Output ("Path={0} Version={1}" -f $_.Path, $_.Version) }
    exit 2
}

$anyVuln = $known | Where-Object { $_.Vulnerable -eq $true }
if ($anyVuln) {
    Write-Output 'VULNERABLE'
    $known | Sort-Object Path | ForEach-Object { Write-Output ("Path={0} Version={1}" -f $_.Path, $_.Version) }
    exit 1
}
else {
    Write-Output 'PATCHED'
    $known | Sort-Object Path | ForEach-Object { Write-Output ("Path={0} Version={1}" -f $_.Path, $_.Version) }
    exit 0
}
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, do not burn emergency desktop patch bandwidth on this one unless you have a concrete app pattern that matches the public PoC or you suspect CDN/module-origin tampering. Under the noisgate mitigation SLA there is no mitigation SLA for a LOW finding, and under the noisgate remediation SLA there is likewise no fixed patch deadline here—treat it as backlog hygiene, verify Chrome auto-update health, and let routine workstation maintenance move the fleet to 149.0.7827.53/54 or later while your urgent queue stays focused on exploited or server-side exposure.

Sources

  1. Google Chrome Releases - Early Stable Update for Desktop
  2. Canadian Centre for Cyber Security AV26-544
  3. Chromium issue 507024118 public PoC and technical write-up
  4. CISA Known Exploited Vulnerabilities Catalog
  5. SecurityWeek coverage of Chrome 149 security release
  6. W3C Subresource Integrity specification
  7. FIRST EPSS model documentation
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.