A linguagem Move apresenta novamente uma vulnerabilidade crítica: o estouro de inteiro pode causar a falha do nó
Recentemente, pesquisadores de segurança descobriram uma nova vulnerabilidade de estouro de inteiro ao analisar profundamente a linguagem Move, que pode levar ao colapso do Nó. Essa vulnerabilidade existe no módulo de verificação de segurança de referências da linguagem Move, envolvendo análise de blocos básicos e o processo de mesclagem de estados.
A linguagem Move realiza a verificação de código antes da execução do bytecode, dividindo-se em 4 etapas. A vulnerabilidade descoberta desta vez ocorreu na fase de verificação de segurança (reference_safety). Esta fase analisa os blocos básicos na função e verifica a legalidade das operações de referência.
Durante o processo de verificação, será mantida uma estrutura AbstractState, que contém a variável local (locals) e o gráfico de relações de empréstimo (borrow graph). Ao analisar o bloco básico, serão executadas instruções dentro do bloco para gerar o estado pós, que será então combinado com o estado pré para atualizar o estado.
A vulnerabilidade surge na função join_ em estado de mesclagem. Esta função percorre a variável locals, mas locals contém os parâmetros da função e as variáveis locais. Quando a soma do número de parâmetros e do número de variáveis locais excede 256, ocorre um estouro de inteiro devido ao uso do tipo u8 para iteração.
Os atacantes podem construir blocos de código de loop especiais, aproveitando esse estouro para alterar o estado. Na próxima rodada de análise, alguns comandos podem acessar índices locais que não existem, resultando em um panic que leva ao colapso do nó.
Os pesquisadores apresentaram uma prova de conceito (PoC), que pode acionar um panic na segunda rodada de análise ao configurar 264 variáveis locais. Isso expõe a falta de verificações de segurança suficientes na linguagem Move em tempo de execução.
Esta vulnerabilidade mais uma vez demonstra que, mesmo a linguagem Move, que enfatiza a segurança, pode ter falhas. Recomenda-se que os designers da linguagem Move adicionem mais verificações de segurança em tempo de execução, em vez de depender apenas da análise estática na fase de validação. Também se alerta os desenvolvedores para fortalecerem a auditoria de código, a fim de evitar descuidos semelhantes.
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.
9 Curtidas
Recompensa
9
5
Repostar
Compartilhar
Comentário
0/400
SmartContractPhobia
· 08-02 02:38
move quebrou tudo, o nativo também quebrou
Ver originalResponder0
CoconutWaterBoy
· 07-30 03:38
move falhou novamente, já era hora de trocar
Ver originalResponder0
SchrodingerWallet
· 07-30 03:36
move voltou a falhar
Ver originalResponder0
0xDreamChaser
· 07-30 03:34
move outra vez? Não é rápido o suficiente para a graduação
Vulnerabilidade de estouro de inteiro exposta pela linguagem Move, risco de colapso do nó chama a atenção
A linguagem Move apresenta novamente uma vulnerabilidade crítica: o estouro de inteiro pode causar a falha do nó
Recentemente, pesquisadores de segurança descobriram uma nova vulnerabilidade de estouro de inteiro ao analisar profundamente a linguagem Move, que pode levar ao colapso do Nó. Essa vulnerabilidade existe no módulo de verificação de segurança de referências da linguagem Move, envolvendo análise de blocos básicos e o processo de mesclagem de estados.
A linguagem Move realiza a verificação de código antes da execução do bytecode, dividindo-se em 4 etapas. A vulnerabilidade descoberta desta vez ocorreu na fase de verificação de segurança (reference_safety). Esta fase analisa os blocos básicos na função e verifica a legalidade das operações de referência.
Durante o processo de verificação, será mantida uma estrutura AbstractState, que contém a variável local (locals) e o gráfico de relações de empréstimo (borrow graph). Ao analisar o bloco básico, serão executadas instruções dentro do bloco para gerar o estado pós, que será então combinado com o estado pré para atualizar o estado.
A vulnerabilidade surge na função join_ em estado de mesclagem. Esta função percorre a variável locals, mas locals contém os parâmetros da função e as variáveis locais. Quando a soma do número de parâmetros e do número de variáveis locais excede 256, ocorre um estouro de inteiro devido ao uso do tipo u8 para iteração.
Os atacantes podem construir blocos de código de loop especiais, aproveitando esse estouro para alterar o estado. Na próxima rodada de análise, alguns comandos podem acessar índices locais que não existem, resultando em um panic que leva ao colapso do nó.
Os pesquisadores apresentaram uma prova de conceito (PoC), que pode acionar um panic na segunda rodada de análise ao configurar 264 variáveis locais. Isso expõe a falta de verificações de segurança suficientes na linguagem Move em tempo de execução.
Esta vulnerabilidade mais uma vez demonstra que, mesmo a linguagem Move, que enfatiza a segurança, pode ter falhas. Recomenda-se que os designers da linguagem Move adicionem mais verificações de segurança em tempo de execução, em vez de depender apenas da análise estática na fase de validação. Também se alerta os desenvolvedores para fortalecerem a auditoria de código, a fim de evitar descuidos semelhantes.