Skip to content
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

Admin token Argon2 hashing support #3289

Merged
merged 1 commit into from Mar 6, 2023

Conversation

BlackDex
Copy link
Collaborator

@BlackDex BlackDex commented Feb 28, 2023

Added support for Argon2 hashing support for the ADMIN_TOKEN instead of only supporting a plain text string.

The hash must be a PHC string which can be generated via the argon2 CLI or via the also built-in hash command in Vaultwarden.

You can simply run vaultwarden hash to generate a hash based upon a password the user provides them self.

Added a warning during startup and within the admin settings panel is the ADMIN_TOKEN is not an Argon2 hash.

Within the admin environment a user can ignore that warning and it will not be shown for at least 30 days. After that the warning will appear again unless the ADMIN_TOKEN has be converted to an Argon2 hash.

I have also tested this on my RaspberryPi 2b and there the Bitwarden preset takes almost 4.5 seconds to generate/verify the Argon2 hash.

Using the OWASP preset it is below 1 second, which I think should be fine for low-graded hardware.
If it is needed people could use lower memory settings, but in those cases I even doubt Vaultwarden it self would run.
They can always use the argon2 CLI and generate a faster hash.

Examples

ADMIN_TOKEN='$argon2i$v=19$m=4096,t=3,p=1$Saf.....'
ADMIN_TOKEN='$argon2d$v=19$m=4096,t=3,p=1$drh.....'
ADMIN_TOKEN='$argon2id$v=19$m=4096,t=3,p=1$ds.....'

I also created some documentation on the wiki regarding this feature already.
https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page#secure-the-admin_token

src/api/admin.rs Outdated Show resolved Hide resolved
@dani-garcia
Copy link
Owner

Is there a particular reason to support both SHA512 and argon? We don't need to keep backwards compatibility here so we can just force the more secure hashing algorithm.

Should we add some tool, either in the CLI or the admin page to generate these hashes? Or are we just going to instruct the users to do sudo apt install argon2; argon2 <your_password>?

@BlackDex
Copy link
Collaborator Author

Is there a particular reason to support both SHA512 and argon? We don't need to keep backwards compatibility here so we can just force the more secure hashing algorithm.

Should we add some tool, either in the CLI or the admin page to generate these hashes? Or are we just going to instruct the users to do sudo apt install argon2; argon2 <your_password>?

That is actually why i added the scrypt sha512. That can be done by openssl for example. Though it doesn't support custom iterations, while mkpasswd does.

OWASP says argon2 first, then scrypt, even before pbkdf2.

An other reasons is, that i don't know the impact of Argon2 on low grade hardware. While sha512 would be faster in those cases, and maybe less memory.

I don't want to add any extra binaries and dependencies into the container it self.

I was thinking about providing a cli option into Vaultwarden it self to generate a hash maybe. That shouldn't be to hard, and it's built-in without extra binaries, and should work on all environment's i think.

@JCBird1012
Copy link
Contributor

JCBird1012 commented Feb 28, 2023

If the server is to be expected to validate hashes and run Argon2 itself, I’d be mindful that some users run Vaultwarden in memory constrained environments (e.g. Raspberry Pis) - I’d say keeping SHA512 around for those users who may not have much memory leeway to run Argon2 is a good idea.

Above comment beat me by a minute.

@jjlin
Copy link
Contributor

jjlin commented Feb 28, 2023

That is actually why i added the scrypt sha512. That can be done by openssl for example. Though it doesn't support custom iterations, while mkpasswd does.

OWASP says argon2 first, then scrypt, even before pbkdf2.

BTW, scrypt and "SHA-crypt" aren't the same thing, or even similar. scrypt is more comparable to Argon2, while "SHA-crypt" is comparable to the original/ancient Unix crypt algorithm (basically just replacing DES or MD5 with newer hash algorithms from the SHA family).

@BlackDex
Copy link
Collaborator Author

That is actually why i added the scrypt sha512. That can be done by openssl for example. Though it doesn't support custom iterations, while mkpasswd does.
OWASP says argon2 first, then scrypt, even before pbkdf2.

BTW, scrypt and "SHA-crypt" aren't the same thing, or even similar. scrypt is more comparable to Argon2, while "SHA-crypt" is comparable to the original/ancient Unix crypt algorithm (basically just replacing DES or MD5 with newer hash algorithms from the SHA family).

I think most, if not all Linux distros today use scrypt sha512 with the default 5000 rounds.

@jjlin
Copy link
Contributor

jjlin commented Feb 28, 2023

I'm just trying to clarify that what you're calling "scrypt sha512" is not at all related to the scrypt that's recommended by OWASP.

From https://manpages.debian.org/unstable/libcrypt-dev/crypt.5.en.html, $6$ is sha512crypt (based on the old Unix crypt algorithm), and $7$ is scrypt (relatively recent design by Colin Percival).

@tessus
Copy link
Contributor

tessus commented Mar 1, 2023

I think most, if not all Linux distros today use scrypt sha512 with the default 5000 rounds.

Or yescrypt which is built upon scrypt and can do both algorithms.

@BlackDex
Copy link
Collaborator Author

BlackDex commented Mar 1, 2023

I'm just trying to clarify that what you're calling "scrypt sha512" is not at all related to the scrypt that's recommended by OWASP.

From https://manpages.debian.org/unstable/libcrypt-dev/crypt.5.en.html, $6$ is sha512crypt (based on the old Unix crypt algorithm), and $7$ is scrypt (relatively recent design by Colin Percival).

Sorry, you are right.
Those are not related in any way indeed.

Still, to generate a sha512crypt with already installed tools on the OS is more likely then scrypt or yescrypt for example.

@stefan0xC
Copy link
Contributor

I was thinking about providing a cli option into Vaultwarden it self to generate a hash maybe. That shouldn't be to hard, and it's built-in without extra binaries, and should work on all environment's i think.

Something like

diff --git a/src/main.rs b/src/main.rs
index cd17a2f5..f03d6f25 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -141,6 +141,17 @@ fn parse_args() {
     } else if pargs.contains(["-v", "--version"]) {
         println!("vaultwarden {version}");
         exit(0);
+    } else if let Ok(Some(p)) = pargs.opt_value_from_str::<&str, String>("--password") {
+        use argon2::{
+            password_hash::{rand_core::OsRng, SaltString},
+            PasswordHasher,
+        };
+        let salt = SaltString::generate(&mut OsRng);
+        let argon2 = argon2::Argon2::default();
+        if let Ok(password_hash) = argon2.hash_password(p.as_bytes(), &salt) {
+            println!("{password_hash}");
+        }
+        exit(0);
     }
 }

Then we would not need a dependency on sha-crypt? And users don't have to install argon2 (unless they want to mess with the default parameters).

Also we might want to consider deprecating (or removing) support for ADMIN_TOKEN in plain text so we don't store unhashed passwords.

@BlackDex
Copy link
Collaborator Author

BlackDex commented Mar 1, 2023

Then we would not need a dependency on sha-crypt? And users don't have to install argon2 (unless they want to mess with the default parameters).

The sha-crypt is there because I know a lot of systems support generating these kind of PHC tokens out-of-the-box.
And for very low-grade hardware where Argon2 might be to much maybe.
This is also for stuff like automated deployments etc... Also, it is way better then the current plain/text we support right now.

Maybe adding PBKDF2 is also an option, because that is what we currently use already to hash the master-password-hash we receive from the Bitwarden clients. But as far as i can tell, there arn't any out-of-the-box tools to generate a PHC string for this. So that would mean we need to build that in into Vaultwarden to generate, and hence does not provide the easy tools as for sha512crypt

Adding the CLI option is nice if you already have Vaultwarden running or you can use docker run.
But if you want to prepare a PHC string upfront, a tool like openssl passwd or mkpasswd can be used.
For example, mkpasswd on Ubuntu 20.04 only supports sha512crypt as the most secure method.

Also we might want to consider deprecating (or removing) support for ADMIN_TOKEN in plain text so we don't store unhashed passwords.

I think it is too soon for deprecating/removing this since we have had this for a long time already. Removing this would break a lot of environments. We could however notify the users that they have a plain/text ADMIN_TOKEN and provide some documentation on how to generate a new one.

In the future it might be a nice thing to play with WASM and provide a way to generate this within the admin interface without sending the password plain/text (besides HTTPS) to the server for example to generate the PHC string.

@stefan0xC
Copy link
Contributor

stefan0xC commented Mar 1, 2023

And for very low-grade hardware where Argon2 might be to much maybe.

Can the argon2 crate detect if a given hash does not meet it's runtime requirements? If so we should probably check that when parsing the config?

Adding such a check would make sense anyway so someone with an existing token that happens to start with $6$ will not be surprised either.

We could however notify the users that they have a plain/text ADMIN_TOKEN and provide some documentation on how to generate a new one.

Adding such a deprecation notice (in the Some(t) => case) to discourage the users is what I meant by deprecating.
edit: but it might make more sense to add such a notice when parsing the config.

In the future it might be a nice thing to play with WASM and provide a way to generate this within the admin interface without sending the password plain/text (besides HTTPS) to the server for example to generate the PHC string.

Good idea. Once we add support for hashed password's setting a password via the admin panel should probably not save the password in plaintext either.

@tessus
Copy link
Contributor

tessus commented Mar 1, 2023

Adding such a check would make sense anyway so someone with an existing token that happens to start with $6$ will not be surprised either.

$6$ is sha512

afaik the Linux hashing (sorry this is a misnomer, I rather meant the hash codes used in Linux/Unix) does not have a number or letter assigned for argon. The options in login.defs are MD5, SHA256, SHA512, BCRYPT, YESCRYPT, DES. The default on Fedora is yescrypt ($y$), the default on Debian is sha512 ($6$) and yescrypt is not yet available in Debian.

@BlackDex
Copy link
Collaborator Author

BlackDex commented Mar 1, 2023

Before everything goes on and on regarding the hashing type to be selected.
I have thought about this a bit more and spoken with @dani-garcia about it, and we decided to not add sha512crypt, and just use Argon2. I will create an extra flag for Vaultwarden to be able to generate an acceptable hash.

@tessus
Copy link
Contributor

tessus commented Mar 1, 2023

In the future it might be a nice thing to play with WASM

I think the webclient uses WASM for argon. Should be possible to use as a template.

@stefan0xC
Copy link
Contributor

stefan0xC commented Mar 1, 2023

Adding such a check would make sense anyway so someone with an existing token that happens to start with 6 will not be surprised either.

$6$ is sha512

A bit moot now but just to clarify: I was talking about the hypothetical case if my ADMIN_TOKEN would happen to be $6$abc123 then the suggested change would make the admin interface inaccessible because the check would run sha_crypt::sha512_check(token.trim(), t.trim()).is_ok(), which would presumably always fail.

@BlackDex BlackDex force-pushed the admin-token-hash-support branch 3 times, most recently from 3eec055 to c6d9591 Compare March 2, 2023 18:17
@BlackDex
Copy link
Collaborator Author

BlackDex commented Mar 2, 2023

I Think it should be almost finished. Want to do some testing on low-grade hardware.

Please provide your comments on the current state 😄 .

@tessus
Copy link
Contributor

tessus commented Mar 2, 2023

Generate an Argon2id PHC string using the 'bitwarden' preset:

Password:
Verifying - Password:
Passwords do not match

I would add a newline between Verifying and Passwords do not match.

Generate an Argon2id PHC string using the 'bitwarden' preset:

Password:
Verifying - Password:

ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$fOB3HJ7sDhWviGHa8/HkpxFXEmtkdtHRLh68ZyiRs6k$nq5B623SF5uGqYU0LzvaJ7ybsH2RBSclxZbQb3BmW64'

Generation of the Argon2id PHC string took: 186.600603ms

I'd remove the last empty line, after Generation of ...

@tessus
Copy link
Contributor

tessus commented Mar 2, 2023

Not sure, if this is necessary, but would it make sense to add a warning in the admin interface, if the token is not hashed?

src/api/admin.rs Outdated Show resolved Hide resolved
src/main.rs Outdated Show resolved Hide resolved
src/main.rs Outdated Show resolved Hide resolved
src/main.rs Outdated Show resolved Hide resolved
@BlackDex BlackDex marked this pull request as ready for review March 3, 2023 15:54
@BlackDex BlackDex changed the title WIP: Admin token hash support Admin token Argon2 hashing support Mar 3, 2023
@BlackDex
Copy link
Collaborator Author

BlackDex commented Mar 3, 2023

Thanks for all the comments and suggestions.
Please take a look again, thanks!

@tessus
Copy link
Contributor

tessus commented Mar 3, 2023

Once last thing. ;-) Now there should be an empty line between the hash and the info message (makes it more legible and easier to copy and paste):

Generate an Argon2id PHC string using the 'bitwarden' preset:

Password:
Confirm Password:

ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$b1oYgp3jGHSD56xmm40PVdOT9VhZ0ds8OJ1FuJ/vfMg$/aFZBQ6Edqyi/wjklGP/TW6REAfjwWKu5c0XbP6PHiQ'
Generation of the Argon2id PHC string took: 173.168728ms

should be:

Generate an Argon2id PHC string using the 'bitwarden' preset:

Password:
Confirm Password:

ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$b1oYgp3jGHSD56xmm40PVdOT9VhZ0ds8OJ1FuJ/vfMg$/aFZBQ6Edqyi/wjklGP/TW6REAfjwWKu5c0XbP6PHiQ'

Generation of the Argon2id PHC string took: 173.168728ms

The empty line after Generation of ... was removed so that is great. 👍

Thanks for also fixing the other one I mentioned (password mismatch).

src/main.rs Outdated Show resolved Hide resolved
Added support for Argon2 hashing support for the `ADMIN_TOKEN` instead
of only supporting a plain text string.

The hash must be a PHC string which can be generated via the `argon2`
CLI **or** via the also built-in hash command in Vaultwarden.

You can simply run `vaultwarden hash` to generate a hash based upon a
password the user provides them self.

Added a warning during startup and within the admin settings panel is
the `ADMIN_TOKEN` is not an Argon2 hash.

Within the admin environment a user can ignore that warning and it will
not be shown for at least 30 days. After that the warning will appear
again unless the `ADMIN_TOKEN` has be converted to an Argon2 hash.

I have also tested this on my RaspberryPi 2b and there the `Bitwarden`
preset takes almost 4.5 seconds to generate/verify the Argon2 hash.

Using the `OWASP` preset it is below 1 second, which I think should be
fine for low-graded hardware. If it is needed people could use lower
memory settings, but in those cases I even doubt Vaultwarden it self
would run. They can always use the `argon2` CLI and generate a faster hash.
Copy link
Contributor

@tessus tessus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works great. And thanks for the changes.

@dani-garcia dani-garcia merged commit 97ffd17 into dani-garcia:main Mar 6, 2023
3 checks passed
@BlackDex BlackDex deleted the admin-token-hash-support branch March 7, 2023 11:06
RickCoxDev pushed a commit to RickCoxDev/home-cluster that referenced this pull request May 25, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [vaultwarden/server](https://togithub.com/dani-garcia/vaultwarden) |
minor | `1.27.0` -> `1.28.1` |

---

### Release Notes

<details>
<summary>dani-garcia/vaultwarden</summary>

###
[`v1.28.1`](https://togithub.com/dani-garcia/vaultwarden/releases/tag/1.28.1)

[Compare
Source](https://togithub.com/dani-garcia/vaultwarden/compare/1.28.0...1.28.1)

#### What's Changed

- Decode knowndevice `X-Request-Email` as base64url with no padding by
[@&#8203;jjlin](https://togithub.com/jjlin) in
[dani-garcia/vaultwarden#3376
- Fix abort on password reset mail error by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3390
- support `/users/<uuid>/invite/resend` admin api by
[@&#8203;nikolaevn](https://togithub.com/nikolaevn) in
[dani-garcia/vaultwarden#3397
- always return KdfMemory and KdfParallelism by
[@&#8203;stefan0xC](https://togithub.com/stefan0xC) in
[dani-garcia/vaultwarden#3398
- Fix sending out multiple websocket notifications by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3405
- Revert setcap, update rust and crates by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3403

#### New Contributors

- [@&#8203;nikolaevn](https://togithub.com/nikolaevn) made their first
contribution in
[dani-garcia/vaultwarden#3397

**Full Changelog**:
dani-garcia/vaultwarden@1.28.0...1.28.1

###
[`v1.28.0`](https://togithub.com/dani-garcia/vaultwarden/releases/tag/1.28.0)

[Compare
Source](https://togithub.com/dani-garcia/vaultwarden/compare/1.27.0...1.28.0)

#### Major changes

- The project has changed license to the
[**AGPLv3**](https://togithub.com/dani-garcia/vaultwarden/blob/main/LICENSE.txt).
If you're hosting a Vaultwarden instance, you now have a requirement to
distribute the Vaultwarden source code to your users if they request it.
The source code, and any changes you have made, need to be under the
same AGPLv3 license. If you simply use our code without modifications,
just pointing them to this repository is enough.
- Added support for **Argon2** key derivation on the clients. To enable
it for your account, make sure all your clients are using version
v2023.2.0 or greater, then go to account settings > security > keys, and
change the algorithm from PBKDF2 to Argon2id.
- Added support for **Argon2** key derivation for the admin page token.
To update your admin token to use it, [check the
wiki](https://togithub.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page#secure-the-admin_token)
- New **alternative registries** for the docker images are available (In
**BETA** for now):
- **Github Container Registry**: https://ghcr.io/dani-garcia/vaultwarden
    -   **Quay**: https://quay.io/vaultwarden/server

#### What's Changed

- Remove patched multer-rs by
[@&#8203;manofthepeace](https://togithub.com/manofthepeace) in
[dani-garcia/vaultwarden#2968
- Removed unsafe-inline JS from CSP and other fixes by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3058
- Validate YUBICO_SERVER string
([#&#8203;3003](https://togithub.com/dani-garcia/vaultwarden/issues/3003))
by [@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3059
- Log message to stderr if LOG_FILE is not writable by
[@&#8203;pjsier](https://togithub.com/pjsier) in
[dani-garcia/vaultwarden#3061
- Update WebSocket Notifications by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3076
- Optimize config loading messages by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3092
- Percent-encode org_name in links by
[@&#8203;am97](https://togithub.com/am97) in
[dani-garcia/vaultwarden#3093
- Fix failing large note imports by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3087
- Change `text/plain` API responses to `application/json` by
[@&#8203;jjlin](https://togithub.com/jjlin) in
[dani-garcia/vaultwarden#3124
- Remove `shrink-to-fit=no` from viewport-meta-tag by
[@&#8203;redwerkz](https://togithub.com/redwerkz) in
[dani-garcia/vaultwarden#3126
- Update dependencies and MSRV by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3128
- Resolve uninlined_format_args clippy warnings by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3065
- Update Rust to v1.66.1 to patch CVE by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3136
- Fix remaining inline format by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3130
- Use more modern meta tag for charset encoding by
[@&#8203;redwerkz](https://togithub.com/redwerkz) in
[dani-garcia/vaultwarden#3131
- fix (2fa.directory): Allow api.2fa.directory, and remove 2fa.directory
by [@&#8203;GeekCornerGH](https://togithub.com/GeekCornerGH) in
[dani-garcia/vaultwarden#3132
- Optimize CipherSyncData for very large vaults by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3133
- Add avatar color support by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3134
- Add MFA icon to org member overview by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3135
- Minor refactoring concering user.setpassword by
[@&#8203;sirux88](https://togithub.com/sirux88) in
[dani-garcia/vaultwarden#3139
- Validate note sizes on key-rotation. by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3157
- Update KDF Configuration and processing by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3163
- Remove `arm32v6`-specific tag by
[@&#8203;jjlin](https://togithub.com/jjlin) in
[dani-garcia/vaultwarden#3164
- Re-License Vaultwarden to AGPLv3 by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#2561
- Admin password reset by
[@&#8203;sirux88](https://togithub.com/sirux88) in
[dani-garcia/vaultwarden#3116
- "Spell-Jacking" mitigation ~ prevent sensitive data leak … by
[@&#8203;dlehammer](https://togithub.com/dlehammer) in
[dani-garcia/vaultwarden#3145
- Allow listening on privileged ports (below 1024) as non-root by
[@&#8203;jjlin](https://togithub.com/jjlin) in
[dani-garcia/vaultwarden#3170
- don't nullify key when editing emergency access by
[@&#8203;stefan0xC](https://togithub.com/stefan0xC) in
[dani-garcia/vaultwarden#3215
- Fix trailing slash not getting removed from domain by
[@&#8203;BlockListed](https://togithub.com/BlockListed) in
[dani-garcia/vaultwarden#3228
- Generate distinct log messages for regex vs. IP blacklisting. by
[@&#8203;kpfleming](https://togithub.com/kpfleming) in
[dani-garcia/vaultwarden#3231
- allow editing/unhiding by group by
[@&#8203;farodin91](https://togithub.com/farodin91) in
[dani-garcia/vaultwarden#3108
- Fix Javascript issue on non sqlite databases by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3167
- add argon2 kdf fields by [@&#8203;tessus](https://togithub.com/tessus)
in
[dani-garcia/vaultwarden#3210
- add support for system mta though sendmail by
[@&#8203;soruh](https://togithub.com/soruh) in
[dani-garcia/vaultwarden#3147
- Updated Rust and crates by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3234
- docs: add build status badge in readme by
[@&#8203;R3DRUN3](https://togithub.com/R3DRUN3) in
[dani-garcia/vaultwarden#3245
- Validate all needed fields for client API login by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3251
- Fix Organization delete when groups are configured by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3252
- Fix Collection Read Only access for groups by
[@&#8203;Misterbabou](https://togithub.com/Misterbabou) in
[dani-garcia/vaultwarden#3254
- Make the admin session lifetime adjustable by
[@&#8203;mittler-works](https://togithub.com/mittler-works) in
[dani-garcia/vaultwarden#3262
- Add function to fetch user by email address by
[@&#8203;mittler-works](https://togithub.com/mittler-works) in
[dani-garcia/vaultwarden#3263
- Fix vault item display in org vault view by
[@&#8203;jjlin](https://togithub.com/jjlin) in
[dani-garcia/vaultwarden#3277
- Add confirmation for removing 2FA and deauthing sessions in admin
panel by [@&#8203;JCBird1012](https://togithub.com/JCBird1012) in
[dani-garcia/vaultwarden#3282
- Some Admin Interface updates by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3288
- Fix the web-vault v2023.2.0 API calls by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3281
- Fix confirmation for removing 2FA and deauthing sessions in admin
panel by [@&#8203;dpinse](https://togithub.com/dpinse) in
[dani-garcia/vaultwarden#3290
- Admin token Argon2 hashing support by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3289
- Add HEAD routes to avoid spurious error messages by
[@&#8203;jjlin](https://togithub.com/jjlin) in
[dani-garcia/vaultwarden#3307
- Fix web-vault Member UI show/edit/save by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3315
- Upd Crates, Rust, MSRV, GHA and remove Backtrace by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3310
- Add support for `/api/devices/knowndevice` with HTTP header params by
[@&#8203;jjlin](https://togithub.com/jjlin) in
[dani-garcia/vaultwarden#3329
- Update Rust, MSRV and Crates by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3348
- Merge ClientIp with Headers. by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3332
- add endpoints to bulk delete collections/groups by
[@&#8203;stefan0xC](https://togithub.com/stefan0xC) in
[dani-garcia/vaultwarden#3354
- Add support for Quay.io and GHCR.io as registries by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3363
- Some small fixes and updates by
[@&#8203;BlackDex](https://togithub.com/BlackDex) in
[dani-garcia/vaultwarden#3366
- Update web vault to v2023.3.0 by
[@&#8203;dani-garcia](https://togithub.com/dani-garcia)

#### New Contributors

- [@&#8203;manofthepeace](https://togithub.com/manofthepeace) made their
first contribution in
[dani-garcia/vaultwarden#2968
- [@&#8203;pjsier](https://togithub.com/pjsier) made their first
contribution in
[dani-garcia/vaultwarden#3061
- [@&#8203;am97](https://togithub.com/am97) made their first
contribution in
[dani-garcia/vaultwarden#3093
- [@&#8203;redwerkz](https://togithub.com/redwerkz) made their first
contribution in
[dani-garcia/vaultwarden#3126
- [@&#8203;sirux88](https://togithub.com/sirux88) made their first
contribution in
[dani-garcia/vaultwarden#3139
- [@&#8203;dlehammer](https://togithub.com/dlehammer) made their first
contribution in
[dani-garcia/vaultwarden#3145
- [@&#8203;BlockListed](https://togithub.com/BlockListed) made their
first contribution in
[dani-garcia/vaultwarden#3228
- [@&#8203;kpfleming](https://togithub.com/kpfleming) made their first
contribution in
[dani-garcia/vaultwarden#3231
- [@&#8203;farodin91](https://togithub.com/farodin91) made their first
contribution in
[dani-garcia/vaultwarden#3108
- [@&#8203;soruh](https://togithub.com/soruh) made their first
contribution in
[dani-garcia/vaultwarden#3147
- [@&#8203;R3DRUN3](https://togithub.com/R3DRUN3) made their first
contribution in
[dani-garcia/vaultwarden#3245
- [@&#8203;Misterbabou](https://togithub.com/Misterbabou) made their
first contribution in
[dani-garcia/vaultwarden#3254
- [@&#8203;mittler-works](https://togithub.com/mittler-works) made their
first contribution in
[dani-garcia/vaultwarden#3262
- [@&#8203;JCBird1012](https://togithub.com/JCBird1012) made their first
contribution in
[dani-garcia/vaultwarden#3282
- [@&#8203;dpinse](https://togithub.com/dpinse) made their first
contribution in
[dani-garcia/vaultwarden#3290

**Full Changelog**:
dani-garcia/vaultwarden@1.27.0...1.28.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "on saturday" (UTC), Automerge - At
any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/RickCoxDev/home-cluster).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS43OS4xIiwidXBkYXRlZEluVmVyIjoiMzUuNzkuMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants