-
Notifications
You must be signed in to change notification settings - Fork 183
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
WebAuthn available to Workers? aka "silent authentication" #199
Comments
I suggest moving this out to a v2 of the spec. For v1 I would focus on the core use case of an interactive user in an active browsing context. |
ok, though note that anticipating a v2 augers for us to go ahead and declare the present spec as "level 1". |
note that some folks are equating "silent authn" to "touchless authn" |
see also #22 "Silent/touchless Authn? clarification of bit 0 in AuthenticatorData" |
If y'all have use cases for exposing your authenticators to workers, we can pretty trivially expose the API there. I don't think we'd want to expose the existing credential types to workers, but it's a reasonable thing to debate. Mind filing a bug against the credential management spec? /cc @battre |
wrt #199 (comment), see also #475 |
@mikewest requested:
done. See w3c/webappsec-credential-management#87 |
some silent authenticator (aka touchless) discussion is also over in webauthn issue #629. |
some silent authenticator (aka touchless) discussion is also over in webauthn issue #644 |
fyi/fwiw, UAF supports so-called "silent/touchless authenticators" and has from the beginning. It did not run afoul of the Privacy Principles due to how it is specified. Here's extracts from the relevant UAF specs: UAF specs wrt "silent/touchless authenticators" -- in the order of "starting at the top and going 'down the stack'" : fido-uaf-protocol.html (roughly equivalent to the webauthn spec) [...] In order to meet user's expectations, such Silent Authenticators need specific properties:
The MetadataStatement has to truthfully reflect the Silent Authenticator, i.e. field userVerification needs to be set to USER_VERIFY_NONE. fido-uaf-asm-api.html (roughly equivalent to a CTAP API) [...]
fido-uaf-authnr-cmds.html (roughly equivalent to an authnr driver API underneath CTAP) 6.2 Register Command [...] [...] 6.3 Sign Command [...]
NORMATIVE [end extracts] |
I may not have understood all the requirements, but from the looks of it, there are some scenarios where user need to authenticate first but can do silent authentication there after for a certain period of time or regularly. Possibly there can be another scenarios where RP do not have a problem having silent signatures all together and they do not need that first user verified/presence required assertion. Another set of scenario can be where RP need the guarantee that every signature requires user presence and/or user verification. This is the current default in terms of user presence requirement and provides assurance to the RP that no malware can get silent signatures from the web. This is the requirement for high value keys. Solution needs to comprehensive for all above requirements although I do not understand scenarios and use cases for it. This is complex and only way I can think of is specifying this behavior for the key at the time of authenticatorMakeCredential and the ability to query this information for the platfrom from the authenticator. Will all that said, silent signatures from web is a super-cookie for us and is very very dangerous and it brings more harm than good for the whole ecosystem where many RP's will try to think it as a feature without understanding the security guarantees of the choices they are making for their keys. Some RP's maybe willingly try to track user on the web with economic and/or other not good intentions. Being able to get silent signatures basically means that user has its device plugged in to the system or is near by. Cross scripting attacks are also very real from browser pages. In my view, its not worth it. |
I also think silent assertions would open up more and worse issues than it solves. I can see a case for a "keep-alive session" kind of mode where a user confirmed assertion can authorize silent assertions for a specific RP for some amount of time thereafter, but I'm opposed to "super cookie" silent assertions as @akshayku puts it. |
Decision: Keep open, but no immediate action. |
To a large extent, this overlaps with token binding. If you do a authentication with the token binding extension you can then token bind a cookie, or otherwise record the token binding ID and check the header on subsequent requests. I understand that token binding is not available on all platforms at the moment. However, I think that is a better way to go than creating a new method of doing super cookies. |
There does not seem to be a clear proposed way to solve the security issues. Need a clear scenario(s) and a PR that we can undestand. |
see also: #1140 (review) |
This might be re-opening an old discussion thread and if that's the case, sorry. I want to point out one use case where silent authentication would be useful: SSH with SK (see https://www.openssh.com/txt/release-8.2) in web. In particular, for enterprises using certificate-based SSH, storing certificates inside security keys is a natural design and can be implemented via the largeBlob extension. However, for security, issuance of SSH certificates should require some attestation of the public key. If the enterprise chooses to use, for example, a Webauthn create call to generate the SSH public key and its attestation, setting up an SSH session requires at least two Webauthn calls. The UX would be confusing. I'm vaguely thinking, if some form of silent authentication is available, we might be able to have a Webauthn-based implementation with much better UX. But of course, the relevant details, especially security implications of any potential changes to CTAP2 for this, need to be carefully crafted. |
Ssh can do silent authentication now as it is supported at the CTAP2 level. ssh has the option to create credentials at credprotect level 3 to prevent them from being used without UV. I and I expect others would be against exposing that at the WebAuthn level. Nothing stops someone from modifying openSSH to allow unattended ssh with credentials from a security key. OpenSSH supports the windows platform authenticator but I don't believe that authenticator exposes silent authentication in the WebAuthn.dll API. Platform authenticators don't directly support CTAP so not all features are supported. |
As Tony and John mentioned on this ticket and as others mention on related tickets you can find herein, this is not something we'd like to expose at the WebAuthn layer. I'd like to close this ticket unless there is any interest in continuing discussion on a worker binding for the spec. |
This might be the wrong place to chime in, I'm sorry if so. A potential value I've been thinking about for being able to create and get credentials from a worker context is that potentially malicious scripts or browser extension content scripts may have access to the window. Such scripts could either trigger a request to get credentials, which may have associated secrets using I may be thinking about this wrong, but being able to make these calls from a worker could be beneficial if such scripts have less access. |
This use case is now being addressed by the Device-bound Session Credentials project (https://github.com/w3c/webappsec-dbsc). |
As I recall, we've verbally discussed the question of whether the WebAuthn API ought to be available to {service, web}workers (aka "Workers") but we do not have an issue tracking it as yet AFAICT, so here it is.
The default argument, as I recall, against worker use of WebAuthn is a UX one: authenticators, upon receiving a makeCredential() or getAssertion() call will signal to the user in some fashion, and since workers are asynchronous tasks, this may seem to the user like coming out of the blue and be confusing.
Though, there are a couple of authenticator-behavior notions that do not always involve annunciation to the user (see also [1]):
So, if there are use cases where an RP's webapp wishes to employ workers, say, to do some sort of background processing, and that RP wishes to employ [periodic|asynchronous] getAssertion() requests without user interaction (during some allowed time interval perhaps) to aid assurance of overall session context continuity, being able to employ (1) above may be useful.
[1] See also the "silent authenticator" notion:
from https://fidoalliance.org/specs/fido-uaf-v1.0-ps-20141208/fido-uaf-asm-api-v1.0-ps-20141208.html#security-and-privacy-guidelines:
from https://fidoalliance.org/specs/fido-uaf-v1.0-ps-20141208/fido-uaf-authnr-cmds-v1.0-ps-20141208.html#command-description-1:
The text was updated successfully, but these errors were encountered: