Módulo de segurança de referência Move descobre nova vulnerabilidade de estouro de inteiro
Recentemente, os pesquisadores, ao analisarem profundamente a linguagem Move, descobriram uma nova vulnerabilidade de estouro de inteiro. Esta vulnerabilidade existe no módulo de segurança de referências e pode levar a graves ataques de negação de serviço. Este artigo irá detalhar o processo de descoberta desta vulnerabilidade e os detalhes técnicos.
Mecanismo de segurança de referência da linguagem Move
A linguagem Move inspira-se na filosofia do Rust e 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 valida a legalidade de todas as operações de referência através da varredura de blocos básicos e instruções de bytecode nas funções.
O processo de verificação inclui as seguintes etapas:
Analisar cada bloco básico
Executar código de bloco básico para gerar estado post
Combinar o estado pré e o estado pós
Atualizar o estado do bloco e propagá-lo para blocos subsequentes
Entre eles, o estado contém dois componentes-chave, locals e borrow graph, usados para garantir a segurança das referências dentro da função.
Detalhes da Vulnerabilidade
A vulnerabilidade ocorre na função join_ que referencia o módulo de segurança. Quando a soma do comprimento dos parâmetros da função e o comprimento das variáveis locais é superior a 256, a utilização do tipo u8 para iterar sobre locals pode causar um estouro de inteiro.
Especificamente:
iter_locals() retorna um iterador do tipo u8
Quando o comprimento dos parâmetros + o comprimento das variáveis locais > 256, ocorrerá um overflow.
Os desenvolvedores parecem estar cientes de que é necessário verificar isso, mas o código real só verifica o número de variáveis locais.
Exploração de vulnerabilidades
Usando essa vulnerabilidade, é possível construir um bloco de código em loop:
Ao ser executado pela primeira vez, aciona um overflow, alterando o mapa locals.
Na segunda execução, acesso a um índice de locals que não existe, causando panic
Isto pode causar a falha de nós, resultando em um ataque de negação de serviço.
Reproduzir a Vulnerabilidade
Os pesquisadores forneceram um PoC para reproduzir esta vulnerabilidade:
Defina parameters e locals ambos como SignatureIndex(0), fazendo num_locals igual a 264
Após a primeira execução, o comprimento do novo mapa de locais torna-se 8
Na segunda execução, copyloc(57) acessa um offset inexistente, causando um panic.
Resumo e Sugestões
Esta vulnerabilidade indica:
Não existe código absolutamente seguro, a verificação estática pode ser contornada.
A auditoria de código é muito importante, pois pode descobrir a negligência dos desenvolvedores.
A linguagem Move deve aumentar a verificação em tempo de execução, e não apenas depender da verificação de segurança na fase de validação.
Os pesquisadores pedem aos designers da linguagem Move que fortaleçam os mecanismos de segurança em tempo de execução para evitar que vulnerabilidades semelhantes sejam exploradas e causem problemas mais graves.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
12 gostos
Recompensa
12
6
Partilhar
Comentar
0/400
staking_gramps
· 13h atrás
Move esta falha é muito amadora, não é?
Ver originalResponder0
ChainMaskedRider
· 13h atrás
A habilidade de escrever código não é muito refinada, não é?
Ver originalResponder0
MissedTheBoat
· 13h atrás
Mais uma falha, Move também não é grande coisa.
Ver originalResponder0
GateUser-c799715c
· 13h atrás
Quem escreveu o código? Como é que está tão fraco?
Ver originalResponder0
YieldChaser
· 13h atrás
u8 teve problemas novamente
Ver originalResponder0
BridgeJumper
· 13h atrás
Desenvolvimento não padronizado, corrigir bugs com duas lágrimas.
O módulo de segurança da linguagem Move detectou uma vulnerabilidade de estouro de inteiro que pode levar a um ataque de negação de serviço.
Módulo de segurança de referência Move descobre nova vulnerabilidade de estouro de inteiro
Recentemente, os pesquisadores, ao analisarem profundamente a linguagem Move, descobriram uma nova vulnerabilidade de estouro de inteiro. Esta vulnerabilidade existe no módulo de segurança de referências e pode levar a graves ataques de negação de serviço. Este artigo irá detalhar o processo de descoberta desta vulnerabilidade e os detalhes técnicos.
Mecanismo de segurança de referência da linguagem Move
A linguagem Move inspira-se na filosofia do Rust e 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 valida a legalidade de todas as operações de referência através da varredura de blocos básicos e instruções de bytecode nas funções.
O processo de verificação inclui as seguintes etapas:
Entre eles, o estado contém dois componentes-chave, locals e borrow graph, usados para garantir a segurança das referências dentro da função.
Detalhes da Vulnerabilidade
A vulnerabilidade ocorre na função join_ que referencia o módulo de segurança. Quando a soma do comprimento dos parâmetros da função e o comprimento das variáveis locais é superior a 256, a utilização do tipo u8 para iterar sobre locals pode causar um estouro de inteiro.
Especificamente:
Exploração de vulnerabilidades
Usando essa vulnerabilidade, é possível construir um bloco de código em loop:
Isto pode causar a falha de nós, resultando em um ataque de negação de serviço.
Reproduzir a Vulnerabilidade
Os pesquisadores forneceram um PoC para reproduzir esta vulnerabilidade:
Resumo e Sugestões
Esta vulnerabilidade indica:
Os pesquisadores pedem aos designers da linguagem Move que fortaleçam os mecanismos de segurança em tempo de execução para evitar que vulnerabilidades semelhantes sejam exploradas e causem problemas mais graves.