Safeguard
Vulnerability Analysis•

CVE-2026-23519: RustCrypto cmov Timing Leak on Cortex M0 Targets

CVE-2026-23519 is a timing flaw in RustCrypto cmov before 0.4.4 on thumbv6m-none-eabi targets. Upgrade cmov to 0.4.4 or later and rebuild firmware.

Safeguard Security Team
3 min read

CVE-2026-23519 is a flaw in the RustCrypto cmov crate, scored 9.8 in the record. On the thumbv6m-none-eabi target, covering Cortex M0, M0+ and M1 chips, the compiler can emit non constant time code for cmovnz. The fixed version is cmov 0.4.4, and affected firmware must be rebuilt.

What's affected

The cmov crate before 0.4.4 is affected, and only when built for thumbv6m-none-eabi, which is the target for Cortex M0, M0+ and M1 microcontrollers. The fix is 0.4.4.

The advisory says its author did not find another target with the same behavior, but also did not check every target Rust supports. So the only confirmed affected build is the Cortex M0 family.

This matters for embedded and firmware developers. A server or desktop build of a project using cmov is not described as affected.

How to check if you're exposed

Find out whether cmov is in your dependency tree and what version it resolves to:

cargo tree -i cmov
cargo tree | grep cmov

Then check your build targets. If you build for thumbv6m-none-eabi, you are in scope. Your Cargo configuration or CI scripts show the target triple. Remember that cmov often arrives through other crates, so use the inverse tree command to see which crate pulls it in.

What to do now

  1. Run cargo update -p cmov to move to 0.4.4 or later, and commit the updated lockfile.
  2. Rebuild and re-flash firmware for every thumbv6m-none-eabi product, since the issue is in compiled output.
  3. If cmov comes in through another crate, update that crate or add a dependency override.
  4. Review which secrets are handled by the affected code paths, to judge whether timing could expose them.

Why it matters

The record lists CWE-203 (Observable Discrepancy) and CWE-208 (Observable Timing Discrepancy). Cryptographic code is meant to take the same time whatever the secret values are. When it does not, an observer who can measure timing may learn something about the secret. The cmov crate exists to provide conditional moves that the compiler cannot turn back into branches.

On this target, an optimization pass spotted a value that could be read as a boolean and turned the masking into a conditional branch. The source code looks fine, which is why this class of bug is hard to see. Only the compiled output shows it. The advisory describes a non constant time result, not remote code execution, and the 9.8 score in the record should be read with that in mind: exposure depends on whether an attacker can measure timing of your device. The record does not mark this CVE as exploited in the wild.

Quick check

Is this a remote code execution bug?

No. The advisory describes non constant time assembly, a side channel weakness.

Do I need to rebuild?

Yes. The problem is in compiled output, so a new build with the fixed crate is needed.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.