Low watch CVSS 6.5 chrome Info Disclosure 📄 Reporter bug report 🔧 Commit mapped

Overview

Low
Severity
6.5
CVSS
No
Exploited ITW
Fixed
Fix Status
ImpactInformation leak in Passwords
DescriptionInformation leak in Passwords
ComponentPasswords
Sub-componentiOS
Bug ClassInfo Disclosure
Action tierwatch — information disclosure — security-relevant, below the RCE-class bar
Computed by PatchGap's deterministic exploitability ruler from the fixing commit. patch-now = RCE-class & attacker-reachable in a default config, or exploited in the wild; watch = real security signal below that bar; noise = no security relevance.
Tracker533014006
Fix commit1487d18ba043 (chromium/src) +6/-0
CWECWE-200 (Information exposure)
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N
CISA KEVNot listed
CreditedGoogle
Reported2026-07-09 (per vendor advisory)
Fix landed2026-07-09 (public git)
Disclosed2026-08-25
Patch gap47 days — fix public in source before the advisory

Background

Credential Provider favicon storage
on iOS, Chrome caches favicons for sites the user has saved credentials for, in the shared app container so the credential provider extension can display them.
iCloud/iTunes device backup
iOS backs up app container files to iCloud/iTunes unless a file or directory is explicitly marked to be excluded.
`base::apple::SetBackupExclusion`
a helper that sets the “do not back up” resource attribute on a filesystem path so its contents are omitted from device backups.
Information leak via metadata
the set of cached favicon domains itself reveals which sites the user has stored credentials for, so backing up that set discloses sensitive account information.

Root Cause Analysis

The iOS credential-provider favicon writer created/overwrote favicon files in the shared app container without marking the storage path as backup-excluded, so the favicon set was copied into iCloud/iTunes backups. Because the collection of cached favicons maps directly to the domains for which the user has saved credentials, this exposed sensitive account-inventory information to anyone able to read the device backup.

The fix adds #import "base/apple/backup_util.h" and calls base::apple::SetBackupExclusion(base::apple::NSStringToFilePath(path)) on the favicon storage path before the file is written with createFileAtPath:contents:attributes:. The comment notes the exclusion is set unconditionally so directories created before the fix are also covered, aligning behavior with archivable_credential_store.mm. This is a privacy hardening change: it does not alter a validation check but adds a previously missing exclusion so the favicon set no longer leaves the device via backups.

Key insight
The favicon storage path, whose contents reveal which domains have saved credentials, was never marked backup-excluded; the fix unconditionally calls SetBackupExclusion on that path before writing so it is kept out of device backups.

Attack Path

  1. Accumulate favicons As the user saves credentials, Chrome’s iOS credential provider caches a favicon per associated domain in the shared app container.
  2. Backup captures the set Because the storage path lacked a backup-exclusion attribute, iOS includes the favicon files in iCloud/iTunes backups.
  3. Read the backup An adversary with access to the device backup (e.g. via a compromised iCloud account or local backup) enumerates the cached favicon set. (inferred)
  4. Infer credential domains The domain list implied by the favicon set discloses which sites the user has stored credentials for, an information leak about the user’s accounts.

Impact Assessment

The bug leaks the list of domains for which the user has saved credentials to whoever can access the device’s iCloud/iTunes backup, a privacy/information-disclosure issue on iOS. Preconditions are that the user has cached credential favicons and that an attacker can obtain the backup; there is no remote or in-browser code path. The advisory classifies this as an information leak in Passwords and states no exploited-in-the-wild status; no escalation beyond metadata disclosure is demonstrated by the patch.

Files Changed

  • ios/chrome/browser/credential_provider/model/credential_provider_util.mm

Audit Directions

  • Backup exclusion for sensitive caches
    Audit iOS storage of credential-, favicon-, and account-derived data to ensure each sensitive path calls SetBackupExclusion, matching archivable_credential_store.mm.
  • Metadata-as-secret
    Look for caches where the existence or naming of files (not just their contents) reveals sensitive user state, and confirm those paths are protected from backups and other cross-device sync.
  • Retroactive coverage
    Check that hardening applied at write time is set unconditionally so directories created before the fix are also covered, rather than only on first creation.
From 1487d18ba0430935b3d7a95d13ed07ad8fd8d403 Mon Sep 17 00:00:00 2001
From: Alexis Hétu <[email protected]>
Date: Thu, 09 Jul 2026 13:18:23 -0700
Subject: [PATCH] [iOS] Exclude favicons from backups

Exclude the shared app container's favicon storage path from
iCloud/iTunes backups. Since the set of cached favicons indicates
which domains the user has stored credentials for, excluding them
from backups protects user privacy. This aligns with patterns used
in other credential-related storage.

Bug: 533014006
Change-Id: I69cd9c275a77ad3f6e7b3ab54214460a48b682c4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8070880
Commit-Queue: Alexis Hétu <[email protected]>
Reviewed-by: Tommy Martino <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1659794}
---
diff --git a/ios/chrome/browser/credential_provider/model/credential_provider_util.mm b/ios/chrome/browser/credential_provider/model/credential_provider_util.mm
index 68f61b3..bf257d8 100644
--- a/ios/chrome/browser/credential_provider/model/credential_provider_util.mm
+++ b/ios/chrome/browser/credential_provider/model/credential_provider_util.mm
@@ -6,6 +6,7 @@
 
 #import <CommonCrypto/CommonDigest.h>
 
+#import "base/apple/backup_util.h"
 #import "base/apple/foundation_util.h"
 #import "base/check_is_test.h"
 #import "base/metrics/histogram_functions.h"
@@ -153,6 +154,11 @@
                                     error:nil];
     }
 
+    // The favicon set reveals which sites the user has credentials for; keep
+    // it out of device backups (matches archivable_credential_store.mm). Set
+    // unconditionally so folders created before this fix are covered too.
+    base::apple::SetBackupExclusion(base::apple::NSStringToFilePath(path));
+
     // Create or overwrite the favicon file.
     [file_manager createFileAtPath:[file_url path]
                           contents:data
Loading diff…

Original Bug Report

reported by [email protected]

Potential leak of saved sites from iOS CPE SharedFaviconAttributes directory in device backups

Project Fortify, an experimental security project, has identified the following potential security issue. If you’re a feature owner CC-ed on this bug, please do your best to review these reports. Please see https://chromium.googlesource.com/chromium/src/+/main/docs/security/ai-generated-security-bugs-faq.md for more information.

Overview: The Chrome Credential Provider Extension (CPE) on iOS writes cached site favicon attributes to a shared App-Group directory that is not excluded from backups. Since filenames are computed as unsalted SHA-256 hashes of login URLs and files contain raw favicon PNGs, an attacker with access to device backups can determine which websites the user has saved credentials/passkeys for. This represents a potential privacy leak of sensitive account metadata.

Affected files:

  • ios/chrome/browser/credential_provider/model/credential_provider_util.mm
  • ios/chrome/browser/credential_provider/model/credential_provider_service.mm
  • ios/chrome/common/app_group/app_group_constants.mm

Estimated timestamp from git blame: 2022-03-31

Root Cause

In Chrome iOS, the Credential Provider Extension (CPE) shares favicon assets with the system’s AutoFill extension via the App Group container.

The directory for these favicons is created in SaveFaviconToSharedAppContainer():

// ios/chrome/browser/credential_provider/model/credential_provider_util.mm:149-154
if (![file_manager fileExistsAtPath:path]) {
  [file_manager createDirectoryAtPath:path
          withIntermediateDirectories:YES
                           attributes:nil
                                error:nil];
}

And the folder path is resolved to {AppGroup}/Chrome/SharedFaviconAttributes/ inside app_group::SharedFaviconAttributesFolder() defined in ios/chrome/common/app_group/app_group_constants.mm.

However, unlike the main credential store directory ({AppGroup}/credential_provider/) which is explicitly excluded from backups using base::apple::SetBackupExclusion (see archivable_credential_store.mm), the SharedFaviconAttributes directory and the individual files written into it are never marked with the backup exclusion attribute. As a result, iOS includes this directory in device backups by default.

Data Flow & Leak Mechanism

For saved credentials and passkeys, Chrome computes a unique filename and writes a favicon cache file:

  1. Filename Generation: Chrome hashes the full credential login URL (url.spec()) using unsalted SHA-256:
    // ios/chrome/browser/credential_provider/model/credential_provider_util.mm:115-122
    NSString* GetFaviconFileKey(const GURL& url) {
      unsigned char result[CC_SHA256_DIGEST_LENGTH];
      CC_SHA256(url.spec().data(), url.spec().length(), result);
      return base::SysUTF8ToNSString(base::HexEncode(result));
    }
    
  2. File Content: The saved file is a serialized FaviconAttributes archive containing either the site’s high-resolution favicon PNG (UIImagePNGRepresentation) or a fallback monogram representing the domain’s first letter.

An attacker gaining access to device backups can locate the SharedFaviconAttributes folder, extract the files, and:

  • Run an offline dictionary look-up matching common login URLs against the unsalted SHA-256 filenames to instantly find saved sites.
  • Deserialize the files to directly extract and view the PNG favicon images, visually identifying the websites the user has credentials/passkeys for.

Potential Steps to Reproduce

Note: These are potential steps as our analysis is static/conceptual; we do not currently execute active proof-of-concept code on live devices.

  1. Save passwords/passkeys for several distinct websites in Chrome for iOS.
  2. Ensure the Credential Provider Service runs (triggered on credential modification or via the weekly resync).
  3. Back up the iOS device to a computer via iTunes/Finder (with encryption disabled) or sync to an iCloud backup.
  4. Extract the backup and locate the directory: group.<bundle>.chrome/Chrome/SharedFaviconAttributes/
  5. Inspect the filenames (which are SHA-256 digests of the login URLs) and decode the file contents using an NSKeyedUnarchiver to read the PNG favicons, visually exposing the user’s saved account domains.

Suggested Fix

Exclude the SharedFaviconAttributes directory from backups. This can be done by calling base::apple::SetBackupExclusion on the folder path inside SaveFaviconToSharedAppContainer:

// ios/chrome/browser/credential_provider/model/credential_provider_util.mm
if (![file_manager fileExistsAtPath:path]) {
  [file_manager createDirectoryAtPath:path
          withIntermediateDirectories:YES
                           attributes:nil
                                error:nil];
  base::apple::SetBackupExclusion(base::apple::NSStringToFilePath(path));
}

This mirrors the backup exclusion implementation applied to the primary credential store in archivable_credential_store.mm:213.

Evaluated with Chrome root at commit: 84065d9121f6e48f67755f0ae963cc09617e5c85


Results so far have been promising, but there can be wrong deductions. Feel free to adjust as follows:

  • If you are familiar with the severity guidelines, you may adjust the severity.
  • If this is a false positive, and there’s no work to be done, please close as WAI.
  • If there is work to do here but not a vulnerability, please change the issue type to Task/Bug/FR.

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.

View on issue tracker