Open bwbug opened 5 months ago
Hello and thank you very much for your report. I just want to start out by saying that User verification for Passkeys in Bitwarden is a feature that is still being developed. This is the first version of the PIN implementation and it will continue to improve over time!
That said, the main reason we do not currently meet these requirements is that Bitwarden does not currently implement CTAP2. We implement the Web Authentication API (WebAuthn) which implies a specific abstract functional model for a WebAuthn Authenticator, and [FIDO-CTAP] is "only" one example of a concrete instantiation of this model. We currently only claim full support for WebAuthn L2, i.e. all deviations from L2 are considered bugs, while a deviation from L3 might be an unimplemented feature. That said we do support features from newer versions.
Looking ahead We are working on a CTAP2 compatible implementation on the mobile side, which will eventually be ported over to the web clients.
We are also still exploring the best way to implement a PIN, from both a security and usability perspective. So exactly how it will end up looking, i.e. separate or not separate from unlock PIN, synced or not synced, I cannot say yet.
@coroiu Thank you for your response, and for explaining the current status of Bitwarden's standards compliance.
So exactly how it will end up looking, i.e. separate or not separate from unlock PIN
If you have not already done so, I would recommend that you follow the discussion in this feature request thread on the Community Forum:
Passkey User Verification Independent of Vault Unlock Method
Linking the UV PIN to the vault PIN will invariably create many unintended problems, because the two PINs serve completely different purposes, and have different threat models. By making the two PINs distinct entities, a user would still have the option of re-using their vault PIN as their UV PIN, if they prefer no to memorize an additional PIN (this could even be the default UV PIN value, as long as users are able to overwrite it with a distinct UV PIN value that is different from their vault unlock PIN).
Steps To Reproduce
Register a passkey at passkeys.io and store it in your Bitwarden browser extension, then perform the following tests (sign out after each successful login):
0
). Use the "Sign in with a passkey" option on passkeys.io, and enter the PIN when prompted for user verification.Expected Result
Per the FIDO CTAP specifications, the following authenticator behaviors are mandated. Here, I am referencing the 21 June 2022 Proposed Standard, so there may be a more relevant document for standards currently in force; however, I believe that any differences do not significantly affect the issues raised in this report.
Expected Test Results:
8
, then the authenticator's user verification PIN should be disabled, requiring the entire authenticator to be reset (6.5.2.2).Actual Result
Testing indicates that none of the above specifications are met. The actual test results are:
Screenshots or Videos
No response
Additional Context
The underlying issue is that the requirements for the CTAP user verification PIN are fundamentally different from the requirements for the Bitwarden vault unlock PIN (or the Bitwarden master password). Therefore, using the vault unlock PIN or the master password for CTAP user verification is a flawed design. A separate PIN should be used for passkey user verification; ideally, an encrypted version of this UV PIN (or its hash) should be stored in the vault and syncable, so that the same passkey PIN can be used across all devices.
Operating System
Windows
Operating System Version
No response
Web Browser
Chrome
Browser Version
No response
Build Version
2024.6.0
Issue Tracking Info