Chrome · CustomTabs
CVE-2026-79233
Logic Error in CustomTabs
Overview
Low
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Files Changed
chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/TrustedCdnPublisherUrlTest.javachrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TrustedCdn.java
Patch
From e363b1cb92fe93b6bdaf2142aa044c37ad43a806 Mon Sep 17 00:00:00 2001 From: Mohamed Adel <[email protected]> Date: Wed, 01 Jul 2026 16:47:57 -0700 Subject: [PATCH] [TrustedCdn] Require SECURE state for publisher URL Tighten the gate in TrustedCdn.getPublisherUrl() to bail on anything other than SECURE (not just DANGEROUS), so LocationBarModel falls through to the real SecurityStateModel result whenever the connection is degraded. TAG=agy Bug: 514061923 Change-Id: I86e9079540079b5e7284fb5c50b1f2f06d7248ea Fixed: 514061923 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8032512 Commit-Queue: Moe Adel <[email protected]> Auto-Submit: Moe Adel <[email protected]> Reviewed-by: Jinsuk Kim <[email protected]> Commit-Queue: Jinsuk Kim <[email protected]> Cr-Commit-Position: refs/heads/main@{#1655822} --- diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/TrustedCdnPublisherUrlTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/TrustedCdnPublisherUrlTest.java index 923cd68..c22d1c6 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/TrustedCdnPublisherUrlTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/TrustedCdnPublisherUrlTest.java @@ -10,6 +10,8 @@ import static androidx.test.espresso.matcher.ViewMatchers.withText; import static org.hamcrest.CoreMatchers.allOf; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doReturn; import static org.chromium.ui.test.util.ViewUtils.onViewWaiting; @@ -42,6 +44,9 @@ import org.junit.Test; import org.junit.rules.RuleChain; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.chromium.base.CommandLine; import org.chromium.base.ContextUtils; @@ -77,6 +82,9 @@ import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.util.ChromeRenderTestRule; import org.chromium.components.offlinepages.SavePageResult; +import org.chromium.components.security_state.ConnectionSecurityLevel; +import org.chromium.components.security_state.SecurityStateModel; +import org.chromium.components.security_state.SecurityStateModelJni; import org.chromium.components.url_formatter.SchemeDisplay; import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.content_public.browser.test.util.TestTouchUtils; @@ -96,6 +104,10 @@ @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) public class TrustedCdnPublisherUrlTest { public CustomTabActivityTestRule mCustomTabActivityTestRule = new CustomTabActivityTestRule(); + + @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule(); + @Mock SecurityStateModel.Natives mSecurityStateModelNatives; + public ChromeRenderTestRule mRenderTestRule = ChromeRenderTestRule.Builder.withPublicCorpus() .setBugComponent(ChromeRenderTestRule.Component.UI_BROWSER_MOBILE_CUSTOM_TABS) @@ -148,6 +160,12 @@ ThreadUtils.runOnUiThreadBlocking(() -> FirstRunStatus.setFirstRunFlowComplete(true)); LibraryLoader.getInstance().ensureInitialized(); + + SecurityStateModelJni.setInstanceForTesting(mSecurityStateModelNatives); + doReturn(ConnectionSecurityLevel.SECURE) + .when(mSecurityStateModelNatives) + .getSecurityLevelForWebContents(any()); + mWebServer = TestWebServer.start(); if (mOverrideTrustedCdn.isEnabled()) { CommandLine.getInstance() @@ -242,6 +260,22 @@ @SmallTest @Feature({"UiCatalogue"}) @OverrideTrustedCdn + public void testNotSecureConnectionLevel() throws Exception { + doReturn(ConnectionSecurityLevel.WARNING) + .when(mSecurityStateModelNatives) + .getSecurityLevelForWebContents(any()); + + runTrustedCdnPublisherUrlTest( + "https://example.com/test", + "com.example.test", + null, + R.drawable.omnibox_not_secure_warning); + } + + @Test + @SmallTest + @Feature({"UiCatalogue"}) + @OverrideTrustedCdn public void testPageInfo() throws Exception { runTrustedCdnPublisherUrlTest( "https://example.com/test", diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TrustedCdn.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TrustedCdn.java index 06e129a9..e746e2d 100644 --- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TrustedCdn.java +++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TrustedCdn.java @@ -146,7 +146,7 @@ return null; } int level = SecurityStateModel.getSecurityLevelForWebContents(mTab.getWebContents()); - if (level == ConnectionSecurityLevel.DANGEROUS) return null; + if (level != ConnectionSecurityLevel.SECURE) return null; GURL publisherUrl = TrustedCdnJni.get().getPublisherUrl(mNativeTrustedCdn); return publisherUrl.isValid() ? publisherUrl : null; }
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