Skip to content

fix(deps): ctutils 0.4.2 -> 0.4.5 for RUSTSEC-2026-0385 - #1155

Merged
cryptskii merged 2 commits into
mainfrom
fix/ctutils-constant-time-advisory
Oct 24, 2026
Merged

cryptskii merged 2 commits into
mainfrom
fix/ctutils-constant-time-advisory

Conversation

@cryptskii

Copy link
Copy Markdown
Collaborator

Why

RUSTSEC-2026-0385: ctutils 0.4.2 generates masks and compares u128 values in non-constant time. Version 0.4.4 fixes it.

ctutils is a transitive dependency: it comes in through digest 0.11 into hmac and pbkdf2, and sat at 0.4.2 in four tracked lockfiles. CI's "Security audit (every tracked Cargo.lock)" step in Rust gates now fails on it for main and every open PR, for example #1151.

What

ctutils 0.4.2 → 0.4.5, the newest version, not yanked. The change is two lines (version and checksum) in each of four lockfiles; nothing else moves.

  • Cargo.lock and dsm_client/deterministic_state_machine/Cargo.lock: updated with cargo update -p ctutils --precise 0.4.5.
  • crates/dsm-anchor-hw-verifier/Cargo.lock and crates/dsm-android-anchor/Cargo.lock: these crates are outside the workspace and resolve a sibling libtropic-rs checkout, which cargo can't reach from a nested worktree. Their ctutils entry was byte-identical, so they received the same two-line change.
  • Dependency compatibility: 0.4.5 still depends only on cmov ^0.5.3, and all four lockfiles hold cmov 0.5.4. CI's "Embedded (no_std + excluded anchor crates)" job builds the two anchor lockfiles with --locked.

Verification

  • bash ci/audit_every_lockfile.sh: 9 lockfiles, no vulnerabilities. Control: main's Cargo.lock still reports RUSTSEC-2026-0385.
  • cargo check --locked --workspace --all-targets: exit 0 in both workspaces.
  • dsm crypto tests: 156 passed, 0 failed (release); key_schedule/identity: 27 passed, 0 failed (release).
  • make lint: exit 0.
  • Not run locally: the full CI board.

🤖 Generated with Claude Code

RUSTSEC-2026-0385: ctutils 0.4.2 generates masks and compares u128 values
in non-constant time; fixed in 0.4.4. ctutils is transitive, through
digest 0.11 into hmac and pbkdf2, and sat at 0.4.2 in four tracked
lockfiles. CI's security-audit step fails on it for main and every PR.

Cargo.lock and dsm_client/deterministic_state_machine/Cargo.lock:
`cargo update -p ctutils --precise 0.4.5`, which changed exactly the
entry's version and checksum. The two workspace-excluded anchor crates
(dsm-anchor-hw-verifier, dsm-android-anchor) cannot resolve their
sibling libtropic-rs checkout from a nested worktree, so their identical
entry got the same two lines; ctutils 0.4.5 needs cmov ^0.5.3, and all
four lockfiles hold cmov 0.5.4.

ci/audit_every_lockfile.sh: 9 lockfiles, no vulnerabilities (main's
Cargo.lock still reports RUSTSEC-2026-0385). cargo check --locked
--workspace --all-targets in both workspaces exit 0; dsm crypto tests
156/0 and key_schedule/identity 27/0 in release; make lint exit 0.
@cryptskii
cryptskii merged commit 98be145 into main Oct 24, 2026
28 of 29 checks passed
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.

1 participant