CVE-2021-39137 é uma vulnerabilidade que foi reportada e corrigida há alguns dias. No entanto, nem todos os nós Ethereum aplicaram o patch. Observamos que essa vulnerabilidade foi explorada por uma transação maliciosa.
Transação de Ataque
https://tx.blocksecteam.com/tx/0x1cb6fb36633d270edefc04d048145b4298e67b8aa82a9e5ec4aa1435dd770ce4
Esta transação possui uma STATICCALL com o endereço 0x4. Este é um contrato inteligente pré-compilado dataCopy. O argumento é o seguinte.
inOffset = 0, inSize = 32, retOffset = 7 e retSize = 32.
O contrato inteligente 0x4

Figura 1
Como o alvo da STATICCALL é o contrato pré-compilado 0x4, ele executará a função RunPrecompiledContract mostrada na Figura 1.

Figura 2

Figura 3
De acordo com as Figuras 2/3, o contrato inteligente 0x4 simplesmente retorna a referência do ponteiro in.

Figura 4

Figura 5
A Figura 4 é o código para o opcode STATICCALL. Na linha 751, args aponta para [inOffset ~ inOffset + inSize] da memória da EVM, que é Mem[0:32].
De acordo com a Figura 5 e a análise da lógica do código do 0x04 (Figuras 2/3), o valor de retorno (ret) é uma referência para a mesma memória que args. Ou seja, ele também aponta para Mem[0:32].
Vulnerabilidade
No código vulnerável (versão 1.10.7), a linha 762 copia o conteúdo de ret para Mem[retOffset : retOffset + retOffset], isto é, copia Mem[0:32] para Mem[7:7+32]. Esta operação modifica acidentalmente o conteúdo de ret. Isso significa que o valor de retorno do contrato pré-compilado 0x4 foi alterado.
Na versão corrigida (1.10.8), é feita uma cópia de ret (linha 766). Isso corrige a vulnerabilidade, pois a cópia na linha 767 não pode modificar o conteúdo de ret.
A vulnerabilidade CVE-2021–39137 foi explorada por uma transação maliciosa devido aos nós não atualizarem seus patches a tempo. Essa falha envolvia um defeito nas operações de memória da Máquina Virtual Ethereum, mas foi corrigida na versão 1.10.8. Para garantir a segurança do sistema, recomenda-se que todos os nós Ethereum atualizem imediatamente para a versão mais recente.
Créditos
O ataque foi analisado por Siwei Wu, Yufeng Hu, Lei Wu, Yajin Zhou@BlockSec



