Vulnerabilites related to risc0 - risc0-ethereum
CVE-2025-52884 (GCVE-0-2025-52884)
Vulnerability from cvelistv5
Published
2025-06-24 20:20
Modified
2025-06-24 20:49
Severity ?
VLAI Severity ?
EPSS score ?
CWE
- CWE-159 - Improper Handling of Invalid Use of Special Elements
Summary
RISC Zero is a zero-knowledge verifiable general computing platform, with Ethereum integration. The risc0-ethereum repository contains Solidity verifier contracts, Steel EVM view call library, and supporting code. Prior to versions 2.1.1 and 2.2.0, the `Steel.validateCommitment` Solidity library function will return `true` for a crafted commitment with a digest value of zero. This violates the semantics of `validateCommitment`, as this does not commitment to a block that is in the current chain. Because the digest is zero, it does not correspond to any block and there exist no known openings. As a result, this commitment will never be produced by a correct zkVM guest using Steel and leveraging this bug to compromise the soundness of a program using Steel would require a separate bug or misuse of the Steel library, which is expected to be used to validate the root of state opening proofs. A fix has been released as part of `risc0-ethereum` 2.1.1 and 2.2.0. Users for the `Steel` Solidity library versions 2.1.0 or earlier should ensure they are using `Steel.validateCommitment` in tandem with zkVM proof verification of a Steel program, as shown in the ERC-20 counter example, and documentation. This is the correct usage of Steel, and users following this pattern are not at risk, and do not need to take action. Users not verifying a zkVM proof of a Steel program should update their application to do so, as this is incorrect usage of Steel.
References
Impacted products
Vendor | Product | Version | ||
---|---|---|---|---|
risc0 | risc0-ethereum |
Version: < 2.1.1 |
{ "containers": { "adp": [ { "metrics": [ { "other": { "content": { "id": "CVE-2025-52884", "options": [ { "Exploitation": "poc" }, { "Automatable": "no" }, { "Technical Impact": "partial" } ], "role": "CISA Coordinator", "timestamp": "2025-06-24T20:49:01.025065Z", "version": "2.0.3" }, "type": "ssvc" } } ], "providerMetadata": { "dateUpdated": "2025-06-24T20:49:13.684Z", "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP" }, "title": "CISA ADP Vulnrichment" } ], "cna": { "affected": [ { "product": "risc0-ethereum", "vendor": "risc0", "versions": [ { "status": "affected", "version": "\u003c 2.1.1" } ] } ], "descriptions": [ { "lang": "en", "value": "RISC Zero is a zero-knowledge verifiable general computing platform, with Ethereum integration. The risc0-ethereum repository contains Solidity verifier contracts, Steel EVM view call library, and supporting code. Prior to versions 2.1.1 and 2.2.0, the `Steel.validateCommitment` Solidity library function will return `true` for a crafted commitment with a digest value of zero. This violates the semantics of `validateCommitment`, as this does not commitment to a block that is in the current chain. Because the digest is zero, it does not correspond to any block and there exist no known openings. As a result, this commitment will never be produced by a correct zkVM guest using Steel and leveraging this bug to compromise the soundness of a program using Steel would require a separate bug or misuse of the Steel library, which is expected to be used to validate the root of state opening proofs. A fix has been released as part of `risc0-ethereum` 2.1.1 and 2.2.0. Users for the `Steel` Solidity library versions 2.1.0 or earlier should ensure they are using `Steel.validateCommitment` in tandem with zkVM proof verification of a Steel program, as shown in the ERC-20 counter example, and documentation. This is the correct usage of Steel, and users following this pattern are not at risk, and do not need to take action. Users not verifying a zkVM proof of a Steel program should update their application to do so, as this is incorrect usage of Steel." } ], "metrics": [ { "cvssV4_0": { "attackComplexity": "HIGH", "attackRequirements": "PRESENT", "attackVector": "NETWORK", "baseScore": 1.7, "baseSeverity": "LOW", "privilegesRequired": "NONE", "subAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "userInteraction": "NONE", "vectorString": "CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:U", "version": "4.0", "vulnAvailabilityImpact": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "LOW" } } ], "problemTypes": [ { "descriptions": [ { "cweId": "CWE-159", "description": "CWE-159: Improper Handling of Invalid Use of Special Elements", "lang": "en", "type": "CWE" } ] } ], "providerMetadata": { "dateUpdated": "2025-06-24T20:20:17.287Z", "orgId": "a0819718-46f1-4df5-94e2-005712e83aaa", "shortName": "GitHub_M" }, "references": [ { "name": "https://github.com/risc0/risc0-ethereum/security/advisories/GHSA-gjv3-89hh-9xq2", "tags": [ "x_refsource_CONFIRM" ], "url": "https://github.com/risc0/risc0-ethereum/security/advisories/GHSA-gjv3-89hh-9xq2" }, { "name": "https://github.com/risc0/risc0-ethereum/pull/605", "tags": [ "x_refsource_MISC" ], "url": "https://github.com/risc0/risc0-ethereum/pull/605" }, { "name": "https://github.com/risc0/risc0-ethereum/commit/3bbac859c7132b21ba5fdf2d47f1dd52e7e73d98", "tags": [ "x_refsource_MISC" ], "url": "https://github.com/risc0/risc0-ethereum/commit/3bbac859c7132b21ba5fdf2d47f1dd52e7e73d98" }, { "name": "https://docs.beboundless.xyz/developers/steel/how-it-works#verifying-the-proof-onchain", "tags": [ "x_refsource_MISC" ], "url": "https://docs.beboundless.xyz/developers/steel/how-it-works#verifying-the-proof-onchain" }, { "name": "https://github.com/risc0/risc0-ethereum/blob/ff0cb9253a87945b653b825711b8b5075f8b7545/examples/erc20-counter/contracts/src/Counter.sol#L56-L63", "tags": [ "x_refsource_MISC" ], "url": "https://github.com/risc0/risc0-ethereum/blob/ff0cb9253a87945b653b825711b8b5075f8b7545/examples/erc20-counter/contracts/src/Counter.sol#L56-L63" }, { "name": "https://github.com/risc0/risc0-ethereum/releases/tag/v2.1.1", "tags": [ "x_refsource_MISC" ], "url": "https://github.com/risc0/risc0-ethereum/releases/tag/v2.1.1" }, { "name": "https://github.com/risc0/risc0-ethereum/releases/tag/v2.2.0", "tags": [ "x_refsource_MISC" ], "url": "https://github.com/risc0/risc0-ethereum/releases/tag/v2.2.0" } ], "source": { "advisory": "GHSA-gjv3-89hh-9xq2", "discovery": "UNKNOWN" }, "title": "risc0-ethereum-contracts allows invalid commitment with digest value of zero to be accepted by Steel.validateCommitment" } }, "cveMetadata": { "assignerOrgId": "a0819718-46f1-4df5-94e2-005712e83aaa", "assignerShortName": "GitHub_M", "cveId": "CVE-2025-52884", "datePublished": "2025-06-24T20:20:17.287Z", "dateReserved": "2025-06-20T17:42:25.708Z", "dateUpdated": "2025-06-24T20:49:13.684Z", "state": "PUBLISHED" }, "dataType": "CVE_RECORD", "dataVersion": "5.1" }