Descoberta de nova vulnerabilidade de estouro de inteiro no mecanismo de segurança de referências da linguagem Move
Recentemente, pesquisadores de segurança descobriram uma nova vulnerabilidade de estouro de inteiro ao analisar profundamente o Aptos MoveEVM. Esta vulnerabilidade existe no processo de verificação de segurança de referência da linguagem Move, especificamente na etapa reference_safety.
A linguagem Move realiza a validação da unidade de código antes da execução do bytecode, dividindo-se em 4 etapas. A validação de segurança de referências é uma das etapas importantes, utilizada principalmente para garantir que não haja referências pendentes, que o acesso a referências mutáveis seja seguro e que o acesso a referências de armazenamento global seja seguro, entre outros.
A essência da verificação de segurança é analisar os blocos básicos dentro de cada função. Um bloco básico refere-se a uma sequência de código que não possui instruções de ramificação, exceto na entrada e na saída. O Move determina os blocos básicos percorrendo o bytecode e procurando todas as instruções de ramificação e de loop.
O processo de validação usa a estrutura AbstractState para representar o estado, que contém duas partes: o grafo de empréstimos e os locais. Durante a validação, será gerado um estado pós-execução do código do bloco básico, que será então combinado com o estado prévio para atualizar o estado do bloco e propagá-lo para os blocos subsequentes. Este processo é semelhante à ideia Sea of Nodes no V8 turbofan.
A vulnerabilidade aparece na função join_. Quando a soma do comprimento dos parâmetros da função e do comprimento das variáveis locais é superior a 256, o uso do tipo u8 para iterar sobre locais pode causar um estouro de inteiro. Embora o Move tenha um processo de verificação do número de locais, ele apenas verifica os locais e não inclui o comprimento dos parâmetros.
Aproveitando esta vulnerabilidade, um atacante pode construir um bloco de código em loop, utilizando o overflow para alterar o estado do bloco. Quando executado novamente, se o índice que a instrução precisa acessar não existir no novo mapa de locais, isso resultará em DoS.
Esta vulnerabilidade mais uma vez demonstra que até mesmo linguagens como Move, que valorizam a segurança, podem apresentar problemas. Recomenda-se que os designers da linguagem Move implementem mais verificações em tempo de execução, em vez de depender apenas das verificações de segurança na fase de validação. Ao mesmo tempo, é importante lembrar aos desenvolvedores a importância da auditoria de código.
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
12 Curtidas
Recompensa
12
5
Compartilhar
Comentário
0/400
BoredWatcher
· 5h atrás
Este bug é completamente ridículo, como pode ser tão primitivo?
Ver originalResponder0
WalletInspector
· 5h atrás
Ah, usar Rust é melhor do que usar Move.
Ver originalResponder0
MemecoinTrader
· 5h atrás
lmao outro l1 é rekt... clássico vazamento de alpha de overflow de inteiro
Ver originalResponder0
LidoStakeAddict
· 5h atrás
O Move está com problemas novamente. Tsc tsc.
Ver originalResponder0
BuyHighSellLow
· 5h atrás
Já estou a desistir de novo. Que tudo se destrua e comece de novo.
O mecanismo de segurança de referência da linguagem Move descobriu uma vulnerabilidade de estouro de inteiro que afeta o AptosMoveEVM
Descoberta de nova vulnerabilidade de estouro de inteiro no mecanismo de segurança de referências da linguagem Move
Recentemente, pesquisadores de segurança descobriram uma nova vulnerabilidade de estouro de inteiro ao analisar profundamente o Aptos MoveEVM. Esta vulnerabilidade existe no processo de verificação de segurança de referência da linguagem Move, especificamente na etapa reference_safety.
A linguagem Move realiza a validação da unidade de código antes da execução do bytecode, dividindo-se em 4 etapas. A validação de segurança de referências é uma das etapas importantes, utilizada principalmente para garantir que não haja referências pendentes, que o acesso a referências mutáveis seja seguro e que o acesso a referências de armazenamento global seja seguro, entre outros.
A essência da verificação de segurança é analisar os blocos básicos dentro de cada função. Um bloco básico refere-se a uma sequência de código que não possui instruções de ramificação, exceto na entrada e na saída. O Move determina os blocos básicos percorrendo o bytecode e procurando todas as instruções de ramificação e de loop.
O processo de validação usa a estrutura AbstractState para representar o estado, que contém duas partes: o grafo de empréstimos e os locais. Durante a validação, será gerado um estado pós-execução do código do bloco básico, que será então combinado com o estado prévio para atualizar o estado do bloco e propagá-lo para os blocos subsequentes. Este processo é semelhante à ideia Sea of Nodes no V8 turbofan.
A vulnerabilidade aparece na função join_. Quando a soma do comprimento dos parâmetros da função e do comprimento das variáveis locais é superior a 256, o uso do tipo u8 para iterar sobre locais pode causar um estouro de inteiro. Embora o Move tenha um processo de verificação do número de locais, ele apenas verifica os locais e não inclui o comprimento dos parâmetros.
Aproveitando esta vulnerabilidade, um atacante pode construir um bloco de código em loop, utilizando o overflow para alterar o estado do bloco. Quando executado novamente, se o índice que a instrução precisa acessar não existir no novo mapa de locais, isso resultará em DoS.
Esta vulnerabilidade mais uma vez demonstra que até mesmo linguagens como Move, que valorizam a segurança, podem apresentar problemas. Recomenda-se que os designers da linguagem Move implementem mais verificações em tempo de execução, em vez de depender apenas das verificações de segurança na fase de validação. Ao mesmo tempo, é importante lembrar aos desenvolvedores a importância da auditoria de código.