CVE-2026-79207
Overview
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.
SetBackupExclusion on that path before writing so it is kept out of device backups.Attack Path
- Accumulate favicons As the user saves credentials, Chrome’s iOS credential provider caches a favicon per associated domain in the shared app container.
- Backup captures the set Because the storage path lacked a backup-exclusion attribute, iOS includes the favicon files in iCloud/iTunes backups.
- 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)
- 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
Files Changed
ios/chrome/browser/credential_provider/model/credential_provider_util.mm
Audit Directions
- Backup exclusion for sensitive cachesAudit iOS storage of credential-, favicon-, and account-derived data to ensure each sensitive path calls
SetBackupExclusion, matchingarchivable_credential_store.mm. - Metadata-as-secretLook 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 coverageCheck that hardening applied at write time is set unconditionally so directories created before the fix are also covered, rather than only on first creation.
Patch
From 1487d18ba0430935b3d7a95d13ed07ad8fd8d403 Mon Sep 17 00:00:00 2001
From: Alexis Hétu <sugoi@chromium.org>
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 <sugoi@chromium.org>
Reviewed-by: Tommy Martino <tmartino@chromium.org>
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
Original Bug Report
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.mmios/chrome/browser/credential_provider/model/credential_provider_service.mmios/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:
- 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)); } - File Content: The saved file is a serialized
FaviconAttributesarchive 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.
- Save passwords/passkeys for several distinct websites in Chrome for iOS.
- Ensure the Credential Provider Service runs (triggered on credential modification or via the weekly resync).
- Back up the iOS device to a computer via iTunes/Finder (with encryption disabled) or sync to an iCloud backup.
- Extract the backup and locate the directory:
group.<bundle>.chrome/Chrome/SharedFaviconAttributes/ - Inspect the filenames (which are SHA-256 digests of the login URLs) and decode the file contents using an
NSKeyedUnarchiverto 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.