Vulnerabilidade crítica no Wasmtime, tempo de execução para aplicativos WebAssembly

As atualizações corretivas Wasmtime 6.0.1, 5.0.1 e 4.0.1 corrigiram a vulnerabilidade (CVE-2023-26489), à qual foi atribuído um nível crítico de perigo. A vulnerabilidade permite que dados sejam gravados em uma área de memória fora dos limites permitidos para código WebAssembly isolado, que poderia ser potencialmente usado por um invasor para executar seu código fora do ambiente WASI isolado.

Wasmtime é um tempo de execução para executar aplicativos WebAssembly com extensões WASI (WebAssembly System Interface) como aplicativos independentes regulares. O kit de ferramentas é escrito na linguagem Rust e a vulnerabilidade é causada por um erro lógico na definição de regras de endereçamento de memória linear no gerador de código Cranelift, que traduz uma representação intermediária independente de arquiteturas de hardware em código de máquina executável para a arquitetura x86_64.

Em particular, para aplicativos WebAssembly, foram calculados endereços efetivos de 35 bits em vez dos endereços de 33 bits permitidos no WebAssembly, o que mudou o limite de memória virtual permitido para operações de leitura e gravação para 34 GB, enquanto as configurações do ambiente sandbox fornecem proteção para 6 GB do endereço base. Como resultado, a faixa de memória virtual de 6 a 34 GB do endereço base ficou disponível para leitura e gravação de aplicativos WebAssembly. Essa memória pode hospedar outros ambientes WebAssembly ou componentes de tempo de execução WebAssembly.

Se não for possível atualizar a versão do Wasmtime, uma solução alternativa para bloquear o erro é especificar a opção "Config::static_memory_maximum_size(0)" para ativar uma verificação de limites separada em todos os acessos à memória linear (resultando em uma penalidade significativa de desempenho) . Outra opção é usar a configuração “Config::static_memory_guard_size(1 < 36)” para aumentar o número de Guard Pages (uma exceção lançada quando acessada) colocadas no intervalo de memória virtual problemático (resultando na reserva de uma grande quantidade de memória virtual e limitando o número de aplicativos WebAssembly em execução simultânea).

Fonte: opennet.ru

Adicionar um comentário