Overview

High
Severity
CVSS
No
Exploited ITW
Fixed
Fix Status
ImpactInsufficient policy enforcement in Navigation
DescriptionInsufficient policy enforcement in Navigation
ComponentNavigation
Bug ClassLogic Error
Tracker526541544
Fix commit85fede76fe07 (chromium/src) +5/-3
CISA KEVNot listed
CreditedGoogle
Disclosed2026-07-08

Files Changed

  • content/browser/renderer_host/navigation_request.cc
From 85fede76fe078d4ea9622a0c37b81c6852b0cf93 Mon Sep 17 00:00:00 2001
From: Alex Moshchuk <[email protected]>
Date: Tue, 23 Jun 2026 14:10:35 -0700
Subject: [PATCH] Restore CHECK for CanAccessOrigin().

The CanAccessOrigin() check in
NavigationRequest::GetOriginForURLLoaderFactoryAfterResponse() was
always a CHECK to begin with and was incorrectly downgraded to a DCHECK
in https://chromium-review.googlesource.com/c/chromium/src/+/7748832.

Note: there was always an ongoing trickle of known crashes resulting
from this check (going back to at least 2020), and this is tracked is
issues such as https://crbug.com/469092870 and
https://crbug.com/463029421. These reports will probably reappear once
this CL lands and might be seen as a new spike; please avoid reverting
this CL due to that, as this check turns potential security problems
into stability ones, so it's important to keep.

Bug: 526541544
Change-Id: Ib077b83303fb8633d60b773a30529900008b62a7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7986809
Commit-Queue: Alex Moshchuk <[email protected]>
Reviewed-by: Charlie Reis <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1651274}
---

diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
index f638782..5bd7686 100644
--- a/content/browser/renderer_host/navigation_request.cc
+++ b/content/browser/renderer_host/navigation_request.cc
@@ -9722,14 +9722,16 @@
   //   policy of the process being used. This is because the content is loaded
   //   from the MHTML archive within the process. There are no data loaded from
   //   the network.
+  //
+  // Note: This is a security-critical check that needs to be a CHECK rather
+  // than a DCHECK, and it should never be reverted, even if there are crashes
+  // in the wild.
   if (HasRenderFrameHost() &&
       !GetRenderFrameHost()->ShouldBypassSecurityChecksForErrorPage(this) &&
       !IsForMhtmlSubframe()) {
     int process_id = GetRenderFrameHost()->GetProcess()->GetDeprecatedID();
     auto* policy = ChildProcessSecurityPolicyImpl::GetInstance();
-    // TODO(https://crbug.com/526541544): CHECK-exclusion: Convert to CHECK once
-    // we are sure this isn't hit.
-    DCHECK(policy->CanAccessOrigin(
+    CHECK(policy->CanAccessOrigin(
         process_id, origin,
         ChildProcessSecurityPolicyImpl::AccessType::kCanCommitNewOrigin));
   }
Loading diff…

Original Bug Report

reported by [email protected]

[DCHECK-to-CHECK] NavigationRequest::GetOriginForURLLoaderFactoryAfterResponse, failing DCHECK(policy->CanAccessOrigin(

This bug is part of the project: http://go/check-content-navigation (Systematic Conversion of DCHECKs to CHECKs in Core Navigation).

This specific DCHECK was previously upgraded to a CHECK, but had to be reverted back to a DCHECK because it was reached in the wild (which occurred in about 15% of the converted instances).

This bug is tracked to resolve this specific invariant failure so we can eventually upgrade it back to a CHECK.

Context:

  • File: content/browser/renderer_host/navigation_request.cc:9730
  • Function: NavigationRequest::GetOriginForURLLoaderFactoryAfterResponse
  • Source Link
   9725:   if (HasRenderFrameHost() &&
   9726:       !GetRenderFrameHost()->ShouldBypassSecurityChecksForErrorPage(this) &&
   9727:       !IsForMhtmlSubframe()) {
   9728:     int process_id = GetRenderFrameHost()->GetProcess()->GetDeprecatedID();
   9729:     auto* policy = ChildProcessSecurityPolicyImpl::GetInstance();
=> 9730:     // TODO(https://crbug.com/526541544): CHECK-exclusion: Convert to CHECK once
   9731:     // we are sure this isn't hit.
   9732:     DCHECK(policy->CanAccessOrigin(
   9733:         process_id, origin,
   9734:         ChildProcessSecurityPolicyImpl::AccessType::kCanCommitNewOrigin));
   9735:   }
   9736: 
   9737:   return origin;
View on issue tracker