Análise da vulnerabilidade de estouro de inteiros no módulo de segurança da linguagem Move
Este artigo analisará em profundidade uma nova vulnerabilidade de estouro de inteiro encontrada na linguagem Move. Esta vulnerabilidade existe no módulo de verificação de segurança de referência e pode causar a falha de nós. Através da explicação deste artigo, os leitores terão uma compreensão mais profunda da linguagem Move.
Contexto da vulnerabilidade
A linguagem Move realiza a verificação de código antes da execução do bytecode, dividida em 4 etapas. Esta vulnerabilidade ocorre durante a etapa de verificação de segurança (reference_safety).
O principal processo de verificação de segurança é:
Identificar blocos de código básicos
Analisar cada bloco básico
Estado antes e depois da fusão
Propagar o estado para os blocos subsequentes
O chave é manter a estrutura AbstractState, que inclui locals e o gráfico de empréstimos para garantir a segurança das referências.
Detalhes da Vulnerabilidade
A vulnerabilidade existe na função join_. Quando o comprimento dos parâmetros da função somado ao comprimento das variáveis locais é superior a 256, devido à utilização da iteração do tipo u8, ocorre um estouro de inteiro.
Especificamente:
iter_locals() retorna um iterador do tipo u8
Ocorre um overflow quando o comprimento do parâmetro + o comprimento da variável local > 256
O desenvolvedor apenas verificou o número de variáveis locais, ignorando o comprimento dos parâmetros.
Exploração de Vulnerabilidades
É possível construir um bloco básico de loop que altera o estado usando overflow:
Definir o comprimento total de parâmetros e variáveis locais > 256
Após a primeira execução, o tamanho dos novos locals transbordou e ficou menor.
Ao executar novamente, acessar um índice locals que não existe provoca panic
Demonstração PoC
Forneceu código PoC reproduzível, incluindo um bloco básico em loop infinito. Ao definir parâmetros adequados e comprimento de variáveis locais, é possível desencadear um DoS.
Conclusão
Esta vulnerabilidade demonstra novamente que:
Não há código absolutamente seguro.
A importância da auditoria de código
O tempo de execução da linguagem Move precisa de mais verificações de segurança
A validação estática pode ser contornada, a segurança em tempo de execução é igualmente importante
Como líder em pesquisa de segurança da linguagem Move, continuaremos a explorar profundamente as questões de segurança relacionadas e a compartilhar os resultados da pesquisa com a comunidade.
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.
21 Curtidas
Recompensa
21
8
Compartilhar
Comentário
0/400
WhaleMinion
· 07-26 05:03
o ataque de overflow já chegou
Ver originalResponder0
MevTears
· 07-24 04:19
Quem escreveu este código não deve verificar dez vezes.
Ver originalResponder0
GasFeeCryer
· 07-23 13:34
As falhas podem ser exploradas, e o DoS é cheiroso.
Ver originalResponder0
TopEscapeArtist
· 07-23 05:47
Errar é o dia-a-dia de um Bear Market, é necessário ter mais cuidado ao mover pedras.
Ver originalResponder0
TokenomicsTherapist
· 07-23 05:45
Esse bug é realmente assustador.
Ver originalResponder0
TxFailed
· 07-23 05:43
lmao clássico estouro de inteiro... aprendi sobre isso da forma cara, para ser sincero
Ver originalResponder0
SchrödingersNode
· 07-23 05:40
Fico nervoso, como é que há tantos problemas?
Ver originalResponder0
AltcoinMarathoner
· 07-23 05:40
hodling através da tempestade de overflow de inteiros... apenas mais um marco na ultra web3
Análise profunda da vulnerabilidade de estouro de inteiro no módulo de segurança da linguagem Move
Análise da vulnerabilidade de estouro de inteiros no módulo de segurança da linguagem Move
Este artigo analisará em profundidade uma nova vulnerabilidade de estouro de inteiro encontrada na linguagem Move. Esta vulnerabilidade existe no módulo de verificação de segurança de referência e pode causar a falha de nós. Através da explicação deste artigo, os leitores terão uma compreensão mais profunda da linguagem Move.
Contexto da vulnerabilidade
A linguagem Move realiza a verificação de código antes da execução do bytecode, dividida em 4 etapas. Esta vulnerabilidade ocorre durante a etapa de verificação de segurança (reference_safety).
O principal processo de verificação de segurança é:
O chave é manter a estrutura AbstractState, que inclui locals e o gráfico de empréstimos para garantir a segurança das referências.
Detalhes da Vulnerabilidade
A vulnerabilidade existe na função join_. Quando o comprimento dos parâmetros da função somado ao comprimento das variáveis locais é superior a 256, devido à utilização da iteração do tipo u8, ocorre um estouro de inteiro.
Especificamente:
Exploração de Vulnerabilidades
É possível construir um bloco básico de loop que altera o estado usando overflow:
Demonstração PoC
Forneceu código PoC reproduzível, incluindo um bloco básico em loop infinito. Ao definir parâmetros adequados e comprimento de variáveis locais, é possível desencadear um DoS.
Conclusão
Esta vulnerabilidade demonstra novamente que:
Como líder em pesquisa de segurança da linguagem Move, continuaremos a explorar profundamente as questões de segurança relacionadas e a compartilhar os resultados da pesquisa com a comunidade.