Deno, un entorno de ejecución de JavaScript, se comercializa como 'Secure by Default' al requerir permisos explícitos para que el código acceda al mundo exterior. Sin embargo, una crítica técnica sostiene que este modelo es fundamentalmente inseguro porque emula la seguridad a nivel de sistema filtrando las llamadas de la biblioteca estándar en lugar de aislar el proceso a nivel de sistema operativo.

Una captura de pantalla de un listado de código que ilustra la crítica técnica del modelo de seguridad de Deno.
Un listado de código del análisis de la fuente que detalla las fallas técnicas en el sistema de permisos de Deno.goldstein.lol

Esta imagen proporciona una referencia visual al análisis específico a nivel de código utilizado para criticar el modelo de seguridad de Deno.

Una segunda captura de pantalla de un listado de código de la página de origen sobre el modelo de seguridad de Deno.
Ejemplos de código adicionales del análisis de la fuente que destacan vectores de vulnerabilidad específicos.goldstein.lol

Esta imagen complementa la primera mostrando más detalles técnicos de la crítica de seguridad.

La vulnerabilidad de las solicitudes del terminal

El sistema de permisos de Deno muestra solicitudes interactivas en el terminal para pedir permiso a los usuarios en tiempo de ejecución. Debido a que estas solicitudes se envían como texto plano a stdout y reciben entrada de stdin, comparten el mismo canal de comunicación que el código potencialmente malicioso que se está ejecutando.

Un atacante puede manipular los colores del terminal o usar códigos de escape no estándar para ocultar o falsificar estas solicitudes. Esto crea una situación en la que un usuario podría otorgar aprobación a una solicitud sin saberlo porque el estado del terminal fue alterado por el código antes de que apareciera la solicitud.

“El proceso de Deno no está realmente en un sandbox, solo finge estarlo.”

— I’m not a fan of Deno’s security model | max’s place

Escapando del sandbox a través de variables de entorno

La bandera '--allow-run' está destinada a permitir que un programa ejecute un comando específico, como 'uname'. Sin embargo, debido a que los programas se identifican por nombres en lugar de rutas únicas, un atacante puede modificar la variable de entorno PATH para apuntar a un binario malicioso con el mismo nombre.

Además, incluso si el PATH está asegurado, la mayoría de los ejecutables utilizan un cargador dinámico que puede ser influenciado por variables de entorno como LD_PRELOAD. Al inyectar una biblioteca maliciosa en el proceso de carga, un atacante puede ejecutar código arbitrario al cargar, eludiendo eficazmente los controles de permisos de Deno.

Pseudo-sandboxing frente a aislamiento real

El problema central identificado es que Deno no es un sandbox real; es un entorno de ejecución que filtra sus propias APIs de la biblioteca estándar. Este enfoque falla en el momento en que un programa interactúa con el sistema operativo a través de medios ajenos a la biblioteca específica de Deno.

Si bien el modelo de Deno puede proteger contra código malicioso 'poco inteligente', proporciona una falsa sensación de seguridad para la ejecución de código no confiable de alto riesgo. El autor concluye que la única solución robusta es utilizar un sandbox adecuado a nivel de sistema operativo para aislar el proceso por completo, en lugar de intentar gestionar una lista de llamadas permitidas de la biblioteca estándar.