GHSA-g2p6-hh5v-7hfm

Suggest an improvement
Source
https://github.com/advisories/GHSA-g2p6-hh5v-7hfm
Import Source
https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/03/GHSA-g2p6-hh5v-7hfm/GHSA-g2p6-hh5v-7hfm.json
JSON Data
https://api.osv.dev/v1/vulns/GHSA-g2p6-hh5v-7hfm
Aliases
Published
2026-03-13T15:40:31Z
Modified
2026-03-13T15:57:07Z
Severity
  • 8.7 (High) CVSS_V4 - CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N CVSS Calculator
Summary
Poseidon V1 variable-length input collision via implicit zero-padding
Details

Impact

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 — it encodes the input length in the capacity element (IV = input_len << 64), making different-length inputs produce distinct states.

Patches

Fixed by enforcing inputs.len() == RATE in PoseidonSponge::compute_hash, matching circom's invariant that nInputs always equals T - 1. Users should upgrade to the next release containing this fix.

Workarounds

If upgrading is not immediately possible:

  • Ensure callers always use T = inputs.len() + 1 (full-rate), which is how circom uses Poseidon. For example, to hash 2 inputs, use T=3; to hash 1 input, use T=2. Never use a sponge with more rate capacity than the number of inputs.
  • Alternatively, migrate to Poseidon2Sponge, which is safe for variable-length inputs due to its length-encoding IV.

References

Database specific
{
    "cwe_ids":  [
        "CWE-328"
    ],
    "github_reviewed":  true,
    "github_reviewed_at":  "2026-03-13T15:40:31Z",
    "nvd_published_at":  "2026-03-12T18:16:25Z",
    "severity":  "HIGH"
}
References

Affected packages

crates.io / soroban-poseidon

Package

Name
soroban-poseidon
View open source insights on deps.dev
Purl
pkg:cargo/soroban-poseidon

Affected ranges

Type
SEMVER
Events
Introduced
0 Unknown introduced version / All previous versions are affected
Fixed
25.0.1

Database specific

source
"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/03/GHSA-g2p6-hh5v-7hfm/GHSA-g2p6-hh5v-7hfm.json"