O módulo de segurança da linguagem Move apresenta uma vulnerabilidade de estouro de inteiro
Recentemente, investigadores de segurança descobriram uma grave vulnerabilidade de estouro de inteiro ao analisarem a linguagem Move. Esta vulnerabilidade existe no módulo de verificação de segurança de referências e pode levar a ataques de negação de serviço. Este artigo irá detalhar o princípio e o impacto desta vulnerabilidade.
Contexto da vulnerabilidade
A linguagem Move realiza uma verificação de código antes da execução do bytecode, incluindo uma verificação de segurança de referências. Este processo é dividido em várias etapas, e a vulnerabilidade descoberta desta vez ocorreu na fase de verificação de segurança de referências.
O principal processo de verificação de segurança é:
Dividir o código em blocos básicos
Analisar cada bloco básico
Estado antes e depois da análise de fusão
Propagar o resultado para os blocos subsequentes
Um struct AbstractState é utilizado para representar o estado de análise, contendo informações sobre locals e o gráfico de empréstimos.
Detalhes da Vulnerabilidade
A vulnerabilidade ocorre na função join_ do estado de análise de mesclagem. Esta função itera sobre os locals usando o tipo u8, mas se a soma do comprimento dos parâmetros e do comprimento das variáveis locais exceder 256, ocorrerá um estouro de inteiro.
Especificamente:
usar self.iter_locals() para iterar sobre locals na função join_
iter_locals() retorna um iterador do tipo u8
Se o comprimento do parâmetro + comprimento da variável local > 256, o iterador irá transbordar.
Embora o Move tenha um processo de verificação do número de locais, ele apenas verifica o número de variáveis locais, sem incluir o comprimento dos parâmetros.
Exploração de vulnerabilidades
Um atacante pode construir um bloco de código em loop, utilizando um overflow para alterar o estado do bloco:
O número total de parâmetros e variáveis locais deve ser maior que 256
Após a primeira execução, o comprimento do novo mapa de locais ficará menor devido ao estouro.
Acesso a um índice de locals que não existe durante a execução novamente causará panic
Isto pode provocar um ataque de negação de serviço ao nó.
Impacto da Vulnerabilidade
Esta vulnerabilidade pode levar a:
O verificador de bytecode Move falhou.
Nós de blockchain dependentes do Move recusam serviços
Contornar algumas verificações de segurança
Sugestões de Correção
Adicionar verificação do comprimento dos parâmetros na verificação de fronteira de locals
Use tipos inteiros maiores como u16 para iterar sobre locals
Adicionar verificações de segurança adicionais em tempo de execução
Resumo
Esta vulnerabilidade mais uma vez demonstra que, mesmo linguagens bem projetadas podem ter falhas de segurança. Para a linguagem Move, recomenda-se adicionar verificações de segurança necessárias não apenas na fase de validação, mas também em tempo de execução. Os pesquisadores de segurança continuarão a analisar a linguagem Move em profundidade para descobrir mais problemas potenciais.
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
22 gostos
Recompensa
22
6
Republicar
Partilhar
Comentar
0/400
BackrowObserver
· 08-11 11:51
move mais uma vez falhou
Ver originalResponder0
MidnightTrader
· 08-10 07:32
Quem é o novato que escreveu este código? Estou de joelhos.
Ver originalResponder0
MevShadowranger
· 08-10 07:30
Está a brincar com o overflow de inteiros.
Ver originalResponder0
WagmiOrRekt
· 08-10 07:29
Ainda bem que eu fechei todas as posições do Move antes.
Ver originalResponder0
CommunityWorker
· 08-10 07:27
move vai ter outro colapso? Para que tanto alvoroço?
Ver originalResponder0
CryingOldWallet
· 08-10 07:26
Mais uma falha? O move também já não é tão bom, certo?
Vulnerabilidade de estouro de inteiro no módulo de segurança de referência da Move pode causar negação de serviço no nó
O módulo de segurança da linguagem Move apresenta uma vulnerabilidade de estouro de inteiro
Recentemente, investigadores de segurança descobriram uma grave vulnerabilidade de estouro de inteiro ao analisarem a linguagem Move. Esta vulnerabilidade existe no módulo de verificação de segurança de referências e pode levar a ataques de negação de serviço. Este artigo irá detalhar o princípio e o impacto desta vulnerabilidade.
Contexto da vulnerabilidade
A linguagem Move realiza uma verificação de código antes da execução do bytecode, incluindo uma verificação de segurança de referências. Este processo é dividido em várias etapas, e a vulnerabilidade descoberta desta vez ocorreu na fase de verificação de segurança de referências.
O principal processo de verificação de segurança é:
Um struct AbstractState é utilizado para representar o estado de análise, contendo informações sobre locals e o gráfico de empréstimos.
Detalhes da Vulnerabilidade
A vulnerabilidade ocorre na função join_ do estado de análise de mesclagem. Esta função itera sobre os locals usando o tipo u8, mas se a soma do comprimento dos parâmetros e do comprimento das variáveis locais exceder 256, ocorrerá um estouro de inteiro.
Especificamente:
Embora o Move tenha um processo de verificação do número de locais, ele apenas verifica o número de variáveis locais, sem incluir o comprimento dos parâmetros.
Exploração de vulnerabilidades
Um atacante pode construir um bloco de código em loop, utilizando um overflow para alterar o estado do bloco:
Isto pode provocar um ataque de negação de serviço ao nó.
Impacto da Vulnerabilidade
Esta vulnerabilidade pode levar a:
Sugestões de Correção
Resumo
Esta vulnerabilidade mais uma vez demonstra que, mesmo linguagens bem projetadas podem ter falhas de segurança. Para a linguagem Move, recomenda-se adicionar verificações de segurança necessárias não apenas na fase de validação, mas também em tempo de execução. Os pesquisadores de segurança continuarão a analisar a linguagem Move em profundidade para descobrir mais problemas potenciais.