Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions gems/devise-two-factor/CVE-2024-8796.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
gem: devise-two-factor
cve: 2024-8796
ghsa: qjxf-mc72-wjr2
url: https://github.com/devise-two-factor/devise-two-factor/security/advisories/GHSA-qjxf-mc72-wjr2
title: Devise-Two-Factor Authentication Uses Insufficient Default
OTP Shared Secret Length
date: 2024-09-17
description: |
### Summary
Under the default configuration, Devise-Two-Factor version
>= 2.2.0 & < 6.0.0 generate TOTP shared secrets that are 120 bits
instead of the 128-bit minimum defined by
[RFC 4226](https://datatracker.ietf.org/doc/html/rfc4226).
Using a shared secret shorter than the minimum to generate a
multi-factor authentication code could make it easier for an
attacker to guess the shared secret and generate valid TOTP codes.

### Remediation
Devise-Two-Factor should be upgraded to version v6.0.0 as soon
as possible. After upgrading, the length of shared secrets and
TOTP URLs generated by the library will increase since the new
shared secrets will be longer.

If upgrading is not possible, you can override the default
`otp_secret_length` attribute in the model when configuring
`two_factor_authenticable` and set it to a value of at least
26 to ensure newly generated shared secrets are at least
128-bits long.

After upgrading or implementing the workaround, applications
using Devise-Two-Factor may wish to migrate users to the new
OTP length to provide increased protection for those accounts.
Turning off OTP for users by setting `otp_required_for_login`
to false is not recommended since it would leave accounts
unprotected. However, you may wish to implement application
logic that checks the length of a user's shared secret and
prompts users to re-enroll in OTP.

### Background
Devise-Two-Factor uses [ROTP](https://github.com/mdp/rotp) to
generate shared secrets for TOTP. In ROTP < 5.0.0, the first
argument to the "ROTP::Base32#random_base32" function represented
the number of bytes to read from SecureRandom which were then
returned as a base32-encoded string. In ROTP 5.1.0, this function
was changed so that the first argument now represents the length
of the base32-encoded string returned by the function instead
of the number of bytes to read from SecureRandom resulting in
a shorter key being generated for the same input value.
(https://github.com/mdp/rotp/commit/c6c24ab894e7c2b1579d45ac82c41454d1e98227).
cvss_v3: 5.3
cvss_v4: 6.0
unaffected_versions:
- "< 2.2.0"
patched_versions:
- ">= 6.0.0"
related:
url:
- https://nvd.nist.gov/vuln/detail/CVE-2024-8796
- https://github.com/devise-two-factor/devise-two-factor/security/advisories/GHSA-qjxf-mc72-wjr2
- https://github.com/devise-two-factor/devise-two-factor/commit/cc6f34423d9c6af9f3e02be478c3c40dc7462e19
- https://github.com/advisories/GHSA-qjxf-mc72-wjr2
Loading