A linguagem Move apresenta novamente uma vulnerabilidade crítica: o estouro de inteiro pode levar à falha do nó.
Recentemente, após uma análise aprofundada da linguagem Move por pesquisadores de segurança, foi descoberto um novo vulnerabilidade de overflow de inteiro. Esta vulnerabilidade ocorre durante o processo de verificação de segurança de referências da linguagem Move, podendo levar à falha do nó.
A linguagem Move realiza a validação de código antes de executar o bytecode, dividindo-se em quatro etapas. A vulnerabilidade descoberta desta vez existe na etapa reference_safety. Esta etapa é principalmente utilizada para verificar a segurança das referências, incluindo a verificação de referências pendentes, se o acesso a referências mutáveis é seguro, entre outros.
A ativação de vulnerabilidades está relacionada ao conceito de bloco básico na linguagem Move. Um bloco básico é uma sequência de código sem instruções de ramificação, exceto a entrada e a saída. O Move identifica blocos básicos percorrendo o bytecode e procurando instruções de ramificação.
Durante o processo de verificação de segurança de referências, o sistema escaneia as instruções de bytecode em cada bloco básico, avaliando se todas as operações de referência são legais. Este processo utiliza a estrutura AbstractState, que contém dois componentes importantes: o grafo de empréstimos e os locais.
A vulnerabilidade ocorre na função join_. Quando a soma do comprimento dos parâmetros e o comprimento das variáveis locais excede 256, pode ocorrer um estouro de inteiro devido ao uso do tipo u8 para representar o índice local. Embora o Move tenha um mecanismo para verificar o número de locals, o comprimento dos parâmetros não está incluído.
Usando essa vulnerabilidade de overflow, um atacante pode construir um bloco de código em loop que altera o estado do bloco. Quando o bloco básico é executado novamente, se o índice que a instrução precisa acessar não existir no novo mapa de locals, isso causará uma falha no programa.
Os pesquisadores forneceram uma prova de conceito ( PoC ) código, demonstrando como explorar essa vulnerabilidade. Ao configurar parâmetros específicos e a quantidade de variáveis locais, é possível reduzir o comprimento do mapa locals para 8. Na próxima execução, tentar acessar o índice inexistente 57 resultará em panic.
Esta vulnerabilidade prova mais uma vez que não existe código absolutamente seguro. Embora a linguagem Move tenha verificação estática antes da execução, ainda pode ser contornada por um estouro de inteiros. Os pesquisadores recomendam que os designers da linguagem Move adicionem mais códigos de verificação em tempo de execução para evitar que problemas semelhantes ocorram.
Atualmente, a equipe de pesquisa descobriu outra vulnerabilidade na linguagem Move, e compartilhará mais detalhes posteriormente. Essas descobertas têm importância significativa para a melhoria da segurança da linguagem Move.
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
4
Compartilhar
Comentário
0/400
PositionPhobia
· 07-18 07:14
Quantas armadilhas há neste código? Um que consiga passar já é uma vitória.
Vulnerabilidade de estouro de inteiros na linguagem Move: risco de referência à validação de segurança
A linguagem Move apresenta novamente uma vulnerabilidade crítica: o estouro de inteiro pode levar à falha do nó.
Recentemente, após uma análise aprofundada da linguagem Move por pesquisadores de segurança, foi descoberto um novo vulnerabilidade de overflow de inteiro. Esta vulnerabilidade ocorre durante o processo de verificação de segurança de referências da linguagem Move, podendo levar à falha do nó.
A linguagem Move realiza a validação de código antes de executar o bytecode, dividindo-se em quatro etapas. A vulnerabilidade descoberta desta vez existe na etapa reference_safety. Esta etapa é principalmente utilizada para verificar a segurança das referências, incluindo a verificação de referências pendentes, se o acesso a referências mutáveis é seguro, entre outros.
A ativação de vulnerabilidades está relacionada ao conceito de bloco básico na linguagem Move. Um bloco básico é uma sequência de código sem instruções de ramificação, exceto a entrada e a saída. O Move identifica blocos básicos percorrendo o bytecode e procurando instruções de ramificação.
Durante o processo de verificação de segurança de referências, o sistema escaneia as instruções de bytecode em cada bloco básico, avaliando se todas as operações de referência são legais. Este processo utiliza a estrutura AbstractState, que contém dois componentes importantes: o grafo de empréstimos e os locais.
A vulnerabilidade ocorre na função join_. Quando a soma do comprimento dos parâmetros e o comprimento das variáveis locais excede 256, pode ocorrer um estouro de inteiro devido ao uso do tipo u8 para representar o índice local. Embora o Move tenha um mecanismo para verificar o número de locals, o comprimento dos parâmetros não está incluído.
Usando essa vulnerabilidade de overflow, um atacante pode construir um bloco de código em loop que altera o estado do bloco. Quando o bloco básico é executado novamente, se o índice que a instrução precisa acessar não existir no novo mapa de locals, isso causará uma falha no programa.
Os pesquisadores forneceram uma prova de conceito ( PoC ) código, demonstrando como explorar essa vulnerabilidade. Ao configurar parâmetros específicos e a quantidade de variáveis locais, é possível reduzir o comprimento do mapa locals para 8. Na próxima execução, tentar acessar o índice inexistente 57 resultará em panic.
Esta vulnerabilidade prova mais uma vez que não existe código absolutamente seguro. Embora a linguagem Move tenha verificação estática antes da execução, ainda pode ser contornada por um estouro de inteiros. Os pesquisadores recomendam que os designers da linguagem Move adicionem mais códigos de verificação em tempo de execução para evitar que problemas semelhantes ocorram.
Atualmente, a equipe de pesquisa descobriu outra vulnerabilidade na linguagem Move, e compartilhará mais detalhes posteriormente. Essas descobertas têm importância significativa para a melhoria da segurança da linguagem Move.