Vulnerabilidad de Inyección de Expresiones en OpenRemote

La plataforma IoT OpenRemote contiene dos vulnerabilidades críticas interrelacionadas en su motor de reglas que permiten a atacantes ejecutar código arbitrario en el servidor, logrando un compromiso completo del sistema.

Fallas de Seguridad Identificadas

Motor JavaScript Nashorn sin Sandbox: Las reglas JavaScript se ejecutan mediante ScriptEngine.eval() de Nashorn sin ningún tipo de sandboxing, filtrado de clases o restricciones de acceso. Cualquier usuario no privilegiado con el rol write:rules puede crear conjuntos de reglas JavaScript maliciosas que acceden a clases Java arbitrarias como java.lang.Runtime para RCE.

Sandbox Groovy Inactivo: El motor de reglas Groovy tiene definido un filtro de seguridad GroovyDenyAllFilter que nunca se registra (el código de registro está comentado), haciendo que el SandboxTransformer sea completamente inefectivo. Aunque las reglas Groovy están restringidas a superusuarios, la ausencia de sandboxing viola el principio de defensa en profundidad.

Impacto y Explotación

Los atacantes pueden explotar estas vulnerabilidades para:

  • Ejecución remota de código con privilegios root en el servidor
  • Robo de variables de entorno incluyendo credenciales de base de datos
  • Lectura arbitraria de archivos del sistema
  • Bypass completo del aislamiento multi-tenant, accediendo a datos confidenciales de otros inquilinos mediante reflexión Java para extraer servicios internos

La vulnerabilidad afecta especialmente a despliegues multi-tenant donde usuarios de un realm pueden comprometer datos de otros realms, violando completamente el modelo de seguridad de la plataforma.