CVE-2026-13936
Overview
Files Changed
chrome/browser/keyboard_accessory/android/password_accessory_controller_impl.cc
Patch
From b9367ad9f72b6fd51f5251712ed9f83a4bafc3a9 Mon Sep 17 00:00:00 2001 From: Anna Tsvirchkova <[email protected]> Date: Mon, 18 May 2026 02:47:05 -0700 Subject: [PATCH] Do not log suggestion text as it may contain password Bug: 513044658 Change-Id: I311fd2c88cde5c82b65d9055412c35b75c78a2f5 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7850120 Commit-Queue: Anna Tsvirchkova <[email protected]> Reviewed-by: Friedrich Hauser <[email protected]> Cr-Commit-Position: refs/heads/main@{#1632038} --- diff --git a/chrome/browser/keyboard_accessory/android/password_accessory_controller_impl.cc b/chrome/browser/keyboard_accessory/android/password_accessory_controller_impl.cc index b1c0bcf..001fa19 100644 --- a/chrome/browser/keyboard_accessory/android/password_accessory_controller_impl.cc +++ b/chrome/browser/keyboard_accessory/android/password_accessory_controller_impl.cc @@ -981,8 +981,7 @@ const autofill::AccessorySheetField& selection) { url::Origin origin = GetFocusedFrameOrigin(); if (!AppearsInSuggestions(selection, origin)) { - DUMP_WILL_BE_NOTREACHED() - << "Tried to fill '" << selection.display_text() << "' into " << origin; + DUMP_WILL_BE_NOTREACHED() << "Tried to fill a suggestion into " << origin; return; // Never fill anything, that was not listed in suggestions. } // Show acknowledgement warning before filling password, which has grouped
Original Bug Report
Potential cleartext password leak to Android logs and crash reports via keyboard accessory
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 without the Chrome Security team. Please see https://chromium.googlesource.com/chromium/src/+/main/docs/security/ai-generated-security-bugs-faq.md for more information.
Overview: A diagnostic check in the Android keyboard accessory implementation potentially logs cleartext passwords when an origin mismatch is detected. This results in sensitive user credentials being written to the Android system log (logcat) and included in crash reports uploaded to Google.
Affected files:
chrome/browser/keyboard_accessory/android/password_accessory_controller_impl.cc
Estimated timestamp from git blame: 2024-11-05
Summary
A potential security vulnerability in PasswordAccessoryControllerImpl on Android may cause cleartext passwords to be leaked to system logs and crash reporting telemetry. When a defensive origin check fails during a password-filling operation, a diagnostic log message is generated that includes the plaintext password being protected.
Root Cause Analysis
In chrome/browser/keyboard_accessory/android/password_accessory_controller_impl.cc, the method EnsureAcknowledgementBeforeFilling performs a security check to ensure that the currently focused frame origin matches the origin associated with a selected suggestion. If this check fails, the code triggers a DUMP_WILL_BE_NOTREACHED() macro:
// chrome/browser/keyboard_accessory/android/password_accessory_controller_impl.cc:984
if (!AppearsInSuggestions(selection, origin)) {
DUMP_WILL_BE_NOTREACHED()
<< "Tried to fill '" << selection.display_text() << "' into " << origin;
return;
}
For password suggestions, selection.display_text() is populated with the user’s plaintext password during the construction of the accessory sheet field (lines 129-138):
// chrome/browser/keyboard_accessory/android/password_accessory_controller_impl.cc:133
.SetDisplayText(credential.password()) // Contains cleartext password
While the field is marked as obfuscated for UI purposes, the underlying string passed to the logging macro remains in cleartext.
Potential Disclosure Channels
When the DUMP_WILL_BE_NOTREACHED() branch is hit in official release builds, the following occurs:
- Android System Log (logcat): The message, including the plaintext password, is emitted to the system log via
__android_log_write. This data is preserved in system logs and can be accessed by privileged applications or local attackers with log access. - Crash Reporting Telemetry: The diagnostic message is stored in the
Logging-NOTREACHED_MESSAGEcrash key and copied to a stack buffer. When crash reporting is enabled, this information is included in a minidump that is uploaded to Google’s crash servers viabase::debug::DumpWithoutCrashing().
Potential Attack Vector
An attacker could potentially trigger this leak by inducing a focus race. A suggested sequence of events is:
- A user visits a legitimate site (Origin A) and prepares to use a saved password via the keyboard accessory.
- A malicious cross-origin subframe (Origin B) on the same page waits for the accessory to appear.
- Just as the user taps the password chip, the subframe executes
window.focus()orelement.focus()to steal focus. - The browser detects that the focused frame (Origin B) does not match the credential (Origin A), triggering the
DUMP_WILL_BE_NOTREACHED()macro and logging the plaintext password.
Suggested Fix
Modify the diagnostic log message in EnsureAcknowledgementBeforeFilling to remove the sensitive selection.display_text() value. If logging is required for debugging, use a non-sensitive identifier or simply log that a mismatch occurred without including the credential content.
Evaluated with Chrome root at commit: b3153093eb3c78c3e88ccf562bcbc20437a04b0e
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.