WebAssembly - Seguridad

Según el sitio web oficial de WebAssembly.org, que está disponible en https://webassembly.org/docs/security/ El objetivo principal de WebAssembly en términos de seguridad es el siguiente:

El modelo de seguridad de WebAssembly tiene dos objetivos importantes:

  • Proteger a los usuarios de módulos con errores o maliciosos, y

  • Proporcionar a los desarrolladores primitivas y mitigaciones útiles para desarrollar aplicaciones seguras, dentro de las limitaciones de (1).

El código compilado, es decir, WASM de C / C ++ / Rust no se ejecuta directamente dentro del navegador y hace uso de las API de JavaScript. El código de WASM está en un espacio aislado, es decir, se ejecuta a través de la envoltura de la API de JavaScript y el navegador se comunica con WASM utilizando la API.

A continuación, se muestra un ejemplo del uso de un archivo .wasm dentro del navegador.

Ejemplo - C Program

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

Usaremos el explorador WASM para obtener el código wasm -

Descargue el código WASM y utilícelo para probar las API.

Ejemplo

<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>

Salida

Obtendrá el siguiente resultado:

Los objetos de exportación tienen una referencia a la función a llamar. Para llamar a la función cuadrado, tendrá que hacerlo de la siguiente manera:

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

Problemas con el código compilado de WASM

Los siguientes son los problemas con el código compilado de WASM:

  • Es difícil comprobar si se está insertando algún código malicioso mientras se compila el código en wasm. No hay herramientas disponibles en este momento para validar el código.

  • Wasm es difícil de analizar y el código defectuoso / malicioso se puede ejecutar fácilmente dentro del navegador.