Estudar explorações passadas de contratos inteligentes é excelente para se tornar um melhor desenvolvedor Solidity. Recentemente, passei algum tempo revisando muitas das explorações que ocorreram nos últimos anos. Compreender a causa raiz de um hack é uma ótima maneira de aprender a pensar de forma diferente sobre a escrita de código. Isso também lhe dá uma melhor intuição sobre quais componentes são mais críticos ao olhar para novas bases de código. Recomendo a qualquer um que queira melhorar seu jogo em Solidity que passe por explorações passadas no @RektHQ ou confira a documentação do @phylaxsystems, onde temos análises de hacks e como as afirmações poderiam tê-los prevenido. Ao estudar esses hacks passados, percebi que muitas vezes as explorações são possíveis devido à falta de verificações no código ou cálculos incorretos que levam os protocolos a entrar em estados que não deveriam estar. Uma vez que a exploração ocorreu, o bug muitas vezes parece óbvio. Precisamos garantir que os protocolos tenham mais facilidade em identificar esses problemas. Muitos protocolos se beneficiariam ao passar tempo definindo invariantes e garantindo que estas não possam ser violadas. Escrever afirmações é uma ótima maneira de garantir que essas invariantes nunca possam ser violadas. A última exploração que passei tempo analisando foi a exploração do Abracadabra de março de 2025, onde ~$13 milhões foram perdidos: O Bug: sendValueInCollateral() extraiu tokens reais, mas esqueceu de atualizar as variáveis de contabilidade internas. A Exploração: orderValueInCollateral() continuou relatando o mesmo valor de colateral mesmo após os tokens serem removidos. Resultado: O atacante tomou emprestado contra "colateral fantasma" repetidamente até que os fundos fossem drenados. Uma afirmação que verifica a simples invariante de que o "colateral reportado" corresponde ao "colateral real" teria prevenido o hack.
947