CVE-2026-13871
Overview
Files Changed
components/guest_view/browser/guest_view_base.cc
Patch
From 3666da54d07db74a5ce36831456529c1b92fde82 Mon Sep 17 00:00:00 2001
From: Kevin McNee <mcnee@chromium.org>
Date: Mon, 11 May 2026 17:46:13 -0700
Subject: [PATCH] Ensure pre-attachment guest owner RFH updates stay within the same renderer
An unattached guest is scoped to the process that created it.
Fixed: 497961376
Change-Id: I3d4c588080bb07b8122dc7f045bc677f118bad62
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7837698
Reviewed-by: Alex Moshchuk <alexmos@chromium.org>
Commit-Queue: Alex Moshchuk <alexmos@chromium.org>
Auto-Submit: Kevin McNee <mcnee@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1628925}
---
diff --git a/components/guest_view/browser/guest_view_base.cc b/components/guest_view/browser/guest_view_base.cc
index 4092932e..ba981b25 100644
--- a/components/guest_view/browser/guest_view_base.cc
+++ b/components/guest_view/browser/guest_view_base.cc
@@ -91,7 +91,8 @@
void RenderFrameHostChanged(content::RenderFrameHost* old_host,
content::RenderFrameHost* new_host) override {
if (old_host && guest_->owner_rfh_id_ == old_host->GetGlobalId() &&
- new_host && guest_->element_instance_id_ == kInstanceIDNone) {
+ new_host && guest_->element_instance_id_ == kInstanceIDNone &&
+ old_host->GetProcess() == new_host->GetProcess()) {
// TODO(crbug.com/40202416): Do something similar for MPArch.
guest_->owner_rfh_id_ = new_host->GetGlobalId();
}
Original Bug Report
GuestView ownership transfer bypasses CanEmbedderAccessInstanceID
Project Fortify, an experimental security project, has identified the following potential security issue.
Overview: A compromised renderer can hijack an unattached GuestView to bypass Site Isolation and control an extension’s storage partition. The RenderFrameHostChanged logic fails to validate the new host’s origin or process during cross-process navigations. This allows an attacker to bypass CanEmbedderAccessInstanceID and attach the guest while retaining the original privileged identity.
Affected files:
components/guest_view/browser/guest_view_base.cccomponents/guest_view/browser/guest_view_manager.ccextensions/browser/guest_view/web_view/web_view_guest.cc
Estimated timestamp from git blame: 2025-11-04
Final Conclusion
A compromised renderer successfully hijacks an unattached GuestView by bypassing CanEmbedderAccessInstanceID, maintaining the original extension-keyed storage partition and bypassing Site Isolation.
Potential Attack Steps
Note: These are suggested steps; our tooling agent does not yet have the ability to run code.
- Initial logic and parameters for GuestView creation and
owner_rfh_id_assignment are validated. - Standard processing applied for handling cross-process tab navigation to an attacker-controlled site.
- Standard processing applied for
OwnerContentsObserver::RenderFrameHostChangedexecution. - Standard processing applied for Mojo interface binding (
guest_view::mojom::GuestViewHost) and theAttachToEmbedderFrameMojo invocation. - Standard processing applied for
GuestViewManager::CanEmbedderAccessInstanceIDvalidation. - Established context routes the flow to
GuestViewBase::AttachToOuterWebContentsFrame. owner_web_contents() == embedder_web_contentsevaluates to true; execution jumps directly to theelsebranch (owner_rfh_id_ = outer_contents_frame->GetParent()->GetGlobalId();), skippingUpdateWebContentsForNewOwner. The attacker attains full control over the GuestView, retaining the original extension’s identity and isolated StoragePartition.
Suggested Fix
Modify GuestViewBase::OwnerContentsObserver::RenderFrameHostChanged to verify that the new_host belongs to the same process or shares the same origin as the old_host before updating guest_->owner_rfh_id_. Additionally, enforce stricter origin checks during the attachment process in AttachToOuterWebContentsFrame.
Evaluated with Chrome root at commit: a9cbf6e8b275fe4147435aa905f3b7f5a656f5f0
Results from so far have been promising, but there can be wrong deductions. If this proves to be a false positive, please close as WAI; data from false positives will be used to improve accuracy over time. And please feel free to reach out to me directly if you have concerns or feedback on the project.