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

fix(RUSTSEC-2024-0344): vulnerability in curve25519-dalek #254

Merged
merged 1 commit into from
Jun 19, 2024

Conversation

Manuthor
Copy link
Contributor

@Manuthor Manuthor commented Jun 19, 2024

error[vulnerability]: Timing variability in `curve25519-dalek`'s `Scalar29::sub`/`Scalar52::sub`
    ┌─ /github/workspace/Cargo.lock:132:1
    │
132 │ curve25519-dalek 4.1.1 registry+https://github.com/rust-lang/crates.io-index
    │ ---------------------------------------------------------------------------- security vulnerability detected
    │
    = ID: RUSTSEC-2024-0344
    = Advisory: https://rustsec.org/advisories/RUSTSEC-2024-0344
    = Timing variability of any kind is problematic when working with  potentially secret values such as
      elliptic curve scalars, and such issues can potentially leak private keys and other secrets. Such a
      problem was recently discovered in `curve25519-dalek`.
      
      The `Scalar29::sub` (32-bit) and `Scalar52::sub` (64-bit) functions contained usage of a mask value
      inside a loop where LLVM saw an opportunity to insert a branch instruction (`jns` on x86) to
      conditionally bypass this code section when the mask value is set to zero as can be seen in godbolt:
      
      - 32-bit (see L106): <https://godbolt.org/z/zvaWxzvqv>
      - 64-bit (see L48): <https://godbolt.org/z/PczYj7Pda>
      
      A similar problem was recently discovered in the Kyber reference implementation:
      
      <https://groups.google.com/a/list.nist.gov/g/pqc-forum/c/hqbtIGFKIpU/m/cnE3pbueBgAJ>
      
      As discussed on that thread, one portable solution, which is also used in this PR, is to introduce a
      volatile read as an optimization barrier, which prevents the compiler from optimizing it away.
      
      The fix can be validated in godbolt here:
      
      - 32-bit: <https://godbolt.org/z/jc9j7eb8E>
      - 64-bit: <https://godbolt.org/z/x8d46Yfah>
      
      The problem was discovered and the solution independently verified by 
      Alexander Wagner <alexander.wagner@aisec.fraunhofer.de> and Lea Themint <lea.thiemt@tum.de> using
      their DATA tool:
      
      <https://github.com/Fraunhofer-AISEC/DATA>
    = Announcement: https://github.com/dalek-cryptography/curve25519-dalek/pull/659
    = Solution: Upgrade to >=4.1.3 (try `cargo update -p curve25519-dalek`)
  • Update curve25519-dalek from 4.1.1 to 4.1.3
  • must update toolchain (from january to june)
  • make clippy happy since new warnings are now generated with the rust-june version

@Manuthor Manuthor changed the title fix: update rust toolchain fix: vulnerability in curve25519-dalek Jun 19, 2024
@Manuthor Manuthor changed the title fix: vulnerability in curve25519-dalek fix(RUSTSEC-2024-0344): vulnerability in curve25519-dalek Jun 19, 2024
@Manuthor Manuthor requested a review from Adamk93 June 19, 2024 09:36
Copy link
Contributor

Choose a reason for hiding this comment

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

Secret is it not anymore Serializable then, right?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

well the ser feature does not exist anymore on the kmip crate

Copy link
Contributor

Choose a reason for hiding this comment

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

I don't know why it loses the lifetime param. but I see that ExtraDatabaseParams does not need it anymore

Copy link
Contributor Author

Choose a reason for hiding this comment

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

the version 1.1.1 of async-recursion does not require anymore the explicit lifetime declaration

Copy link
Contributor

Choose a reason for hiding this comment

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

Similar to the comment done for the destroy

Copy link
Contributor

@Adamk93 Adamk93 left a comment

Choose a reason for hiding this comment

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

I just added few notes, but as far as I got, to me everything seems fine. The code rewriting keeps the semantics of the programs

@Manuthor Manuthor merged commit c28ef19 into develop Jun 19, 2024
34 checks passed
@Manuthor Manuthor deleted the rust_toolchain branch June 19, 2024 10:29
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.

2 participants