WebAssembly - Sicurezza

Secondo il sito web ufficiale di WebAssembly.org, disponibile all'indirizzo https://webassembly.org/docs/security/ l'obiettivo principale di WebAssembly in termini di sicurezza è il seguente:

Il modello di sicurezza di WebAssembly ha due obiettivi importanti:

  • Proteggi gli utenti da moduli difettosi o dannosi e

  • Fornire agli sviluppatori utili primitive e mitigazioni per lo sviluppo di applicazioni sicure, entro i limiti di (1).

Il codice compilato, ad esempio WASM da C / C ++ / Rust, non viene eseguito direttamente all'interno del browser e fa uso di API Javascript. Il codice WASM è in modalità sandbox, ovvero eseguito tramite wrapper API Javascript e il browser comunica con WASM utilizzando l'API.

Ecco un esempio di utilizzo di un file .wasm all'interno del browser.

Esempio - C Program

#include<stdio.h> 
int square(int n) { 
   return n*n; 
}

Useremo WASM explorer per ottenere il codice wasm -

Scarica il codice WASM e usalo per testare le API.

Esempio

<script type="text/javascript"> 
   const importObj = {
      module: {}
   }; 
   fetch("findsquare.wasm")      
      .then(bytes => bytes.arrayBuffer())          
      .then(module => WebAssembly.instantiate(module,importObj))                 
      .then(finalcode => {
         
      console.log(finalcode); console.log(finalcode.instance.exports.square(25)); 
   }); 
</script>

Produzione

Otterrai il seguente output:

Gli oggetti di esportazione hanno un riferimento alla funzione da chiamare. Per chiamare la funzione quadrato, dovrai farlo come segue:

console.log(finalcode.instance.exports.square(25));

Problemi con il codice compilato WASM

Di seguito sono riportati i problemi con il codice compilato WASM:

  • È difficile controllare se è stato inserito del codice dannoso durante la compilazione del codice in wasm. Non ci sono strumenti disponibili in questo momento per convalidare il codice.

  • Wasm è difficile da analizzare e il codice difettoso / dannoso può essere facilmente eseguito all'interno del browser.