mirror of
https://github.com/dani-garcia/vaultwarden.git
synced 2026-02-05 00:29:40 +03:00
Not posible to store a YubiKey OTP in the user Account Settings #1437
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @zucht on GitHub (Dec 17, 2022).
Originally assigned to: @BlackDex on GitHub.
Subject of the issue
After following the steps in the Vaultwarden Wiki how to obtain a Client ID and Secret Key at Yubico and setting those values as enviromental variables for the docker container (https://github.com/dani-garcia/vaultwarden/wiki/Enabling-Yubikey-OTP-authentication) I still can't register any YubKey in Vaultwarden. When trying to do so, after touching the gold contact of the YubiKey at one of the YubiKey fields in user account settings, an red error notification is given:
Invalid YubiKey OTP provided.
Tested it with multiple YubiKey Keys (2x YubiKey 5 NFC and 2x YubiKey 5C NFC)
The error is also logged in the logfile:
The YubiKey OTP DEMO site validates all my keys successful:
I've found the given error in the source code of yubikey.rs at an if/then statement at line 150. The statement looks to accept a string of which the total length is only 12 characters long, while in fact a YubiKey is a 44 character long string where the first 12 characters remain constant (https://developers.yubico.com/OTP/OTPs_Explained.html).
If I for testing purposes only enter the first 12 characters of my YubiKey in the field, the value is stored at the settings. Only this will cause YubiKey 2FA login for Vaultwarden to always fail.
Deployment environment
Your environment (Generated via diagnostics page)
Config (Generated via diagnostics page)
Show Running Config
Environment settings which are overridden: DOMAIN, SIGNUPS_ALLOWED, SHOW_PASSWORD_HINT, ADMIN_TOKEN, IP_HEADER, YUBICO_CLIENT_ID, YUBICO_SECRET_KEY, SMTP_HOST, SMTP_SECURITY, SMTP_PORT, SMTP_FROM, SMTP_FROM_NAME, SMTP_USERNAME, SMTP_PASSWORD
Steps to reproduce
Expected behaviour
Posible to store the YubiKey's as 2FA for Vaultwarden at the user account settings by just touching the gold contact.
Actual behaviour
Not posible to use YubiKey as MFA in Vaultwarden.
Troubleshooting data
@BlackDex commented on GitHub (Dec 17, 2022):
Did you also tried Webauthn? And what are the results if you try that method?
If i understand you correctly, the key sent is larger then the 12 we currently expect, and that is because it is sending the full key and not only the identifier right?
Have you tried using an other browser or client?
Could you maybe also try if the
testingtagged release makes any difference?@zucht commented on GitHub (Dec 18, 2022):
With the exception of NFC WebAuthn works for the YubiKeys.
You are right. The first 12 characters are the Public Key of the YubiKey where the last 32 characters are a unique passcode and a counter. The way described how to register a YubiKey is the way it works in Bitwarden if you have a Premium subscription.
I've tested several browsers all with the same outcome (Opera, Firefox and Chrome).
The testing tag doesn't change the behaviour or error's in the log.
@Blacks-Army commented on GitHub (Dec 18, 2022):
Change your DNS Server to Cloudflares or something else (On your Hosting Server), just don't use your local one like Adguard Home or PiHole. Had the same Problem that solved it for me!
@zucht commented on GitHub (Dec 18, 2022):
No funky DNS adguard/blocking on my hosted VPS, thanks anyway for your suggestion. Anyhow this give me some food for thought and in the mean time I'm started to setup another test VPS.
@BlackDex commented on GitHub (Dec 18, 2022):
@zucht, could you tell me if there are panics in the logs during the register of the code.
Or, when you register the key with only the identifier (12 chars), and later try to login using that?
Because, i think i have found the culprit here by using a fake (software based) yubikey which also doesn't work.
Update:
I just tested it with the current
latestrelease, and it isn't an issue there. I can use my fake yubikey just fine, during register and login. The issue i encountered seems to be something with an updated library i think.@BlackDex commented on GitHub (Dec 18, 2022):
I just tested it some more, but it does seem to work for me just fine.
Are you sure you have followed the correct way to register your key?
https://github.com/dani-garcia/vaultwarden/wiki/Enabling-Yubikey-OTP-authentication
First register your key here: https://upload.yubico.com/
And afterwards generate the correct id/key for using the API via here https://upgrade.yubico.com/getapikey/ ?
That seems to work just fine for me.
@monkeybape commented on GitHub (Dec 19, 2022):
same problem
@BlackDex commented on GitHub (Dec 19, 2022):
@monkeybape , could you test with the
testingtagged release please?And enable at least
LOG_LEVEL=debugand try again.Also, make sure everything is fine according to the
/admin/diagnosticspage like domain, time etc...We would like to have the logs from the point you press the submit button to add a new key.
Same btw for @zucht .
There are some changes in the current
testingtagged version (released yesterday) which might help, but not sure.@zucht commented on GitHub (Dec 19, 2022):
Hi @BlackDex
I did all your suggested steps but without success.
Just to be sure, before starting these steps, I've even reset the OTP field of one of my spare YubiKey's with the YubiKey Personalisation Tool. This also means I've uploaded the newly generated OTP to Yubico and generated a new API Client ID and Secret Key with the use of this new OTP.
These variables are used in the test Vaultwarden
testingbranch setup where debug logging is enabled.No panics in the log whatsoever. I can save the OTP in Vaultwarden if I only enter the Public Key (so the first 12 characters). Unfortunately when logging back in at a separate incognito screen the YubiKey OTP isn't accepted when pressing the contact of the key.
Before uploading the log I need to sanitize it by redacting some personal/private information. I will upload it ASAP, please bear with me!
Some timestamps (CET) in advance:
[2022-12-19 19:30:08.973] - Trying to store a YubiKey by pressing the contact.
[2022-12-19 19:30:44.346] - Storing only the Public Key (first 12 characters) of YubiKey.
[2022-12-19 19:31:10.103] - 2FA Login failed with stored Public Key.
Your environment (Generated via diagnostics page)
Config (Generated via diagnostics page)
Show Running Config
Environment settings which are overridden:
@BlackDex commented on GitHub (Dec 19, 2022):
@zucht this looks like a DNS issue to me.
Could you provide the logs from the moment the call comes in?
It should also generate dns logs during that call.
All this btw using the full key, not just the 12 first chars.
@BlackDex commented on GitHub (Dec 20, 2022):
@zucht @monkeybape, I'm not able reproduce this at all.
I tried breaking the DNS, that resulted in other errors.
The only way I'm able to break this which kinda looks like this, is providing a wrong
YUBICO_CLIENT_ID.Please be sure to provide the correct
YUBICO_CLIENT_IDand correspondingYUBICO_SECRET_KEYwhich are provided after filling in the form here: https://upgrade.yubico.com/getapikey/Also, if this still happens, we need some logs. I'm just not able to reproduce this in any way.
@zucht commented on GitHub (Dec 24, 2022):
@BlackDex:
I test diffrent generated
YUBICO_CLIENT_ID, diffrent VPS (Google and Oracle) and setup my docker-compose.yml with and without the DNS option that pointed to Cloudflare/Google DNS. All without success.Here is a pastebin: https://privatebin.net/?05e023830f09617c#Cr57YnPYh87tednNsB9upDKpFcFqqubDfKkYRT9xP2AK
@BlackDex commented on GitHub (Dec 24, 2022):
Looking at this error, and your support string, I think i know the issue.
You seem to have
yubico_serverconfigured, although it's an empty string, it is defined, and now that empty string is used as an url to contact yubico. Try to remove/unset that variable and check again.Also, in the support string it should say
nullas a valueWe do need to catch these items, because that variable should be a valid url of course.
@zucht commented on GitHub (Dec 24, 2022):
Thanks @BlackDex, removing
YUBICO_SERVERdid fix the issue!@BlackDex commented on GitHub (Dec 24, 2022):
Cool. Good to know. I'll leave this ticket open so we will be reminded to fix/check that parameter to be a valid URI.
@Shurov commented on GitHub (Jun 5, 2023):
I had it non-empty - it was filled with mydomain, as per instructions, so instructions are a bit misleading (mydomain vs yubico servers). Removing the whole env_var helped though