O módulo de segurança da linguagem Move descobriu uma nova vulnerabilidade de estouro de inteiro.

robot
Geração do resumo em andamento

Foi encontrada uma nova vulnerabilidade de estouro de inteiro no módulo de segurança da linguagem Move.

Recentemente, ao aprofundar-se na linguagem Move, foi descoberta uma nova vulnerabilidade de estouro de inteiro. Esta vulnerabilidade existe no módulo de verificação de segurança de referência, e seu processo de activação é bastante interessante. Este artigo fará uma análise aprofundada dessa vulnerabilidade, ao mesmo tempo que introduz conhecimentos de fundo relacionados à linguagem Move.

Numen Cyber descobriu uma vulnerabilidade crítica na linguagem move

A linguagem Move valida as unidades de código antes de executar o bytecode, e todo o processo de validação é dividido em 4 etapas. A vulnerabilidade descoberta desta vez ocorreu na etapa reference_safety.

O módulo de verificação de segurança é principalmente responsável por verificar se existem referências pendentes, se o acesso a referências mutáveis é seguro e se o acesso a referências de armazenamento global é seguro, entre outros. O processo de verificação começa pela função analyze_function e verifica cada bloco básico.

Na linguagem Move, 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. O sistema determina o bloco básico percorrendo o bytecode e procurando todas as instruções de ramificação e sequências de instruções de loop.

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

A linguagem Move suporta dois tipos de referências: referências imutáveis (&) e referências mutáveis (&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 para determinar se todas as operações de referência são legais. O processo de validação utiliza a estrutura AbstractState, que contém dois componentes: o gráfico de empréstimos e os locais, para garantir a segurança das referências na função.

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

Durante o processo de verificação, o sistema executará a geração de código do bloco básico para o estado post, em seguida, combinará o estado pre e o estado post para atualizar o estado do bloco. Se o estado mudar e houver um ciclo, o bloco básico será executado repetidamente até que o estado post seja igual ao estado pre ou ocorra um erro.

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

A vulnerabilidade ocorre na função join_. Quando o comprimento dos parâmetros somado ao comprimento das variáveis locais excede 256, o uso do tipo u8 para iterar sobre as locals pode causar um estouro de inteiro. Embora a linguagem Move tenha um processo de verificação do número de locals, ele apenas verifica o número de variáveis locais e não inclui o comprimento dos parâmetros.

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

Esta sobrecarga de inteiro pode levar a um ataque de negação de serviço. Um atacante pode construir um bloco de código em loop que, ao explorar a sobrecarga, altera o estado do bloco. Quando a função execute_block é executada novamente, se o índice que a instrução precisa acessar não existir no novo mapa locals do AbstractState, isso levará a uma falha do sistema.

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

Para demonstrar essa vulnerabilidade, podemos construir um bloco básico que contém instruções de desvio incondicional. Ao definir os parâmetros adequados e o número de variáveis locais, podemos fazer com que o comprimento do mapa de locais transborde para 8. Na segunda execução, tentar acessar um offset inexistente resultará em um pânico.

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

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

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

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

Numen Cyber descobriu uma 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

Esta vulnerabilidade nos lembra que, mesmo linguagens cuidadosamente projetadas, podem ter riscos de segurança. Para a linguagem Move, é aconselhável adicionar mais códigos de verificação em tempo de execução para evitar situações inesperadas. Atualmente, o Move realiza verificações de segurança principalmente na fase de verificação, mas uma vez que a verificação é contornada, pode resultar em problemas mais graves.

Como pioneiros na pesquisa de segurança da linguagem Move, continuaremos a explorar profundamente as questões de segurança relacionadas, contribuindo para o desenvolvimento saudável do ecossistema Move.

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

MOVE1.21%
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
  • 4
  • Compartilhar
Comentário
0/400
RunWithRugsvip
· 16h atrás
Por que é que houve outra vez uma vulnerabilidade de segurança?
Ver originalResponder0
TestnetFreeloadervip
· 16h atrás
Já temos uma Superfície de ataque, que bom!
Ver originalResponder0
JustAnotherWalletvip
· 16h atrás
Mais uma vez houve problemas, a auditoria levou a culpa.
Ver originalResponder0
LiquidityNinjavip
· 16h atrás
Ainda tem que corrigir o move hehe
Ver originalResponder0
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)