CVE-2023-34459
OpenZeppelin Contracts's MerkleProof multiproofs may allow proving arbitrary leaves for specific trees
Severity Score
Exploit Likelihood
Affected Versions
Public Exploits
0Exploited in Wild
-Decision
Descriptions
OpenZeppelin Contracts is a library for smart contract development. Starting in version 4.7.0 and prior to version 4.9.2, when the `verifyMultiProof`, `verifyMultiProofCalldata`, `procesprocessMultiProof`, or `processMultiProofCalldat` functions are in use, it is possible to construct merkle trees that allow forging a valid multiproof for an arbitrary set of leaves. A contract may be vulnerable if it uses multiproofs for verification and the merkle tree that is processed includes a node with value 0 at depth 1 (just under the root). This could happen inadvertedly for balanced trees with 3 leaves or less, if the leaves are not hashed. This could happen deliberately if a malicious tree builder includes such a node in the tree. A contract is not vulnerable if it uses single-leaf proving (`verify`, `verifyCalldata`, `processProof`, or `processProofCalldata`), or if it uses multiproofs with a known tree that has hashed leaves. Standard merkle trees produced or validated with the @openzeppelin/merkle-tree library are safe. The problem has been patched in version 4.9.2. Some workarounds are available. For those using multiproofs: When constructing merkle trees hash the leaves and do not insert empty nodes in your trees. Using the @openzeppelin/merkle-tree package eliminates this issue. Do not accept user-provided merkle roots without reconstructing at least the first level of the tree. Verify the merkle tree structure by reconstructing it from the leaves.
CVSS Scores
SSVC
- Decision:Track
Timeline
- 2023-06-06 CVE Reserved
- 2023-06-16 CVE Published
- 2024-12-16 CVE Updated
- 2025-01-06 EPSS Updated
- ---------- Exploited in Wild
- ---------- KEV Due Date
- ---------- First Exploit
CWE
- CWE-354: Improper Validation of Integrity Check Value
CAPEC
References (3)
URL | Tag | Source |
---|---|---|
https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v4.9.2 | Release Notes |
URL | Date | SRC |
---|
URL | Date | SRC |
---|---|---|
https://github.com/OpenZeppelin/openzeppelin-contracts/commit/4d2383e17186be3e8ccf5a442e9686ecc7de1c55 | 2023-06-26 |
URL | Date | SRC |
---|---|---|
https://github.com/OpenZeppelin/openzeppelin-contracts/security/advisories/GHSA-wprv-93r4-jj2p | 2023-06-26 |
Affected Vendors, Products, and Versions
Vendor | Product | Version | Other | Status | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Vendor | Product | Version | Other | Status | <-- --> | Vendor | Product | Version | Other | Status |
Openzeppelin Search vendor "Openzeppelin" | Contracts Search vendor "Openzeppelin" for product "Contracts" | >= 4.7.0 < 4.9.2 Search vendor "Openzeppelin" for product "Contracts" and version " >= 4.7.0 < 4.9.2" | node.js |
Affected
| ||||||
Openzeppelin Search vendor "Openzeppelin" | Contracts Upgradeable Search vendor "Openzeppelin" for product "Contracts Upgradeable" | >= 4.7.0 < 4.9.2 Search vendor "Openzeppelin" for product "Contracts Upgradeable" and version " >= 4.7.0 < 4.9.2" | node.js |
Affected
|