-
Notifications
You must be signed in to change notification settings - Fork 181
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Enforce backup eligibility during assertion #1791
Comments
I agree that it's probably good to set an explicit standard for how RPs should react if I'm not sure what that should be, though. The user probably has little insight on, let alone control of, the flags, so rejecting the assertion or even revoking the credential seems unfair to the user. But if things don't break, there's little incentive for authenticator vendors to implement the flags correctly. But if things do break, there is incentive for RPs to ignore the recommendation to make their user experience more pleasant. |
This is likely a bug. I, personally, am not seeing this behavior on the latest betas.
It cannot change after registration. We already have normative text about this: https://w3c.github.io/webauthn/#sctn-credential-backup "The value of the BE flag is set during authenticatorMakeCredential operation and MUST NOT change." |
Yes, but there is no guidance (normative or informative) on what RPs should do if they encounter the forbidden cases ( |
(BE/BS flags are part of my testing and I've not seen this in any Apple beta.) |
I do agree that an official decision should be made. Two insanely popular WebAuthn libraries currently reject registration and authentication based on the fact that Edit: That is to say that other libraries may decide it isn't so bad that |
Are you counting webauthn-rs in that list? if not, that makes three libraries. :) So reading these points, I think it sounds like we should have an explicit step in the spec stating that if BE changes during a credential lifecycle the RP can choose to reject or take other action then? I think it sounds like we are mostly in agreement that we should have better specification here. |
@Firstyear The content of the spec has shifted since this issue was initially created. Can you track down where (perhaps in the rendered version of L3 https://w3c.github.io/webauthn/) you were pointing to about https://w3c.github.io/webauthn/#sctn-discover-from-external-source |
It's here: https://w3c.github.io/webauthn/#backup-eligibility """ As we can see the text is the same, and indicates that BE is a creation only property, and is also permanent for the life of the credential. This means that if BE is only sent at credential create and later changes then implementations may not signal it to RP's. As a result, my view is that BE/BS are properties that should be sent both during creation (attestation) and authentication (assertion) so that if a vendor changes their BE state then RP's are able to see this during the life of a credential because these states are not permanent - they are actually dynamic and changing on some implementations. |
Proposed Change
https://github.com/w3c/webauthn/blob/main/index.bs#L983
Currently this text states:
The detail here is that "Backup eligibility is a credential property and is permanent".
We can see during registration that this property is checked by:
https://github.com/w3c/webauthn/blob/main/index.bs#L5029
However during assertion the BE property is NOT checked.
This has now lead to Apple's iOS and macOS sending BE=true during registration, but BE=false during subsequent usage of the credential during assertion ceremonies. This is certainly 'an' interpretation of the above sections, but it is ambiguous to other potential readings of the text. For example, my interpretation is that a property being permanent means that the credential will always send BE=true during any ceremony, and that BE=true changing to BE=false is invalid because you can-not "un-backup" a credential.
The primary reason to harden this is that (I think?) Apple plan to upgrade credentials from being BE=false to BE=true, and due to their current design, this WONT be signalled to RP's meaning they miss the ability to make informed choices about this change in properties during assertion.
Additionally it is confusing to an RP today when at registration a permanent property is changing between registration and assertion.
So I think that some clarity is needed here that either:
OR
Thoughts?
The text was updated successfully, but these errors were encountered: