CVE-2026-7932
Overview
Background
- `chrome://download-internals`
- a WebUI page for testing the background download service, not intended for end-user or enterprise-managed use.
- `WebUIConfig::IsWebUIEnabled`
- a per-WebUI hook the framework calls to decide whether a given
chrome://host may be instantiated in a particularBrowserContext; returningfalsedisables the page. - `DefaultInternalWebUIConfig`
- the base config
DownloadInternalsUIConfigderives from, which by default leaves the internal WebUI enabled. - `ProfilePolicyConnector::IsManaged`
- reports whether the profile is under enterprise policy management.
Root Cause Analysis
DownloadInternalsUIConfig previously inherited the default behavior and did not override IsWebUIEnabled, so chrome://download-internals was reachable in any profile — including enterprise-managed profiles. That page drives the background download service directly, which can be used to initiate downloads outside the paths that enforce download-related enterprise policy, so exposing it to managed profiles is an insufficient-policy-enforcement gap.
The fix adds an IsWebUIEnabled override that consults the profile’s ProfilePolicyConnector and returns !...->IsManaged(), i.e. the WebUI is enabled only for unmanaged profiles and disabled whenever the profile is managed. This closes the gap by preventing the test-only page from being instantiated under enterprise management, so its download capability can no longer be used to sidestep policy.
chrome://download-internals test page with default (always-enabled) availability so managed profiles could reach it; the fix overrides IsWebUIEnabled to return false for managed profiles.Attack Path
- Managed profile
A user on an enterprise-managed Chrome profile (where download policy is expected to be enforced) navigates to
chrome://download-internals. - Page is instantiated
Pre-patch, no
IsWebUIEnabledoverride exists, so the default config allows the internal WebUI to load even under management. - Drive background downloads The page’s controls over the background download service let the user trigger downloads through the testing surface, outside the normal policy-enforced download flow, achieving the policy bypass the advisory describes.
Impact Assessment
chrome://download-internals page; exploitation requires access to that profile and navigating to the internal URL. The advisory rates this medium severity and classifies it as insufficient policy enforcement in Downloads; it does not report in-the-wild exploitation. No memory corruption or code execution is involved.Files Changed
chrome/browser/ui/webui/download_internals/download_internals_ui.ccchrome/browser/ui/webui/download_internals/download_internals_ui.h
Audit Directions
- Internal/test WebUIs under policyAudit other
chrome://*-internals/debug WebUIs that inheritDefaultInternalWebUIConfigwithout anIsWebUIEnabledoverride, since they may be reachable in managed profiles. - Capability surfaces bypassing policy flowsReview WebUI/debug pages that can initiate downloads, navigations, or other policy-governed actions outside the enforced code paths.
- Managed-profile gatingCheck that features which should be restricted under enterprise management actually query
ProfilePolicyConnector::IsManaged(or equivalent) at their entry points, not only in the main user flow.
Patch
From c521d7fb720c5ce0a5de9827a0f547d4e45316b0 Mon Sep 17 00:00:00 2001
From: Min Qin <qinmin@chromium.org>
Date: Thu, 26 Mar 2026 01:08:29 -0700
Subject: [PATCH] Don't allow download from chrome://download-internal for managed profile
chrome://download-internal is for testing background download service,
not supposed to work for managed profile.
Bug: 481634116
Change-Id: I2507207b7805a0771aeda605d20b2aa1a31d5022
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7691847
Reviewed-by: Tom Lukaszewicz <tluk@chromium.org>
Commit-Queue: Min Qin <qinmin@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1605309}
---
diff --git a/chrome/browser/ui/webui/download_internals/download_internals_ui.cc b/chrome/browser/ui/webui/download_internals/download_internals_ui.cc
index efe1facb..af1be350 100644
--- a/chrome/browser/ui/webui/download_internals/download_internals_ui.cc
+++ b/chrome/browser/ui/webui/download_internals/download_internals_ui.cc
@@ -6,6 +6,7 @@
#include <utility>
+#include "chrome/browser/policy/profile_policy_connector.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/download_internals/download_internals_ui_message_handler.h"
#include "chrome/common/url_constants.h"
@@ -16,6 +17,13 @@
#include "content/public/browser/web_ui_data_source.h"
#include "services/network/public/mojom/content_security_policy.mojom.h"
+bool DownloadInternalsUIConfig::IsWebUIEnabled(
+ content::BrowserContext* browser_context) {
+ return !Profile::FromBrowserContext(browser_context)
+ ->GetProfilePolicyConnector()
+ ->IsManaged();
+}
+
DownloadInternalsUI::DownloadInternalsUI(content::WebUI* web_ui)
: content::WebUIController(web_ui) {
// chrome://download-internals source.
diff --git a/chrome/browser/ui/webui/download_internals/download_internals_ui.h b/chrome/browser/ui/webui/download_internals/download_internals_ui.h
index a515ef4..ec9a49b 100644
--- a/chrome/browser/ui/webui/download_internals/download_internals_ui.h
+++ b/chrome/browser/ui/webui/download_internals/download_internals_ui.h
@@ -16,6 +16,8 @@
public:
DownloadInternalsUIConfig()
: DefaultInternalWebUIConfig(chrome::kChromeUIDownloadInternalsHost) {}
+
+ bool IsWebUIEnabled(content::BrowserContext* browser_context) override;
};
// The WebUI for chrome://download-internals.