A exploração da ponte Ronin de US$ 10 milhões em 6 de agosto foi causada por um script de implantação de atualização defeituoso, de acordo com um relatório da empresa de segurança de blockchain Verichains.

A atualização reduziu o limite de votação para validadores para zero, essencialmente permitindo que qualquer usuário se retirasse da ponte “sem assinatura”, afirmou a Verichains.

O invasor tentou explorar essa falha para drenar a ponte, mas foi precedido por um bot MEV que realmente realizou o ataque, provavelmente sem intenção. O proprietário do bot posteriormente devolveu a maior parte dos fundos para a equipe Ronin.

A análise da Verichains expõe os riscos que os usuários correm quando interagem com contratos inteligentes atualizáveis. O protocolo poderia ter perdido o valor total se o invasor tivesse pago mais em gás e, portanto, evitado o favorito.

Ronin é uma rede blockchain dedicada a hospedar jogos Web3. É mais conhecida por ser o lar do Axie Infinity, um jogo de criação de monstros play-to-earn que alegou ter mais de 2 milhões de jogadores durante seu pico em 2022. Os jogadores do jogo Ronin usam a ponte para transferir fundos entre Ethereum e Ronin.

De acordo com o relatório da Verichain, a ponte depende da variável minimumVoteWeight para impedir que os usuários retirem fundos que não pertencem a eles. Cada transação deve ser autorizada por um número mínimo de validadores definidos por esta variável. Quando minimumVoteWeight é computado, ele usa outra variável, totalWeight, como uma entrada.

Em versões anteriores da ponte, totalWeight existia em um contrato separado, chamado “MainchainBridgeManager”. Quando os desenvolvedores criaram a nova atualização, eles queriam mover essa variável para o próprio armazenamento interno da ponte, em vez de deixá-la no outro contrato. Isso significava que eles precisavam inicializar a variável no momento da implantação, definindo TotalWeight para o valor que tinha na versão anterior.

Infelizmente, foi aqui que a atualização deu terrivelmente errado. De acordo com a Verichain, os desenvolvedores do Ronin escreveram várias funções “initialize” diferentes que deveriam ser chamadas no momento da implantação. Cada uma dessas funções tinha um número de versão diferente. A terceira versão continha a inicialização crucial totalWeight. Mas quando os desenvolvedores escreveram o script de implantação, eles chamaram apenas a versão 4, deixando totalWeight em seu valor zero padrão.

Após essa atualização, os usuários não precisaram mais enviar assinaturas para validadores para provar seu direito de retirada. Eles podiam retirar “sem assinatura”, já que “atendeu à condição minimumVoteWeight (que era 0 devido a não inicializado)”.

Em uma publicação de 7 de agosto no X, o auditor de contratos inteligentes da Composable Security, Damian Rusinek, deu mais detalhes sobre o que permitiu que o ataque ocorresse. Segundo Rusinek, o invasor forneceu uma assinatura de um endereço terminado em B849f. No entanto, esse endereço “[não estava] na lista de operadores de ponte”. Ele não precisava estar na lista de operadores de ponte porque “o mínimo de votos dos operadores era 0”. Portanto, “apenas UMA assinatura era necessária e poderia [ser] QUALQUER assinatura válida”.

Embora não tenham entrado em tantos detalhes quanto Verichains ou Rusinek, Ronin confirmou em uma postagem de 6 de agosto no X que a exploração foi causada quando a atualização "introduziu um problema que levou a ponte a interpretar mal o limite de votos necessário dos operadores de ponte para sacar fundos".

Dados do blockchain mostram que essa transação de ataque foi frontrun por um bot MEV chamado “Frontrunner Yoink”, que drenou com sucesso mais de US$ 10 milhões em criptomoedas da ponte. De acordo com Rusinek, o bot provavelmente “simulou a mudança de endereço e valor e usou sua própria assinatura”. Ele então enviou a transação assim que essa simulação provou que o exploit funcionaria.

Relacionado: Ronin Network explorada por US$ 9,8 milhões em ETH, hacker white hat suspeito

O dono do favorito Yoink devolveu a maior parte dos fundos no mesmo dia, e a equipe Ronin anunciou que eles teriam permissão para ficar com US$ 500.000 como recompensa por insetos.

Usuários do Ronin sofreram um golpe com o exploit de 6 de agosto. Felizmente, o ataque foi liderado por um bot MEV cujo dono era um operador white hat honesto. No entanto, o fato de o ataque ter chegado tão perto de ter sucesso expõe a natureza arriscada das pontes cross-chain atualizáveis.

Algumas redes alegam que esse problema será eliminado quando as camadas 2 do Ethereum atingirem o “estágio 2” e todas as atualizações forem adiadas por pelo menos sete dias após o início. No entanto, os críticos alegam que o processo para atingir esse estágio está demorando muito e pode nunca ser concluído.

Revista: Estranho hack de ‘endereço nulo’ iVest, milhões de PCs ainda vulneráveis ​​ao malware ‘Sinkclose’: Crypto-Sec