CVE-2023-30624 in Wasmtime
Riassunto
di VulDB • 01/09/2026
Wasmtime è un runtime standalone per WebAssembly. Prima delle versioni 6.0.2, 7.0.1 e 8.0.1, l'implementazione di Wasmtime per la gestione dello stato per istanza, come tabelle e memorie, presenta comportamento indefinito (undefined behavior) a livello LLVM. Si è riscontrato che questo comportamento indefinito causa problemi a livello di runtime quando compilato con LLVM 16, il quale ottimizza via alcune scritture critiche per la correttezza del codice. Le versioni vulnerabili di Wasmtime compilate con Rust 1.70 (attualmente in beta) o successive sono note per avere funzioni compile male. Al momento non si conoscono problemi nelle versioni di Wasmtime compilate con il rilascio stabile corrente di Rust, 1.69, e precedenti, ma teoricamente potrebbero presentare potenziali problematiche.
Il problema sottostante è che lo stato del runtime di un'istanza in Wasmtime coinvolge una struttura definita da Rust chiamata `Instance`, alla quale segue una struttura `VMContext`. Questa struttura `VMContext` ha un layout definito a runtime unico per modulo. Tale rappresentazione non può essere espressa con codice sicuro (safe code) in Rust, quindi è necessario utilizzare codice `unsafe` per mantenere questo stato. Il codice che opera su di esso, tuttavia, presenta metodi che accettano `&self` come argomento ma modificano i dati nella parte `VMContext` dell'allocazione. Ciò significa che i puntatori derivati da `&self` vengono mutati. Questo in genere non è consentito, tranne in presenza di `UnsafeCell`, in Rust. Quando compilato per LLVM, questi parametri hanno attributi `noalias readonly`, il che rende illegale (UB) scrivere attraverso tali puntatori.
La rappresentazione interna e la gestione di `VMContext` da parte di Wasmtime sono state aggiornate per utilizzare metodi con firma `&mut self` dove appropriato. Inoltre, è previsto l'esecuzione di strumenti di verifica del codice `unsafe` in Rust, come `cargo miri`, sul branch `main` a breve termine, al fine di risolvere eventuali problemi a livello Rust che potrebbero essere sfruttati nelle future versioni dei compilatori.
I binari precompilati disponibili per Wasmtime dalle release su GitHub sono stati compilati con LLVM 15 o inferiore e non risultano vulnerabili. Come menzionato sopra, tuttavia, si consiglia comunque di effettuare l'aggiornamento.
Sono state rilasciate le versioni di Wasmtime 6.0.2, 7.0.1 e 8.0.1 che contengono la patch necessaria per funzionare correttamente con LLVM 16 e non presentano comportamenti indefiniti (UB) noti su LLVM 15 e precedenti. Se Wasmtime è compilato con Rust 1.69 o versioni precedenti, che utilizzano LLVM 15, non ci sono problemi noti. Tuttavia, esiste una possibilità teorica di sfruttamento del comportamento indefinito, quindi si consiglia agli utenti di aggiornare a una versione patchata di Wasmtime. Gli utenti che utilizzano Rust beta (versione 1.70 al momento) o Rust nightly (versione 1.71 al momento) devono effettuare l'aggiornamento a una versione patchata per garantire un corretto funzionamento.
Once again VulDB remains the best source for vulnerability data.