ÚLTIMAS NOTÍCIAS
SELECIONADO PARA VOCÊ

Bug no SP1 expõe a própria Prover Network da Succinct

PorRanda MosesRanda Moses 2 min de leitura
O bug do SP1 expôs a própria Rede Provedora da Succinct.
  • Um bug de sanidade de alta gravidade no SP1 deixou a Rede Prover principal da Succinct vulnerável a provas inválidas.
  • A falha estava no verificador nativo Rust do SP1 nas versões 6.0.0 a 6.8.0.
  • A Succinct implantou a correção da versão 6.8.1 em sua Rede Prover principal.

Um bug de sanidade de alta gravidade no sistema de prova de conhecimento zero (zero-knowledge) da Succinct, o SP1, expôs a própria Rede Prover principal da empresa a provas inválidas.

A rede foi a única implantação conhecida pela Succinct que foi afetada, segundo um aviso de segurança no GitHub publicado em 11 de outubro.

Verificadores nativos Rust nas versões 6.0.0 a 6.8.0 podiam aceitar provas inválidas

O aviso, registrado como GHSA-p7v2-jjv3-8p8f, indica que um provador malicioso poderia enviar uma prova para uma execução inválida e o verificador da rede a aceitaria. A Rede de Provadores aceitava provas de provadores de terceiros.

Para explorar a falha, as provas precisavam ser enviadas diretamente ao verificador nativo em Rust do SP1. As provas Core e Compressed estavam expostas nesse caminho.

As verificações Groth16 e Plonk estavam seguras, pois utilizavam provas encapsuladas com formas fixas e nunca tocavam no formato de tensor controlado pelo provador que continha a vulnerabilidade.

Os verificadores em Solidity para as verificações on-chain de Plonk e Groth16 também não foram afetados. Aplicativos que usam a função verify_sp1_proof para verificar provas Compressed só estavam seguros se a agregação de provas terminasse em uma prova Groth16 ou Plonk.

O aviso informa que as versões de 6.0.0 a 6.8.0 dos pacotes sp1_hypercube, sp1_prover e sp1_sdk são afetadas. A correção foi enviada pela Succinct na versão 6.8.1, em 24 de setembro, 17 dias antes do aviso ser tornado público.

O bug do SP1 expôs a própria Rede Provedora da Succinct.
O aviso de segurança GHSA-p7v2-jjv3-8p8f da Succinct no GitHub, classificado como de alta gravidade, lista as versões 6.0.0 a 6.8.0 do sp1_hypercube, sp1_prover e sp1_sdk como afetadas e a 6.8.1 como corrigida.

Tensores cujos comprimentos de armazenamento não correspondem são descartados pela versão 6.8.1

O verificador nativo em Rust do SP1 apresentava a falha. Esta é a parte do programa que verifica se uma prova é válida.

O SP1 armazena dados multidimensionais em um Tensor. Um Tensor consiste em um buffer de valores armazenados e dimensões declaradas que descrevem sua forma.

Ambos precisam ser conferidos para uma verificação sólida. O número de elementos armazenados deve ser igual ao produto das dimensões fornecidas.

Um rótulo em cada parte dos dados de prova indica seu tamanho. O verificador nunca verificava se o que estava no rótulo correspondia ao conteúdo interno; ele apenas observava o rótulo.

Assim, um atacante poderia enviar dados com um rótulo falso. Diferentes partes da verificação então analisariam várias partes dos mesmos dados, o que permitiria que uma prova falsa fosse aceita.

Com a versão 6.8.1, há agora uma verificação de comprimento na desserialização. Qualquer tensor cujo número de elementos armazenados não seja igual ao produto de suas dimensões declaradas é rejeitado.

Após o lançamento da versão 6.8.1, a Succinct implementou a correção na Rede Prover da mainnet.

As pessoas que solicitam provas da rede não precisam alterar nada do seu lado. Qualquer pessoa que execute seu próprio verificador nativo em Rust e aceite provas de provers não confiáveis precisa atualizar para a versão 6.8.1.

Vitalis Salis encontrou a falha e a reportou por meio do programa de recompensas por bugs do Immunefi, conforme indicado no advisory.

Outros bugs de sanidade em sistemas de prova, incluindo um bug de sanidade na pool blindada Orchard da Zcash, foram reportados este ano pela Cryptopolitan. A Cryptopolitan também discutiu uma exploração no Foom.Cash onde um atacante forjou provas zkSNARK devido a uma configuração incorreta do verificador.

As mentes mais inteligentes do setor de criptomoedas já leem nosso boletim informativo. Quer entrar? Junte-se a eles.

Perguntas Frequentes

O que foi a vulnerabilidade SP1?

Um bug de sanidade no verificador Rust nativo do SP1 que permitia a um provador mal-intencionado obter uma prova para uma execução inválida aceita.

Quais versões do SP1 são afetadas e qual delas corrige o problema?

As versões 6.0.0 até 6.8.0 são afetadas, e a versão 6.8.1 corrige o problema.

Os usuários do SP1 precisam tomar alguma providência?

Os solicitantes na Rede Provedora principal da Succinct não precisam de alterações. Equipes que executam um verificador Rust nativo separado que recebe provas de provedores não confiáveis devem atualizar para a versão 6.8.1.

Compartilhe este artigo

Aviso. As informações fornecidas não constituem aconselhamento de negociação. Cryptopolitan.com não assume responsabilidade por quaisquer investimentos realizados com base nas informações fornecidas nesta página. Recomendamos fortemente a realização de pesquisa independente e/ou consulta a um profissional qualificado antes de tomar qualquer decisão de investimento.

Randa Moses

Randa Moses

Randa Moses é editora e repórter na Cryptopolitan, cobrindo tecnologia, IA, robótica, criptomoedas, golpes e hacks. Ela atua no espaço de criptomoedas desde 2017. Já ocupou cargos na Forward Protocol, AmaZix e Cryptosomniac. Randa possui graduação em Engenharia Elétrica e Eletrônica pela Universidade de Bradford.

MAIS … NOTÍCIAS