A plataforma de negociação de NFTs SuperRare sofreu, na segunda-feira, uma exploração de US$ 730.000 devido a uma falha básica em seu contrato inteligente que, segundo especialistas, poderia ter sido facilmente evitada com práticas padrão de testes.

O contrato de staking da SuperRare (RARE) foi explorado na segunda-feira, com cerca de US$ 731.000 em tokens RARE roubados, de acordo com a empresa de cibersegurança cripto Cyvers.

A vulnerabilidade decorre de uma função destinada a permitir que apenas endereços específicos modificassem a raiz de Merkle, uma estrutura de dados crítica que determina os saldos de staking dos usuários. No entanto, a lógica foi escrita incorretamente, permitindo que qualquer endereço interagisse com a função.

0xAw, desenvolvedor líder da exchange descentralizada Alien Base, apontou que o erro era tão óbvio que poderia ter sido detectado pelo ChatGPT. O Cointelegraph verificou de forma independente que o modelo o3 da OpenAI identificou com sucesso a falha ao ser testado.

Security, Hackers, Cybersecurity, Hacks
Trecho relevante do código no contrato de staking de tokens da SuperRare. Fonte: Cointelegraph

“O ChatGPT teria detectado isso, qualquer desenvolvedor de Solidity minimamente competente teria detectado. Basicamente qualquer pessoa, se tivesse olhado. Provavelmente ninguém olhou”, disse 0xAw ao Cointelegraph.

O cofundador da SuperRare, Jonathan Perkins, disse ao Cointelegraph que nenhum fundo do protocolo principal foi perdido e que os usuários afetados serão ressarcidos. Segundo ele, parece que 61 carteiras foram impactadas.

“Aprendemos com isso e, a partir de agora, mudanças futuras passarão por um processo de revisão muito mais robusto”, afirmou.

Anatomia de uma vulnerabilidade

Para determinar se a alteração da raiz de Merkle deveria ser permitida, o contrato inteligente verificava se o endereço que interagia não era um endereço específico ou o proprietário do contrato. Essa lógica era o oposto do que deveria ser implementado, permitindo que qualquer pessoa retirasse o RARE em staking do contrato.

Security, Hackers, Cybersecurity, Hacks
Linha contendo a verificação relevante. Fonte: Cointelegraph

Um engenheiro sênior da empresa de seguro cripto Nexus Mutual disse ao Cointelegraph que “testes unitários teriam detectado esse erro”.

Mike Tiutin, arquiteto de blockchain e diretor de tecnologia da AMLBot, afirmou: “Foi um erro bobo do desenvolvedor, não coberto por testes (é por isso que a cobertura total é importante).”

O CEO da AMLBot, Slava Demchuk, chegou à mesma conclusão, observando que “não houve testes extensivos (ou um programa de bug bounty) que pudessem ter identificado o problema antes da implantação”. Ele destacou a importância dos testes, dizendo que este é um “exemplo clássico do motivo pelo qual a lógica de contratos inteligentes deve ser rigorosamente auditada”. Ele acrescentou:

“Isso serve como um lembrete severo: em sistemas descentralizados, até mesmo um único caractere errado pode ter consequências graves.”

Embora Perkins tenha insistido que os contratos foram auditados e passaram por testes unitários, ele reconheceu que o bug foi introduzido tardiamente no processo e não foi coberto nos cenários finais de teste:

“É um lembrete doloroso de como até pequenas alterações em sistemas complexos podem ter consequências inesperadas.”

A importância dos testes unitários

Testes unitários são testes automatizados que verificam se partes individuais (“unidades”) de um programa, normalmente funções ou métodos, funcionam conforme o esperado. Cada teste avalia um comportamento ou resultado específico com base em uma entrada dada, ajudando a detectar bugs precocemente.

Neste caso, os testes que verificariam se endereços podem ou não chamar a função para modificar a raiz de Merkle teriam falhado.

“Por descuido ou por testes inadequados, o resultado foi o mesmo: uma vulnerabilidade evitável que custou caro”, disse Demchuk ao Cointelegraph.

0xAw também afirmou que “o problema foi, claro, a aparente ausência completa de testes”. Segundo ele, “não é sequer um tipo de código que funciona bem em condições normais e falha apenas se for forçado”.

“Esse código simplesmente faz o oposto do que se espera”, acrescentou.

Perkins disse ao Cointelegraph que, daqui para frente, a SuperRare introduziu novos fluxos de trabalho que exigem novas auditorias para quaisquer alterações feitas após uma auditoria inicial, por menores que sejam.

A maioria das vulnerabilidades é causada por descuidos

0xAw disse que o erro é “um erro humano normal”. O que ele considera uma “falha monumental” é o fato de que “o erro chegou à produção e permaneceu lá”.

0xAw destacou que a grande maioria das vulnerabilidades graves resulta de “erros realmente bobos e facilmente evitáveis”. Ainda assim, ele admitiu que “normalmente são um pouco mais difíceis de perceber do que este”.

O chefe de resposta a incidentes da Hacken, Yehor Rudytsia, concordou que uma cobertura de testes abrangente teria detectado a falha.

“Revisando essa função, fica claro que se trata de um bug bastante óbvio”, disse ele.