Mecanismo de segurança da linguagem Move apresenta vulnerabilidade de estouro de inteiro
Recentemente, pesquisadores de segurança descobriram uma nova vulnerabilidade de estouro de inteiro ao analisar profundamente a linguagem Move. Essa vulnerabilidade ocorre durante o processo de verificação de segurança de referências da linguagem Move e pode levar a um ataque de negação de serviço.
A linguagem Move realiza a verificação de código antes da execução do bytecode, dividida em 4 etapas. Esta vulnerabilidade existe na fase de verificação de segurança de referência (reference_safety). O principal objetivo da verificação de segurança de referência é garantir que não haja referências pendentes, acesso seguro a referências mutáveis, segurança no acesso a referências de armazenamento global, entre outros.
O processo de verificação irá percorrer 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 pela entrada e saída. A linguagem Move identifica blocos básicos analisando instruções de ramificação e instruções de loop.
A verificação de segurança utiliza a estrutura AbstractState para rastrear variáveis locais e relações de referência. Ela contém duas partes: locals e o gráfico de empréstimos. Durante a validação, comparam-se os estados antes e depois da execução e atualizam-se as fusões.
A vulnerabilidade ocorre na função join_ em estado de mesclagem. Esta função itera pelos locais usando o tipo u8, mas se o número de parâmetros e variáveis locais exceder 256, pode provocar um estouro de inteiro. Embora haja uma lógica para verificar o número de locais, não se considera o comprimento dos parâmetros.
Um atacante pode construir um bloco básico em loop, utilizando esse estouro para alterar o estado. A tentativa de acessar um índice de locals que não existe durante uma nova execução resultará em um panic, causando uma negação de serviço.
Esta vulnerabilidade reflete que mesmo linguagens de tipo estático seguro podem ter riscos de segurança. Recomenda-se que a linguagem Move acrescente mais verificações de segurança em tempo de execução, em vez de depender apenas da fase de validação. Também destaca 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.
Mecanismo de segurança de referência da linguagem Move expõe vulnerabilidade de estouro de inteiro que pode causar ataque de negação de serviço
Mecanismo de segurança da linguagem Move apresenta vulnerabilidade de estouro de inteiro
Recentemente, pesquisadores de segurança descobriram uma nova vulnerabilidade de estouro de inteiro ao analisar profundamente a linguagem Move. Essa vulnerabilidade ocorre durante o processo de verificação de segurança de referências da linguagem Move e pode levar a um ataque de negação de serviço.
A linguagem Move realiza a verificação de código antes da execução do bytecode, dividida em 4 etapas. Esta vulnerabilidade existe na fase de verificação de segurança de referência (reference_safety). O principal objetivo da verificação de segurança de referência é garantir que não haja referências pendentes, acesso seguro a referências mutáveis, segurança no acesso a referências de armazenamento global, entre outros.
O processo de verificação irá percorrer 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 pela entrada e saída. A linguagem Move identifica blocos básicos analisando instruções de ramificação e instruções de loop.
A verificação de segurança utiliza a estrutura AbstractState para rastrear variáveis locais e relações de referência. Ela contém duas partes: locals e o gráfico de empréstimos. Durante a validação, comparam-se os estados antes e depois da execução e atualizam-se as fusões.
A vulnerabilidade ocorre na função join_ em estado de mesclagem. Esta função itera pelos locais usando o tipo u8, mas se o número de parâmetros e variáveis locais exceder 256, pode provocar um estouro de inteiro. Embora haja uma lógica para verificar o número de locais, não se considera o comprimento dos parâmetros.
Um atacante pode construir um bloco básico em loop, utilizando esse estouro para alterar o estado. A tentativa de acessar um índice de locals que não existe durante uma nova execução resultará em um panic, causando uma negação de serviço.
Esta vulnerabilidade reflete que mesmo linguagens de tipo estático seguro podem ter riscos de segurança. Recomenda-se que a linguagem Move acrescente mais verificações de segurança em tempo de execução, em vez de depender apenas da fase de validação. Também destaca a importância da auditoria de código.