Skip to content
OpenAdvisories
Medium · 5.3 GHSA-9c8r-76f3-m426 RUSTSEC-2026-0499

Signature::from_der reads a signature with bytes after it, a wrong sequence length or an unneeded zero as the signature

Published Nov 11, 2026 · Updated Nov 12, 2026 · Assigned by RUSTSEC

Description

`Signature::from_der` read a DER-encoded ECDSA signature leniently. It read as
the signature: the signature followed by other bytes; a sequence length
shorter than its contents, or longer with bytes after them (a length byte with
its high bit set among them); and an R or S preceded by a zero byte it did not
need. It read a lone-zero R or S as zero.

`messages::verify`, `compat::bsm::verify_message_der`,
`auth::Certificate::verify`, `auth::VerifiableCertificate::verify`,
`wallet::ProtoWallet::verify_signature` and
`kvstore::KVStoreInterpreter::verify_signature` read through it, and each
verified such a form of a valid signature. Given one signature a key holder
made, anyone could produce other byte strings that verify as that signature
over the same data. No form verifies over other data: an application that acts
on the verdict alone is not affected; one that compares, hashes or stores a
signature's bytes is.

0.8.6 refuses each form as `Error::InvalidSignature`. A signature's bytes are
still not unique after the patch: the same signature with S replaced by n - S
verifies, so an application that keys on the bytes also requires
`Signature::is_low_s()`.

Affected packages

EcosystemPackageAffectedFixedRecord
crates.io bsv-rs >= 0.0.0-0, < 0.8.6 · >= 0.9.0-beta.1, < 0.9.0-beta.7.0 0.8.6, 0.9.0-beta.7.0 RUSTSEC-2026-0499

References