Listen to this Post
How the Vulnerability Works
A malicious network peer can craft a Kademlia DHT record containing a `TaggedSignedTaggedSigned::verify, execution reaches `Ed25519Signature::from_bytes(sig).unwrap()` in the `TaggedPublicKey` implementation for Ed25519PublicKey. The `from_bytes` call fails because `ed25519_zebra::Signature::try_from` rejects slices of any length other than 64 bytes, and the subsequent `unwrap()` panics. This crash halts the validator node, causing a denial-of-service.
The attack requires no privileges or user interaction, can be executed over the network with low complexity, and works against any Nimiq full node running an affected version (prior to v1.4.0). The vulnerability exists only in the Ed25519 path; the BLS `TaggedPublicKey` implementation correctly returns `false` on error instead of panicking.
DailyCVE Form
Platform: `Nimiq`
Version: `< 1.4.0`
Vulnerability : `Panic on invalid signature length`
Severity: `High`
date: `2026-04-22`
Prediction: `Already patched v1.4.0`
What Undercode Say: Analytics
Bash Commands to Check Your Version
Check the version of your Nimiq node nimiq-client --version If using Docker, inspect the image label docker inspect $(docker ps -q --filter "name=nimiq") | grep -i "version"
Code Snippet – Vulnerable Implementation (Pre‑1.4.0)
// Vulnerable: unwrap() on invalid signature length
impl TaggedPublicKey for Ed25519PublicKey {
fn verify(&self, data: &[bash], sig: &[bash]) -> bool {
let sig = Ed25519Signature::from_bytes(sig).unwrap(); // Panics if length != 64
self.verify(data, &sig)
}
}
Patched Implementation (v1.4.0)
// Safe: returns false on invalid length instead of panicking
impl TaggedPublicKey for Ed25519PublicKey {
fn verify(&self, data: &[bash], sig: &[bash]) -> bool {
let Ok(sig) = Ed25519Signature::try_from(sig) else {
return false;
};
self.verify(data, &sig)
}
}
Quick Patch Verification
Verify that the fix PR 3708 is included in your build git clone https://github.com/nimiq/core-rs-albatross cd core-rs-albatross git log --oneline | grep "Fix TaggedPublicKey::verify panic"
Exploit
An attacker only needs to publish a single crafted Kademlia DHT record where the signature field is not 64 bytes (e.g., 63 or 65 bytes). The message can be broadcast to the network without any prior authentication. Any Nimiq node that receives this record and attempts to verify it will crash immediately, as the `unwrap()` on `Ed25519Signature::from_bytes` triggers a panic.
Attack Vector: Network
Complexity: Low
Privileges Required: None
User Interaction: None
Protection from this CVE
- Upgrade to Nimiq v1.4.0 or later – The patch is officially included in this release.
2. If you cannot upgrade immediately, consider:
- Blocking inbound DHT messages from untrusted peers (firewall).
- Running nodes behind a reverse proxy that filters malformed messages.
- Monitoring node logs for repeated crashes and banning offending IPs.
- No known workarounds – the vulnerability is fixed only by applying the patch.
Impact
- Denial of Service: Any node receiving the crafted record will panic and crash, disrupting network availability.
- Ease of Exploitation: The attack requires no privileges, no user interaction, and can be executed remotely with low complexity.
- Scope: All Nimiq full nodes running versions prior to 1.4.0 are vulnerable.
- Confidentiality/Integrity: Not directly affected; the impact is purely on availability.
🎯Let’s Practice Exploiting & Learn Patching For Free:
Sources:
Reported By: github.com
Extra Source Hub:
Undercode

