CVE Catalog

CVE-2026-32129

High
Published: Translated: NVD NIST

Summary

soroban-poseidon provides Poseidon and Poseidon2 cryptographic hash functions for Soroban smart contracts. Poseidon V1 (PoseidonSponge) accepts variable-length inputs without injective padding. When fewer inputs than the sponge rate are provided, unused rate positions are zero-filled, allowing trivial hash collisions: hash([m1, ..., mk]) equals hash([m1, ..., mk, 0]). This affects any use of PoseidonSponge or poseidon_hash where the number of inputs is less than T - 1. Poseidon2 is not affected.

Risk Assessment

An attacker can create hash collisions, potentially leading to data integrity issues in smart contracts, such as forging proofs or bypassing logic.

Recommendation

Update the soroban-poseidon library to a patched version, or avoid using PoseidonSponge with fewer inputs than T - 1. Consider using Poseidon2.

Related vulnerabilities

Original NVD description (English source)

soroban-poseidon provides Poseidon and Poseidon2 cryptographic hash functions for Soroban smart contracts. Poseidon V1 (PoseidonSponge) accepts variable-length inputs without injective padding. When a caller provides fewer inputs than the sponge rate (inputs.len() < T - 1), unused rate positions are implicitly zero-filled. This allows trivial hash collisions: for any input vector [m1, ..., mk] hashed with a sponge of rate > k, hash([m1, ..., mk]) equals hash([m1, ..., mk, 0]) because both produce identical pre-permutation states. This affects any use of PoseidonSponge or poseidon_hash where the number of inputs is less than T - 1 (e.g., hashing 1 input with T=3). Poseidon2 (Poseidon2Sponge) is not affected.

Vulnerability data from NVD (NIST) · CISA KEV · EPSS