A cosmetic tab-bar trick that needs a cooperative victim and a good day for the attacker
CVE-2026-14139 is an *inappropriate implementation* in Chrome's TabStrip component — the horizontal bar at the top of the browser that renders tabs. Per Google's advisory, versions of Chrome prior to 150.0.7871.47 allow a remote attacker who convinces a user to perform a specific interaction (typically a drag, drop, or gesture across tabs) to trigger some form of spoofing or minor state confusion. CWE-451 pins this squarely as a UI misrepresentation class bug — think address-bar or tab-title spoofing, not memory corruption and not sandbox escape.
Google's MEDIUM (4.2) rating is honest and probably slightly generous. The CVSS vector AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:L/A:L tells the whole story: network reachable, but high attack complexity, user interaction required, and impact capped at *low integrity* and *low availability* with no confidentiality loss. This is a phishing enabler at worst, not a browser RCE. For a 10,000-host fleet on managed Chrome with auto-update, this rides the normal release train.
4 steps from start to impact.
Attacker stands up a malicious page
chromium-issues/* gist within weeks of source-code diff review.- Attacker-controlled web origin
- Victim uses vulnerable Chrome build < 150.0.7871.47
- Requires the victim to actually visit the page — standard phishing/lure economics apply
- Modern Safe Browsing and enterprise SWG categorization catch new attacker domains fast
Lure the user into the gesture
UI:R combined with AC:H means it isn't a passive drive-by. Realistic lures: a fake browser-game, a bogus 'drag this tab to install' onboarding flow, or a spoofed drag-to-download control. Framework of choice would be a custom JS harness; nothing off-the-shelf like BeEF ships a TabStrip module.- Victim is convinced to perform a non-obvious tab manipulation
- Victim ignores or misinterprets any browser prompts
- Users tolerant enough to follow drag instructions on an unknown site are already the phishing-susceptible tail
- Corporate awareness training routinely covers 'don't drag things from websites'
Trigger the TabStrip misrepresentation
- Vulnerable Chrome version
- Successful gesture from step 2
- Impact is bounded by what the *user* subsequently types — no auto-exfil, no session steal
- Password managers autofill on origin, not visual chrome, so they won't be fooled
Harvest credentials or misdirect action
- User acts on the misrepresented UI
- FIDO2/WebAuthn, hardware keys, and phishing-resistant MFA cut this to near-zero impact
- Conditional Access with device posture blocks stolen-password reuse
chrome://settings/help policy reporting or your MDM. No mitigation SLA applies to LOW — this is backlog hygiene, roll with your normal Chrome update cadence.SafeBrowsingProtectionLevel=2 via GPO/MDM improves detection of new attacker-controlled lure domains that would host the gesture-trap page. Rolls out with existing Chrome policy — zero incremental cost.- EDR / AV signatures — nothing to sign; the exploit is inert HTML+JS abusing legitimate Chrome behavior.
- Network IDS/IPS rules — payload is arbitrary JS over TLS to an attacker-chosen domain; no fixed pattern.
- Password managers alone — they resist origin-based phishing but do not warn users about tab-label spoofing that misdirects manual actions (OAuth approvals, wire transfers, etc.).
- Blocking Chromium browsers in favor of another browser — Chromium-derivative browsers (Edge, Brave, Opera, Vivaldi) inherit the same bug until they rebase; switching is not a mitigation.
The supporting signals.
| In-the-wild | No known exploitation as of 2026-07-01. Not flagged in Google's advisory as exploited. |
|---|---|
| PoC availability | None public at disclosure. Expect community reproduction via Chromium bug tracker once the restriction is lifted (~14 weeks post-release). |
| EPSS | Not yet scored — new CVE (< 24h since disclosure). Historical baseline for Chrome MEDIUM UI bugs: <0.5% (bottom 20th percentile). |
| KEV status | Not listed. CISA has not added TabStrip UI-spoofing bugs to KEV historically. |
| CVSS vector | CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:L/A:L — network but *high complexity*, *user interaction required*, no confidentiality impact, low integrity/availability. Reads as a spoofing enabler. |
| CWE | CWE-451 — User Interface (UI) Misrepresentation of Critical Information. Classic tab/URL spoof family. |
| Affected versions | All Google Chrome < 150.0.7871.47 across Windows, macOS, Linux. Chromium-derived browsers (Edge, Brave, Opera, Vivaldi) likely inherit until they rebase. |
| Fixed version | Chrome Stable 150.0.7871.47 (2026-06-30 release). Distro packages: google-chrome-stable and chromium backports pending — check Debian/Ubuntu security trackers. |
| Exposure data | N/A for scanner platforms (GreyNoise/Shodan/Censys don't fingerprint Chrome client version). Fleet exposure = your endpoint inventory, not internet-facing. |
| Disclosure / reporter | Disclosed 2026-06-30 in the Chrome Stable channel release notes. Reporter attribution: check Google's Chrome Releases blog — typically an external researcher with a modest bounty ($1k–$5k tier for MEDIUM UI bugs). |
Sources.
Why this verdict
- Impact is cosmetic-plus-social: CVSS
C:N/I:L/A:L— no data disclosure, no code execution. The bug's ceiling is tricking a human, not the browser. - High attack complexity + UI required:
AC:H/UI:Rmeans the attacker needs both a specific gesture from the victim AND favorable environmental conditions. That's a phishing tax on top of a phishing tax. - Role multiplier — end-user browser on workstations: Chrome runs almost exclusively in role (a) *low-value* or (b) *typical user endpoint*. There is no canonical high-value-role deployment of the Chrome desktop browser (unlike, say, a domain controller). Kiosks and shared terminals are the closest to a sensitive role, and even there the outcome is one-user credential theft, not fleet compromise.
- Chrome auto-update does the work: Managed fleets on the Stable channel receive 150.0.7871.47 within days without admin action. The remediation cost is essentially zero.
- Phishing-resistant MFA neutralizes the payoff: WebAuthn/FIDO2 binds credentials to origin, not visual chrome — a spoofed tab can't fool a hardware key.
Why not higher?
No memory corruption, no sandbox escape, no confidentiality impact. Vendor MEDIUM at 4.2 is the *ceiling*; downgrading to LOW reflects the friction stack (AC:H + UI:R + no canonical high-value role for Chrome) and the fact that any org with phishing-resistant MFA has already priced in this risk class.
Why not lower?
Not IGNORE because CWE-451 spoofs are a documented ingredient in real credential-phishing chains, and Chrome's 3-billion-user installed base means even a low-probability trick has a non-trivial absolute victim count. Patch it — just don't panic-patch it.
Crowdsourced verification payload.
Run on each Windows endpoint (or via your RMM / Intune / SCCM script deployment) as any user — no admin needed. Invoke directly: powershell -ExecutionPolicy Bypass -File .\Check-CVE-2026-14139.ps1. Outputs VULNERABLE, PATCHED, or UNKNOWN and sets exit code 1/0/2 respectively for RMM rollup.
#Requires -Version 5.0
# Check-CVE-2026-14139.ps1
# Detects Chrome versions vulnerable to CVE-2026-14139 (TabStrip UI spoof).
# Patched build: 150.0.7871.47
$FixedVersion = [Version]'150.0.7871.47'
$ChromePaths = @(
"$env:ProgramFiles\Google\Chrome\Application\chrome.exe",
"${env:ProgramFiles(x86)}\Google\Chrome\Application\chrome.exe",
"$env:LOCALAPPDATA\Google\Chrome\Application\chrome.exe"
) | Where-Object { $_ -and (Test-Path $_) }
if (-not $ChromePaths) {
Write-Output 'UNKNOWN: Google Chrome not found on this host.'
exit 2
}
$Status = 'PATCHED'
$Exit = 0
foreach ($p in $ChromePaths) {
try {
$v = [Version](Get-Item $p).VersionInfo.ProductVersion
if ($v -lt $FixedVersion) {
Write-Output "VULNERABLE: $p is $v (need >= $FixedVersion)"
$Status = 'VULNERABLE'
$Exit = 1
} else {
Write-Output "OK: $p is $v"
}
} catch {
Write-Output "UNKNOWN: could not read version for $p ($_ )"
if ($Status -eq 'PATCHED') { $Status = 'UNKNOWN'; $Exit = 2 }
}
}
Write-Output "RESULT: $Status"
exit $Exit