A linguagem Move cita uma vulnerabilidade de verificação de segurança que pode resultar em estouro de inteiros, podendo levar a uma negação de serviço.
Análise da vulnerabilidade de estouro de inteiro na verificação de segurança de referências na linguagem Move
Recentemente, uma nova vulnerabilidade de estouro de inteiro foi descoberta no processo de verificação de segurança do uso da linguagem Move. Esta vulnerabilidade ocorre na etapa de reference_safety da unidade de código de verificação, envolvendo blocos básicos e o mecanismo de segurança de referência na linguagem Move.
A linguagem Move realiza a verificação de código antes da execução do bytecode, dividida em quatro etapas. A verificação de segurança de referências é uma das etapas importantes, usada para verificar se existem referências pendentes, se o acesso a referências mutáveis é seguro, entre outros. O processo de verificação percorre as instruções de bytecode de cada bloco básico.
Um bloco básico refere-se a uma sequência de código sem instruções de ramificação, exceto a entrada e a saída. A linguagem Move identifica blocos básicos verificando instruções de ramificação e de loop. A verificação de segurança de referências escaneia as instruções em cada bloco básico para determinar a legalidade das operações de referência.
O processo de verificação utiliza a estrutura AbstractState para representar o estado, incluindo dois componentes-chave: locals e o gráfico de empréstimos. A verificação compara os estados antes e depois da execução, funde os resultados e os propaga para os blocos subsequentes.
A vulnerabilidade ocorre na função join_. Quando a soma do comprimento dos parâmetros e do comprimento das variáveis locais excede 256, ocorre um estouro de inteiro devido ao uso do tipo u8 para iterar sobre locals. Isso pode resultar em um novo mapa de locals diferente do anterior, levando a acessos a índices inexistentes durante uma nova execução, causando uma negação de serviço.
O código PoC provoca um estouro de inteiro ao definir um número específico de parâmetros e variáveis locais, resultando na redução do comprimento do mapa de locals. Ao executar novamente, o acesso a um offset que não existe gera, por fim, um panic.
Esta vulnerabilidade demonstra que mesmo linguagens de tipo estático podem ter problemas de segurança. Recomenda-se aos designers da linguagem Move que adicionem mais verificações de segurança em tempo de execução, em vez de depender apenas das verificações na fase de validação. Isso também reflete 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.
13 Curtidas
Recompensa
13
5
Compartilhar
Comentário
0/400
Web3ExplorerLin
· 08-01 00:31
O problema de overflow precisa de auditoria agora
Ver originalResponder0
SignatureDenied
· 07-30 09:30
A qualidade do código precisa continuar a melhorar.
A linguagem Move cita uma vulnerabilidade de verificação de segurança que pode resultar em estouro de inteiros, podendo levar a uma negação de serviço.
Análise da vulnerabilidade de estouro de inteiro na verificação de segurança de referências na linguagem Move
Recentemente, uma nova vulnerabilidade de estouro de inteiro foi descoberta no processo de verificação de segurança do uso da linguagem Move. Esta vulnerabilidade ocorre na etapa de reference_safety da unidade de código de verificação, envolvendo blocos básicos e o mecanismo de segurança de referência na linguagem Move.
A linguagem Move realiza a verificação de código antes da execução do bytecode, dividida em quatro etapas. A verificação de segurança de referências é uma das etapas importantes, usada para verificar se existem referências pendentes, se o acesso a referências mutáveis é seguro, entre outros. O processo de verificação percorre as instruções de bytecode de cada bloco básico.
Um bloco básico refere-se a uma sequência de código sem instruções de ramificação, exceto a entrada e a saída. A linguagem Move identifica blocos básicos verificando instruções de ramificação e de loop. A verificação de segurança de referências escaneia as instruções em cada bloco básico para determinar a legalidade das operações de referência.
O processo de verificação utiliza a estrutura AbstractState para representar o estado, incluindo dois componentes-chave: locals e o gráfico de empréstimos. A verificação compara os estados antes e depois da execução, funde os resultados e os propaga para os blocos subsequentes.
A vulnerabilidade ocorre na função join_. Quando a soma do comprimento dos parâmetros e do comprimento das variáveis locais excede 256, ocorre um estouro de inteiro devido ao uso do tipo u8 para iterar sobre locals. Isso pode resultar em um novo mapa de locals diferente do anterior, levando a acessos a índices inexistentes durante uma nova execução, causando uma negação de serviço.
O código PoC provoca um estouro de inteiro ao definir um número específico de parâmetros e variáveis locais, resultando na redução do comprimento do mapa de locals. Ao executar novamente, o acesso a um offset que não existe gera, por fim, um panic.
Esta vulnerabilidade demonstra que mesmo linguagens de tipo estático podem ter problemas de segurança. Recomenda-se aos designers da linguagem Move que adicionem mais verificações de segurança em tempo de execução, em vez de depender apenas das verificações na fase de validação. Isso também reflete a importância da auditoria de código.