Duty Analyst: Joseph McCarthy

CVE-2026-32129

Published: 2026-03-12 18:16:25 | Last modified: 2026-04-16 14:47:17

HIGH CVSS 8.7
No EPSS data

Description

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.

CVSS details

Severity
high
Score
8.7
Vector
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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

EPSS

This CVE is not currently listed in the EPSS dataset.

Show JSON
{
    "cve": {
        "id": "CVE-2026-32129",
        "cveTags": [],
        "metrics": {
            "cvssMetricV40": [
                {
                    "type": "Secondary",
                    "source": "security-advisories@github.com",
                    "cvssData": {
                        "Safety": "NOT_DEFINED",
                        "version": "4.0",
                        "Recovery": "NOT_DEFINED",
                        "baseScore": 8.7,
                        "Automatable": "NOT_DEFINED",
                        "attackVector": "NETWORK",
                        "baseSeverity": "HIGH",
                        "valueDensity": "NOT_DEFINED",
                        "vectorString": "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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
                        "exploitMaturity": "NOT_DEFINED",
                        "providerUrgency": "NOT_DEFINED",
                        "userInteraction": "NONE",
                        "attackComplexity": "LOW",
                        "attackRequirements": "NONE",
                        "privilegesRequired": "NONE",
                        "subIntegrityImpact": "NONE",
                        "vulnIntegrityImpact": "HIGH",
                        "integrityRequirement": "NOT_DEFINED",
                        "modifiedAttackVector": "NOT_DEFINED",
                        "subAvailabilityImpact": "NONE",
                        "vulnAvailabilityImpact": "NONE",
                        "availabilityRequirement": "NOT_DEFINED",
                        "modifiedUserInteraction": "NOT_DEFINED",
                        "modifiedAttackComplexity": "NOT_DEFINED",
                        "subConfidentialityImpact": "NONE",
                        "vulnConfidentialityImpact": "NONE",
                        "confidentialityRequirement": "NOT_DEFINED",
                        "modifiedAttackRequirements": "NOT_DEFINED",
                        "modifiedPrivilegesRequired": "NOT_DEFINED",
                        "modifiedSubIntegrityImpact": "NOT_DEFINED",
                        "modifiedVulnIntegrityImpact": "NOT_DEFINED",
                        "vulnerabilityResponseEffort": "NOT_DEFINED",
                        "modifiedSubAvailabilityImpact": "NOT_DEFINED",
                        "modifiedVulnAvailabilityImpact": "NOT_DEFINED",
                        "modifiedSubConfidentialityImpact": "NOT_DEFINED",
                        "modifiedVulnConfidentialityImpact": "NOT_DEFINED"
                    }
                }
            ]
        },
        "published": "2026-03-12T18:16:25.097",
        "references": [
            {
                "url": "https://github.com/stellar/rs-soroban-poseidon/pull/10",
                "source": "security-advisories@github.com"
            },
            {
                "url": "https://github.com/stellar/rs-soroban-poseidon/releases/tag/v25.0.1",
                "source": "security-advisories@github.com"
            },
            {
                "url": "https://github.com/stellar/rs-soroban-poseidon/security/advisories/GHSA-g2p6-hh5v-7hfm",
                "source": "security-advisories@github.com"
            }
        ],
        "vulnStatus": "Deferred",
        "weaknesses": [
            {
                "type": "Primary",
                "source": "security-advisories@github.com",
                "description": [
                    {
                        "lang": "en",
                        "value": "CWE-328"
                    }
                ]
            }
        ],
        "descriptions": [
            {
                "lang": "en",
                "value": "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."
            },
            {
                "lang": "es",
                "value": "soroban-poseidon proporciona funciones hash criptogr\u00e1ficas Poseidon y Poseidon2 para contratos inteligentes de Soroban. Poseidon V1 (PoseidonSponge) acepta entradas de longitud variable sin relleno inyectivo. Cuando un llamador proporciona menos entradas que la tasa de la esponja (inputs.len() &lt; T - 1), las posiciones de tasa no utilizadas se rellenan impl\u00edcitamente con ceros. Esto permite colisiones hash triviales: para cualquier vector de entrada [m1, ..., mk] hasheado con una esponja de tasa &gt; k, hash([m1, ..., mk]) es igual a hash([m1, ..., mk, 0]) porque ambos producen estados de pre-permutaci\u00f3n id\u00e9nticos. Esto afecta cualquier uso de PoseidonSponge o poseidon_hash donde el n\u00famero de entradas es menor que T - 1 (p. ej., hashear 1 entrada con T=3). Poseidon2 (Poseidon2Sponge) no se ve afectado."
            }
        ],
        "lastModified": "2026-04-16T14:47:16.733",
        "sourceIdentifier": "security-advisories@github.com"
    }
}