Get a Demo

Let's Patch It!

Book a short call with one our specialists, we'll walk you through how Endor Patches work, and ask you a few questions about your environment (like your primary programming languages and repository management). We'll also send you an email right after you fill out the form, feel free to reply with any questions you have in advance!

CVE

CVE-2026-23519

Non-constant-time code generation on ARM32 targets
Back to all
CVE

CVE-2026-23519

Non-constant-time code generation on ARM32 targets

Summary

While the cmov crate has a special backend for aarch64 which uses special

CSEL instructions, on 32-bit ARM it uses a portable pure Rust fallback

implementation. This implementation uses a combination of bitwise arithmetic

and core::hint::black_box to attempt to coerce constant-time code generation

out of the optimizer, but the implementation in v0.4.3 and earlier failed to

do this on 32-bit ARM targets.

Impact

Branch instructions inserted by the LLVM optimizer on 32-bit targets can be

leveraged using various microarchitectural sidechannels like cache timing

attacks to learn secret information that cmov is designed to protect.

Details

The following assembly was emitted when using Cmov::cmovnz, a function which

implements a conditional move when a provided value is non-zero:

    bne  .LBB0_2
    mvns r3, r3

This includes a branch instruction bne: Branch if Not Equal.

PoC

The following code reproduces the issue:

#![no_std]
use cmov::Cmov;
#[inline(never)]
pub fn test_ct_cmov(a: &mut u8, b: u8, c: u8) {
    a.cmovnz(&b, c);
}

Resolution

cmov v0.4.4 includes a portable black_box-based tactical mitigation for the

issue which coerced the compiler into producing the expected codegen, and

additionally v0.4.5 added an asm! reimplementation of the problematic mask

generation function for ARM32 targets which should guarantee that particular

function never contains a branch on such targets.

Package Versions Affected

Package Version
patch Availability
No items found.

Automatically patch vulnerabilities without upgrading

Fix Without Upgrading
Detect compatible fix
Apply safe remediation
Fix with a single pull request

CVSS Version

Severity
Base Score
CVSS Version
Score Vector
C
H
U
8.9
-
4.0
CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
C
H
U
0
-
C
H
U
-

Related Resources

No items found.

References

https://crates.io/crates/cmov, https://rustsec.org/advisories/RUSTSEC-2026-0003.html, https://github.com/RustCrypto/utils/security/advisories/GHSA-2gqc-6j2q-83qp

Severity

9.8

CVSS Score
0
10

Basic Information

Ecosystem
Base CVSS
9.8
EPSS Probability
0.00022%
EPSS Percentile
0.05499%
Introduced Version
0.0.0-0
Fix Available
0.4.4

Fix Critical Vulnerabilities Instantly

Secure your app without upgrading.
Fix Without Upgrading