Chrome · CustomTabs
CVE-2026-79152
Logic Error in CustomTabs
Overview
Low
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Changed Functions
| Function | Change | Notes |
|---|---|---|
ifchrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java |
modified |
Files Changed
chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.javachrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
Patch
From 0e64745bdd4a1534f8fe63a532fb25d8d44d18c5 Mon Sep 17 00:00:00 2001
From: Mohamed Adel <adelm@google.com>
Date: Mon, 13 Jul 2026 16:03:16 -0700
Subject: [PATCH] Update intent URL extraction for EXTRA_HEADERS in Custom Tabs
Ensure that EXTRA_HEADERS intent evaluation properly uses the navigated
URL rather than relying solely on the initial intent state for
validation.
TAG=agy
Bug: 533083384
Change-Id: If7f794ed46742776edfb970d524733861f445880
Fixed: 533083384
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8086206
Reviewed-by: Wenyu Fu <wenyufu@chromium.org>
Commit-Queue: Moe Adel <adelm@google.com>
Reviewed-by: Sinan Sahin <sinansahin@google.com>
Cr-Commit-Position: refs/heads/main@{#1661446}
---
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
index 386acc6..abaf8cb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
@@ -732,7 +732,7 @@
if (referrer != null) {
params.setReferrer(new Referrer(referrer, getReferrerPolicyFromIntent(intent)));
}
- String headers = getExtraHeadersFromIntent(intent);
+ String headers = getExtraHeadersFromIntent(intent, params.getUrl());
if (headers != null) params.setVerbatimHeaders(headers);
}
@@ -915,13 +915,25 @@
* @param intent The intent containing the bundle extra with the HTTP headers.
*/
public static @Nullable String getExtraHeadersFromIntent(Intent intent) {
+ return getExtraHeadersFromIntent(intent, IntentHandler.getUrlFromIntent(intent));
+ }
+
+ /**
+ * Returns a String (or null) containing the extra headers sent by the intent, if any.
+ *
+ * <p>This methods skips the referrer header.
+ *
+ * @param intent The intent containing the bundle extra with the HTTP headers.
+ * @param url The destination URL to verify first party origin against.
+ */
+ public static @Nullable String getExtraHeadersFromIntent(Intent intent, @Nullable String url) {
Bundle bundleExtraHeaders = IntentUtils.safeGetBundleExtra(intent, Browser.EXTRA_HEADERS);
if (bundleExtraHeaders == null) return null;
StringBuilder extraHeaders = new StringBuilder();
boolean fromChrome = IntentHandler.wasIntentSenderChrome(intent);
boolean shouldAllowNonSafelistedHeaders =
- CustomTabsConnection.getInstance().isFirstPartyOriginForIntent(intent);
+ CustomTabsConnection.getInstance().isFirstPartyOriginForIntent(intent, url);
for (String key : bundleExtraHeaders.keySet()) {
String value = bundleExtraHeaders.getString(key);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
index a8e73f5..268f1ab 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
@@ -1007,10 +1007,20 @@
* @param intent The intent to verify.
*/
public boolean isFirstPartyOriginForIntent(Intent intent) {
+ return isFirstPartyOriginForIntent(intent, IntentHandler.getUrlFromIntent(intent));
+ }
+
+ /**
+ * Returns whether an intent is first-party with respect to its session, that is if the
+ * application linked to the session has a relation with the provided origin.
+ *
+ * @param intent The intent to verify.
+ * @param url The url to verify against.
+ */
+ public boolean isFirstPartyOriginForIntent(Intent intent, @Nullable String url) {
SessionHolder<?> session = SessionHolder.getSessionHolderFromIntent(intent);
if (session == null) return false;
- String url = IntentHandler.getUrlFromIntent(intent);
if (url == null) return false;
Origin origin = Origin.create(url);
Loading diff…
Original Bug Report
The reporter's bug is still restricted on the tracker. Chrome de-restricts security bugs ~30–90 days after the fix ships; a later run will backfill it here.
References
On This Page