Chrome · Chrome for iOS
CVE-2026-18016
Logic Error in Chrome for iOS
Overview
Low
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Changed Functions
| Function | Change | Notes |
|---|---|---|
ifcomponents/webauthn/ios/passkey_java_script_feature.mm |
modified |
Files Changed
components/webauthn/ios/passkey_java_script_feature.mm
Patch
From 278dea1a5010f7c4dc7eebc0e86346cda6feacf5 Mon Sep 17 00:00:00 2001 From: Alexis Hétu <[email protected]> Date: Tue, 16 Jun 2026 05:51:44 -0700 Subject: [PATCH] [iOS] Enforce user gesture requirements for modal passkey requests Consolidates and enforces user gesture validation for both modal passkey registration and assertion requests, ensuring untrusted, gestureless JavaScript events are correctly rejected and deferred to the renderer. Bug: 523708527 Change-Id: Ie9c78d2647c557881ad82313ec9d7e745767acd8 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7943004 Reviewed-by: Tommy Martino <[email protected]> Reviewed-by: Sourav Uttam Sinha <[email protected]> Commit-Queue: Alexis Hétu <[email protected]> Cr-Commit-Position: refs/heads/main@{#1647484} --- diff --git a/components/webauthn/ios/passkey_java_script_feature.mm b/components/webauthn/ios/passkey_java_script_feature.mm index d0724eb05..4d8c31d 100644 --- a/components/webauthn/ios/passkey_java_script_feature.mm +++ b/components/webauthn/ios/passkey_java_script_feature.mm @@ -89,8 +89,15 @@ return output; } -bool ValidateFeatureUsage(const PasskeyRequestParams& request_params) { +bool ValidateFeatureUsage(const PasskeyRequestParams& request_params, + bool has_user_interaction) { if (request_params.Type() == PasskeyRequestParams::RequestType::kModal) { + // Modal passkey registration or assertion is only allowed if it originates + // from a user gesture. + if (!has_user_interaction) { + return false; + } + return base::FeatureList::IsEnabled(kIOSPasskeyModalLoginWithShim); } else { return base::FeatureList::IsEnabled(kIOSPasskeyConditionalLoginWithShim); @@ -317,15 +324,8 @@ return; } - if (!ValidateFeatureUsage(*registration_request_params)) { - // TODO(crbug.com/460485333): Log the error. - passkey_tab_helper->DeferToRenderer(std::move(*request_info), - registration_request_params->Type()); - return; - } - - // Passkey creation is only allowed if it originates from a user gesture. - if (!message.is_user_interacting()) { + if (!ValidateFeatureUsage(*registration_request_params, + message.is_user_interacting())) { // TODO(crbug.com/460485333): Log the error. passkey_tab_helper->DeferToRenderer(std::move(*request_info), registration_request_params->Type()); @@ -349,7 +349,8 @@ return; } - if (!ValidateFeatureUsage(*assertion_request_params)) { + if (!ValidateFeatureUsage(*assertion_request_params, + message.is_user_interacting())) { // TODO(crbug.com/460485333): Log the error. passkey_tab_helper->DeferToRenderer(std::move(*request_info), assertion_request_params->Type());
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