-
Notifications
You must be signed in to change notification settings - Fork 921
Description
Origin
Native Application (non-browser app)
Web URL or App name
webauthn.io
Passkey Action
- Creating new passkey (Registration)
- Signing in (Authentication)
Build Information
2025.12.0
Additional Information
1. Description:
On Xiaomi 15 (HyperOS 3 CN, Android 16), Bitwarden is unable to complete the Passkey authentication or registration flow when system biometrics (Fingerprint/Face) are enabled. The system's com.android.credentialmanager component crashes immediately upon trying to show the selector UI.
2. Steps to Reproduce:
- Use Xiaomi 15 with Fingerprint/Face unlock enabled.
- Set Bitwarden as the primary Credential Provider.
- Attempt to log in to a website/app using a Passkey stored in Bitwarden.
- The system "CredentialSelectorActivity" fails to pop up, and Bitwarden receives a
TYPE_NO_CREDENTIALor cancellation error.
3. Expected Behavior:
The system credential selector should appear, allowing the user to select the Bitwarden credential and authenticate via biometrics.
4. Actual Behavior:
The system component com.android.credentialmanager crashes due to a ClassCastException.
5. Root Cause Analysis (from Logcat):
The crash occurs in the system's biometric pre-validation logic. Android 15 has updated certain SliceItem fields to Long, but Xiaomi's CredentialSelectorActivity implementation still calls getInt(), causing a type mismatch.
6. Supporting Logcat Trace:
E CredentialSelectorActivity: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
E CredentialSelectorActivity: at android.app.slice.SliceItem.getInt(SliceItem.java:238)
E CredentialSelectorActivity: at com.android.credentialmanager.ktx.CredentialKtxKt.predetermineAndValidateBiometricFlow(CredentialKtx.kt:98)
E CredentialSelectorActivity: at com.android.credentialmanager.ktx.CredentialKtxKt.getCredentialOptionInfoList(CredentialKtx.kt:307)
E CredentialSelectorActivity: at com.android.credentialmanager.ktx.CredentialKtxKt.toProviderList(CredentialKtx.kt:122)
E CredentialSelectorActivity: at com.android.credentialmanager.CredentialSelectorActivity.onCreate(CredentialSelectorActivity.kt:91)
7. Critical Finding:
Disabling all system biometrics (removing fingerprints/face data) resolves the crash, and the Bitwarden selector UI appears correctly.
Issue Tracking Info
- I understand that work is tracked outside of Github. A PR will be linked to this issue should one be opened to address it, but Bitwarden doesn't use fields like "assigned", "milestone", or "project" to track progress.