diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc --- a/chrome/browser/password_manager/chrome_password_manager_client.cc +++ b/chrome/browser/password_manager/chrome_password_manager_client.cc @@ -1723,6 +1723,13 @@ ChromePasswordManagerClient::GetAutofillDelegate( const autofill::FieldGlobalId& field_id) { if (content::RenderFrameHost* rfh = autofill::FindRenderFrameHostByToken( *web_contents(), field_id.frame_token)) { + // Opaque-origin frames must not access the password manager. This is + // enforced renderer-side by SecurityOrigin::CanAccessPasswordManager(), + // but mojom::AutofillDriver::AskForValuesToFill is reachable from a + // compromised renderer with a PasswordSuggestionRequest, so re-check here. + if (rfh->GetLastCommittedOrigin().opaque()) { + return nullptr; + } if (password_manager::ContentPasswordManagerDriver* driver = password_manager::ContentPasswordManagerDriver:: GetForRenderFrameHost(rfh)) {