Il bug di SP1 espone il Prover Network di Succinct

- Un bug di correttezza ad alta gravità in SP1 ha lasciato la rete Prover principale di Succinct esposta a prove non valide.
- La vulnerabilità risiedeva nel verificatore Rust nativo di SP1 nelle versioni 6.0.0 fino a 6.8.0.
- Succinct ha distribuito la correzione della versione 6.8.1 alla sua rete Prover principale.
Un bug di correttezza ad alta gravità nel sistema di prova zero-knowledge di Succinct, SP1, ha esposto la propria rete Prover principale dell'azienda a prove non valide.
Secondo un avviso di sicurezza GitHub pubblicato il 11 ottobre, la rete era l'unica distribuzione nota a essere interessata.
I verificatori Rust nativi nelle versioni 6.0.0 fino a 6.8.0 potevano accettare prove non valide
L'avviso, registrato come GHSA-p7v2-jjv3-8p8f, segnala che un prover malintenzionato potrebbe inviare una prova per un'esecuzione non valida e il verificatore della rete la accetterebbe. La Prover Network accettava prove da prover di terze parti.
Per sfruttare il bug, le prove dovevano essere inviate direttamente al verificatore Rust nativo di SP1. Le prove Core e Compressed erano esposte su questo percorso.
I controlli Groth16 e Plonk erano sicuri perché utilizzavano prove avvolte con forme fisse e non toccavano mai il formato del tensore controllato dal prover oggetto del bug.
Anche i checker Solidity per i controlli on-chain Plonk e Groth16 non sono stati interessati. Le app che utilizzano la funzione verify_sp1_proof per verificare le prove Compressed erano sicure solo se l'aggregazione delle prove terminava con una prova Groth16 o Plonk.
L'avviso indica che dalle versioni 6.0.0 alla 6.8.0 sono interessati sp1_hypercube, sp1_prover e sp1_sdk. Succinct ha rilasciato la correzione nella versione 6.8.1 il 24 settembre, 17 giorni prima che l'avviso fosse reso pubblico.

Le versioni successive alla 6.8.1 scartano i tensori con lunghezze di archiviazione non corrispondenti
Il verificatore Rust nativo di SP1 presentava il bug. Questa è la parte del programma che verifica la validità di una prova.
SP1 memorizza i dati multidimensionali in un Tensor. Un Tensor è composto da un buffer di valori memorizzati e da dimensioni dichiarate che ne descrivono la forma.
Entrambi devono essere coerenti per una verifica corretta. Il numero di elementi memorizzati deve essere uguale al prodotto delle dimensioni specificate.
Un'etichetta su ciascun elemento dei dati di prova indica quanto è grande. Il verificatore non controllava mai se l'etichetta corrispondesse ai dati effettivi; si limitava a guardare l'etichetta.
Di conseguenza, un attaccante potrebbe inviare dati con un'etichetta falsa. Diverse parti della verifica analizzerebbero quindi sezioni diverse degli stessi dati, consentendo a una prova contraffatta di superare il controllo.
Con la versione 6.8.1 è stata introdotta una verifica della lunghezza durante la deserializzazione. Qualsiasi tensor il cui numero di elementi memorizzati non corrisponde al prodotto delle sue dimensioni dichiarate viene rifiutato.
Dopo la pubblicazione della versione 6.8.1, Succinct ha distribuito la correzione alla rete Prover su mainnet.
Gli utenti che richiedono prove dalla rete non devono apportare modifiche. Chi esegue un proprio verificatore nativo in Rust e accetta prove da prover non attendibili deve aggiornare alla versione 6.8.1.
Secondo l'avviso, la vulnerabilità è stata scoperta da Vitalis Salis e segnalata tramite il programma bug bounty di Immunefi.
Altri bug di correttezza dei sistemi di prova, incluso un bug di soundness nel pool schermato Orchard di Zcash, sono stati segnalati quest'anno da Cryptopolitan. Cryptopolitan ha anche discusso di un exploit su Foom.Cash in cui un attaccante ha falsificato prove zkSNARK a causa di una configurazione errata del verificatore.
Se stai leggendo questo, sei già avanti. Resta così con la nostra newsletter.
Domande frequenti
Cos'è la vulnerabilità SP1?
Un bug di soundness nel verificatore Rust nativo di SP1 che consentiva a un prover malintenzionato di ottenere una prova per un'esecuzione non valida accettata.
Quali versioni di SP1 sono interessate e quale risolve il problema?
Le versioni dalla 6.0.0 alla 6.8.0 sono interessate, mentre la versione 6.8.1 lo risolve.
Gli utenti di SP1 devono intraprendere qualche azione?
I richiedenti sulla rete Prover principale di Succinct non necessitano di modifiche. I team che eseguono un verificatore Rust nativo separato che accetta prove da prover non fidati dovrebbero aggiornare alla versione 6.8.1.
Disclaimer. Le informazioni fornite non costituiscono consulenza finanziaria. Cryptopolitan.com non si assume alcuna responsabilità per eventuali investimenti basati sulle informazioni presenti in questa pagina. Si raccomanda vivamente di effettuare ricerche autonome e/o consultare un professionista qualificato prima di prendere qualsiasi decisione di investimento.

Randa Moses
Randa Moses è un'editor e giornalista presso Cryptopolitan, dove si occupa di tecnologia, intelligenza artificiale, robotica, criptovalute, truffe e hacking. Opera nel settore delle criptovalute dal 2017. Ha ricoperto ruoli in Forward Protocol, AmaZix e Cryptosomniac. Randa è laureata in Ingegneria Elettrica ed Elettronica presso l'Università di Bradford.
















