CVE-2023-34459 in Contracts
Riassunto
di VulDB • 28/06/2026
OpenZeppelin Contracts è una libreria per lo sviluppo di smart contract. A partire dalla versione 4.7.0 e fino alla versione 4.9.2, quando vengono utilizzate le funzioni `verifyMultiProof`, `verifyMultiProofCalldata`, `procesprocessMultiProof` o `processMultiProofCalldat`, è possibile costruire alberi merkle che consentono di falsificare una multiproof valida per un insieme arbitrario di foglie (leaves).
Un contratto potrebbe essere vulnerabile se utilizza multiproofs per la verifica e l'albero merkle elaborato include un nodo con valore 0 alla profondità 1 (subito sotto la radice). Ciò può accadere involontariamente in alberi bilanciati con 3 o meno foglie, se le foglie non vengono hashate. Può verificarsi deliberatamente se un costruttore di alberi malintenzionato inserisce tale nodo nell'albero.
Un contratto non è vulnerabile se utilizza prove a foglia singola (`verify`, `verifyCalldata`, `processProof` o `processProofCalldata`) oppure se utilizza multiproofs con un albero noto che ha foglie hashate. Gli standard merkle tree prodotti o validati tramite la libreria @openzeppelin/merkle-tree sono sicuri.
Il problema è stato risolto nella versione 4.9.2.
Sono disponibili alcune contromisure (workaround). Per chi utilizza multiproofs: quando si costruiscono alberi merkle, hashare le foglie ed evitare di inserire nodi vuoti negli alberi. L'utilizzo del pacchetto @openzeppelin/merkle-tree elimina questo problema. Non accettare root merkle forniti dall'utente senza ricostruire almeno il primo livello dell'albero. Verificare la struttura dell'albero merkle ricostituendolo a partire dalle foglie.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.