"Dirty higher order bits" refere-se a bits mais significativos que foram afetados por ruído ou interferência durante a transmissão de dados, levando a erros de decodificação ou interpretação incorreta dos dados.
Desenvolvemos um novo nível para o Ethernaut que explora uma fraqueza nos compiladores abaixo da versão 0.8.0. Nesse cenário, os inputs manipuados pelas funções não serão checados em sua totalidade. Isso quer dizer que ao utilizarmos o comando calldataload(4) para pegar o input da transação, podemos adulterar os bytes e esse conjunto de bytes alterado passar despercebido pelas funções.
Essa fraqueza também conhecida como Dirty Higher Order Bits e explora a manipulação de bytes para burlar verificações de segurança. Fizemos um trocadilho do nome dessa vulnerabilidade com o cenário e narrativa propostos para o level desenvolvido, onde o contrato é uma "associação suprema" conhecida como Higher Order (quase uma tábula redonda), e esse grupo secreto possui um tesouro e um comandante! Para o atacante se tornar o comandante, é preciso entregar um tesouro maior do que uint8 (255) através do input da função `registerTreasury`.
Através do exploit proposto pelo Dirty Bits, podemos definir qualquer valor para o tesouro desde que caiba no tamanho de um bytes32. Fazemos isso através da edição de um calldata - trocando alguns bits de 0 para valores superiores - antes de ser enviado em forma de ataque, em low-level call para a função `registerTreasury`. Sendo assim, com nossas mãos no tesouro enorme que é o conhecimento, podemos chamar a função `claimLeadership` e provar que somos o novo Commander!
Você pode acessar a nossa versão de testes em: http://20.55.110.244:3000
Esse trabalho apresenta um grande potencial por ensinar os futuros programadores de Solidity sobre alguns dos exploits que são poucos conhecidos na indústria. Já que contratos inteligentes costumam existir desde versões mais antigas até as mais novas, pois as mais novas melhoram a segurança porém geralmente sacrificando otimização e custo de execução. Este também seria o primeiro desafio do Ethernaut a utilizar de uma falha de compilador e também de código assembly. A compreensão do funcionamento do level não é tão difícil, sendo o mesmo não extenso e direto ao ponto, porém exigindo a aplicação de conhecimentos de vulnerabilidades para o sucesso do ataque. Suas aplicações e ensinamentos transcendem o potencial do desenvolvedor e sua habilidade de percepção ao analisar bits, evidenciando a importância das questões de segurança em smart contracts.
Obrigado aos organizadores que mais uma vez trouxeram um evento focado em Devs, com ótimos workshops e empresas relevantes do ecossistema. Ficamos muito felizes em participar e partilhar nossa vontade de aprender, crescer e ensinar. Até uma próxima vez!!
LINK APRESENTAÇÃO: https://www.canva.com/design/DAGAbHfA3Xw/wOxKFexLwkTm-3UXK-6bCg/edit?utm_content=DAGAbHfA3Xw&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton
Guilherme Heilmann Costa Neves
Taikai: https://taikai.network/disiexis12
Github: https://github.com/0xneves/
Telefone for contact: +55 (48) 99865 3973
Luiz Eduardo Folly de Campos
Taikai: https://taikai.network/luizfolly
Github: https://github.com/luizfolly
Telefone for contact: +55 (21) 98117-3219
Rodrigo Costa Feital dos Santos
Taikai: https://taikai.network/feital07
Github: https://github.com/fefeupz
Telefone for contact: +55 (21) 97187-9178
Gustavo Sousa
Taikai: https://taikai.network/r4wd0g
Github: https://github.com/r4wd0g
Gabriel Ferreira Gomes da Silva
Taikai: https://taikai.network/gabrielfcomp
Github: https://github.com/gabrielsdev
Telefone for contact: +55 (21) 96447-7815