Nas atualizações corretivas do Wasmtime 6.0.1, 5.0.1 e 4.0.1, uma vulnerabilidade (CVE-2023-26489) foi corrigida, classificada com nível crítico de gravidade. A vulnerabilidade permite a gravação de dados em uma área de memória fora dos limites permitidos para o código WebAssembly isolado, que pode ser potencialmente explorada por um invasor para executar seu código fora do ambiente isolado WASI.
O Wasmtime é um runtime para a execução de aplicações WebAssembly com extensões WASI (WebAssembly System Interface) como aplicações isoladas normais. A ferramenta é escrita em Rust, e a vulnerabilidade foi causada por um erro lógico na definição das regras de endereçamento linear de memória no gerador de código Cranelift, que traduz uma representação intermediária independente da arquitetura para código de máquina executável para a arquitetura x86_64.
Em particular, para aplicações WebAssembly, foram calculados endereços efetivos de 35 bits em vez dos endereços de 33 bits permitidos no WebAssembly, o que deslocou o limite permitido para operações de leitura e gravação de memória virtual para 34 GB, enquanto as configurações do ambiente sandbox fornecem proteção para 6 GB a partir do endereço base. Como resultado, o intervalo de memória virtual de 6 a 34 GB a partir do endereço base tornava-se acessível para leitura e gravação pelas aplicações WebAssembly. Nessa memória, podem ser alocados outros ambientes WebAssembly ou componentes do runtime WebAssembly.
Caso não seja possível atualizar a versão do Wasmtime, como soluções alternativas para bloquear o erro, menciona-se a indicação da opção "Config::static_memory_maximum_size(0)" para habilitar uma verificação de limites obrigatória em qualquer acesso à memória linear (o que resulta em uma significativa redução de desempenho). Outra alternativa é usar a configuração "Config::static_memory_guard_size(1 < 36)" para aumentar o número de páginas de guarda de memória (Guard Page, que gera uma exceção ao ser acessada), alocadas na faixa problemática de memória virtual (resultando na reserva de um grande volume de memória virtual e limitando o número de aplicações WebAssembly executadas simultaneamente).
Fonte: opennet.ru
