Revelação da vulnerabilidade de estouro de inteiros na linguagem Move: riscos na validação de bytecode

robot
Geração do resumo em andamento

Análise de vulnerabilidades de estouro de inteiros na linguagem Move

Após uma pesquisa aprofundada na linguagem Move, descobrimos uma nova vulnerabilidade de estouro de inteiro. Esta vulnerabilidade ocorre na fase de verificação da segurança das referências no processo de validação do bytecode da linguagem Move. Este artigo irá analisar detalhadamente o processo de ativação desta vulnerabilidade e explorar alguns conceitos fundamentais da linguagem Move.

Processo de Verificação de Bytecode da Linguagem Move

A linguagem Move realiza a verificação de código antes da execução do bytecode, dividindo-se em 4 etapas. Esta vulnerabilidade ocorreu na etapa de reference_safety. Esta etapa é responsável principalmente por verificar a segurança das referências, incluindo a verificação da existência de referências suspensas e se o acesso a referências mutáveis é seguro.

O processo de verificação começa por identificar os blocos básicos no código. Um bloco básico é uma sequência de código sem instruções de ramificação, exceto para a entrada e saída. O Move determina os blocos básicos percorrendo o bytecode, procurando todas as instruções de ramificação e instruções de loop.

Numen Cyber descobre uma nova vulnerabilidade crítica na linguagem move

Segurança de referências em Move

Move suporta dois tipos de referências: referência imutável (&) e referência mutável (&mut). O módulo de segurança de referências irá escanear as instruções de bytecode de cada bloco básico na função, verificando se todas as operações de referência são legais.

O processo de verificação utiliza a estrutura AbstractState para representar o estado, que inclui o grafo de empréstimos e os locais. Durante a verificação, será comparado o estado antes e depois da execução, e os estados dos blocos serão mesclados e atualizados.

Numen Cyber descobriu uma outra vulnerabilidade crítica na linguagem move

Análise de Vulnerabilidades

A vulnerabilidade ocorre na função join_. Esta função é usada para combinar os estados antes e depois da execução, atualizando o mapa de locais e o gráfico de empréstimos. O problema é que o iterador de locais retorna um tipo u8, e um estouro acontece quando a soma do comprimento dos parâmetros e do comprimento das variáveis locais excede 256.

Embora o Move tenha um processo de verificação do número de locals, apenas verifica a quantidade de variáveis locais, não inclui o comprimento dos parâmetros.

Numen Cyber descobre mais uma vulnerabilidade crítica na linguagem move

Numen Cyber descobriu uma nova vulnerabilidade crítica na linguagem move

Numen Cyber descobriu uma outra vulnerabilidade crítica na linguagem move

Numen Cyber descobriu outra vulnerabilidade crítica na linguagem move

Exploração de Vulnerabilidades

Usar este overflow pode alterar o estado do bloco básico. No código em loop, cada vez que um bloco básico é executado, o estado muda. Quando executado novamente, se o índice acessado pela instrução não existir no novo mapa de locais, resultará em panic, permitindo assim um ataque DoS.

Numen Cyber descobriu uma nova vulnerabilidade crítica na linguagem move

Numen Cyber descobriu uma nova vulnerabilidade crítica na linguagem move

Numen Cyber descobriu uma nova vulnerabilidade crítica na linguagem move

Demonstração de PoC

Forneceu um código PoC reprodutível que, ao definir parâmetros específicos e a quantidade de variáveis locais, provoca um estouro de inteiro, levando à falha do programa.

Numen Cyber descobriu uma nova vulnerabilidade crítica na linguagem move

Numen Cyber descobriu uma nova vulnerabilidade crítica na linguagem move

Numen Cyber descobriu uma nova vulnerabilidade crítica na linguagem move

Numen Cyber descobriu uma nova vulnerabilidade crítica na linguagem move

Numen Cyber descobriu uma nova vulnerabilidade crítica na linguagem move

Resumo

Esta vulnerabilidade prova novamente a importância da auditoria de código. Para a linguagem Move, recomenda-se aumentar mais verificações de segurança em tempo de execução, e não apenas depender das verificações na fase de validação. Continuaremos a investigar profundamente as questões de segurança da linguagem Move, contribuindo para o seu desenvolvimento.

Numen Cyber descobriu uma nova vulnerabilidade crítica na linguagem move

Ver original
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.
  • Recompensa
  • 7
  • Compartilhar
Comentário
0/400
RektButStillHerevip
· 07-11 04:35
Já transbordou, tsk tsk.
Ver originalResponder0
consensus_failurevip
· 07-11 01:01
Ainda há esse bug
Ver originalResponder0
SchrodingersPapervip
· 07-09 07:32
move já enviou? Brincou e saiu mal, saiu mal.
Ver originalResponder0
DevChivevip
· 07-08 16:28
菜鸟被 fazer as pessoas de parvas
Ver originalResponder0
ProposalManiacvip
· 07-08 06:09
Já disse que a verificação de parâmetros não pode estar apenas escrita na documentação.
Ver originalResponder0
DegenWhisperervip
· 07-08 06:07
A transbordar é um pouco assustador, não é?
Ver originalResponder0
ApeWithAPlanvip
· 07-08 05:48
move宁又出事了
Responder0
  • Marcar
Faça trade de criptomoedas em qualquer lugar e a qualquer hora
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)