A verificação de segurança de referências na linguagem Move tem uma vulnerabilidade de estouro de inteiros que pode levar a um ataque de negação de serviço.
Descoberta de uma nova vulnerabilidade de estouro de inteiro na linguagem Move
Recentemente, uma nova vulnerabilidade de estouro de inteiro na linguagem Move foi descoberta. Esta vulnerabilidade existe durante o processo de verificação de segurança das referências na fase de validação do código, podendo levar a ataques de negação de serviço.
A linguagem Move realiza uma verificação de código antes da execução do bytecode, dividida em quatro etapas. A vulnerabilidade desta vez ocorreu na etapa de referência de segurança (reference_safety). A verificação de segurança de referência valida principalmente se existem referências pendentes no código, se o acesso a referências mutáveis é seguro e se o acesso a referências de armazenamento global é seguro.
Durante o processo de verificação, cada bloco básico será analisado. Um bloco básico refere-se a uma sequência de código sem instruções de ramificação, exceto para a entrada e saída. O Move identifica blocos básicos percorrendo o bytecode e procurando instruções de ramificação e de loop.
O módulo de verificação de segurança de referências irá escanear as instruções de bytecode de cada bloco básico na função, determinando se as operações de referência são legais. O fluxo principal inclui: executar o código do bloco básico, gerar o estado após a execução, combinar e atualizar o estado do bloco antes e depois da execução, e propagar para os blocos subsequentes.
A vulnerabilidade ocorre durante o processo de estado de mesclagem. Quando a soma do número de parâmetros de função e do número de variáveis locais excede 256, ocorre um estouro de inteiro devido ao uso do tipo u8 para armazenamento. Isso leva ao acesso a variáveis locais inexistentes durante a execução subsequente, resultando em uma panique.
Os atacantes podem construir um bloco básico em loop, utilizando essa sobrecarga para alterar o estado do bloco. Quando executado novamente, o acesso a um índice de variável local que não existe pode resultar em negação de serviço.
Esta vulnerabilidade reflete que, mesmo uma linguagem Move rigorosamente projetada, pode ter falhas de segurança que podem ser contornadas. Recomenda-se que os designers da linguagem Move adicionem mais verificações em tempo de execução para evitar que situações inesperadas ocorram. No futuro, será necessário fortalecer ainda mais a pesquisa sobre a segurança da linguagem Move.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
8 Curtidas
Recompensa
8
7
Compartilhar
Comentário
0/400
AirdropFreedom
· 07-10 20:58
A vulnerabilidade é bastante séria.
Ver originalResponder0
PretendingSerious
· 07-10 20:58
Código é rei, verificação é o mais importante.
Ver originalResponder0
NFTRegretDiary
· 07-10 20:57
É necessário corrigir urgentemente a vulnerabilidade.
A verificação de segurança de referências na linguagem Move tem uma vulnerabilidade de estouro de inteiros que pode levar a um ataque de negação de serviço.
Descoberta de uma nova vulnerabilidade de estouro de inteiro na linguagem Move
Recentemente, uma nova vulnerabilidade de estouro de inteiro na linguagem Move foi descoberta. Esta vulnerabilidade existe durante o processo de verificação de segurança das referências na fase de validação do código, podendo levar a ataques de negação de serviço.
A linguagem Move realiza uma verificação de código antes da execução do bytecode, dividida em quatro etapas. A vulnerabilidade desta vez ocorreu na etapa de referência de segurança (reference_safety). A verificação de segurança de referência valida principalmente se existem referências pendentes no código, se o acesso a referências mutáveis é seguro e se o acesso a referências de armazenamento global é seguro.
Durante o processo de verificação, cada bloco básico será analisado. Um bloco básico refere-se a uma sequência de código sem instruções de ramificação, exceto para a entrada e saída. O Move identifica blocos básicos percorrendo o bytecode e procurando instruções de ramificação e de loop.
O módulo de verificação de segurança de referências irá escanear as instruções de bytecode de cada bloco básico na função, determinando se as operações de referência são legais. O fluxo principal inclui: executar o código do bloco básico, gerar o estado após a execução, combinar e atualizar o estado do bloco antes e depois da execução, e propagar para os blocos subsequentes.
A vulnerabilidade ocorre durante o processo de estado de mesclagem. Quando a soma do número de parâmetros de função e do número de variáveis locais excede 256, ocorre um estouro de inteiro devido ao uso do tipo u8 para armazenamento. Isso leva ao acesso a variáveis locais inexistentes durante a execução subsequente, resultando em uma panique.
Os atacantes podem construir um bloco básico em loop, utilizando essa sobrecarga para alterar o estado do bloco. Quando executado novamente, o acesso a um índice de variável local que não existe pode resultar em negação de serviço.
Esta vulnerabilidade reflete que, mesmo uma linguagem Move rigorosamente projetada, pode ter falhas de segurança que podem ser contornadas. Recomenda-se que os designers da linguagem Move adicionem mais verificações em tempo de execução para evitar que situações inesperadas ocorram. No futuro, será necessário fortalecer ainda mais a pesquisa sobre a segurança da linguagem Move.