Busque la vulnerabilidad. Ejecución de código arbitrario en máquinas virtuales NVIDIA GeForce NOW

Introducción



En el contexto de la pandemia de coronavirus, la popularidad de los servicios en la nube ha aumentado, lo que le permite jugar videojuegos. Estos servicios proporcionan la potencia informática necesaria para ejecutar juegos y transmitir juegos a los dispositivos de los usuarios en tiempo real. La ventaja más obvia de este sistema es que los jugadores no necesitan tener un hardware potente. Para iniciar el cliente de servicio y pasar el tiempo para el autoaislamiento, una máquina bastante económica será suficiente: todos los cálculos se realizan en un servidor remoto.



Una de esas plataformas en la nube es GeForce NOW de NVIDIA. Según Google Trends, las búsquedas mundiales de este servicio alcanzaron su punto máximo en febrero. Esto se correlaciona con la aparición de restricciones en muchos países de Asia, Europa, América del Norte y del Sur y otras regiones. Al mismo tiempo, para Rusia, donde el régimen de autoaislamiento comenzó más tarde, en marzo, vemos una imagen similar, pero con el correspondiente retraso.



Dado el gran interés en GeForce NOW, decidimos considerar esta plataforma desde una perspectiva de seguridad.



Explorando la plataforma



En el momento de nuestra investigación, GeForce NOW estaba disponible en dos versiones: gratuita y por suscripción. Su diferencia es que cuando utiliza el servicio de forma gratuita, debe esperar hasta que esté disponible un entorno virtual gratuito. En el caso de la opción de pago, la máquina virtual comienza con una prioridad más alta y, por lo general, el jugador no necesita esperar. En términos de seguridad, ambas versiones del servicio son iguales. Por cualquier violación de las reglas de uso de la plataforma, el tiempo de ejecución de la nube se apaga inmediatamente y la cuenta del jugador infractor puede bloquearse.



El menú contiene una lista de juegos compatibles con el servicio. Para jugar, necesita una cuenta de una de las tiendas de contenido digital a la que este o aquel juego ya está vinculado (si es de pago, debe comprarlo por adelantado). En este estudio, analizamos el paquete de GeForce NOW y Steam Store.



Cuando hace clic en el botón "Reproducir" en la ventana principal de la aplicación, se inicia un entorno virtual remoto y se transmite en tiempo real desde el lado del servidor al dispositivo del usuario.



Si el juego seleccionado ya se ha comprado, se ejecutará en modo de pantalla completa y otras funciones del entorno virtual no deberían estar disponibles para el usuario. Sin embargo, si la configuración del juego te permite seleccionar el modo de operación en ventana, entonces tenemos la oportunidad de acceder a la biblioteca de Steam. Otra forma de entrar en él es elegir un juego que aún no esté en la biblioteca.







Ya está claro que podemos ejecutar código arbitrario si aprovechamos una vulnerabilidad en un juego soportado por el servicio. La única limitación es que el exploit debe entregarse a través de la red. Aquí son posibles varios escenarios. Por ejemplo, si el exploit crea un módulo ejecutable en el disco, el servicio teóricamente puede evitar que la carga útil se ejecute al rastrear la creación del archivo ejecutable en nombre del usuario del quiosco (este es un usuario estándar en las máquinas virtuales del servicio GeForce NOW). Por otro lado, si el shellcode se ejecuta como resultado de la explotación de una vulnerabilidad, el servicio no podrá defenderse.



Para realizar una exploración completa del entorno del entorno de la máquina virtual, no es necesario tener acceso a cmd.exe o powershell.exe. ¿Pero cómo lo consigues? Después de deambular un poco por el menú de la biblioteca de Steam, encontramos una forma que le permitirá ejecutar un archivo exe ejecutable arbitrario ya disponible en el sistema. Para ello usaremos la función "Agregar un juego de terceros ...".







Normalmente, agregar cmd.exe a la biblioteca como un juego de terceros no sería un problema. Sin embargo, en GeForce NOW esta función está deshabilitada y hacer clic en el botón Examinar en la captura de pantalla a continuación no conduce a nada. Sin embargo, puede elegir una de las aplicaciones existentes (y al mismo tiempo ver qué programas están instalados en las entrañas de la máquina virtual). Por ejemplo, elijamos el archivador 7-Zip (otros programas también son excelentes).







Después de agregar 7-Zip a la biblioteca de Steam, se pueden cambiar los parámetros del programa. Aquí arreglamos la ruta al archivo cmd.exe que necesitamos. ¡Hecho! Lanzamos nuestro "juego" de terceros y obtenemos un shell que funciona:







ahora podemos mirar a nuestro alrededor y descubrir dónde estamos. Lanzar winver:







Resultó que la máquina virtual de servicio se está ejecutando en Windows Server 2019.



Como resultado, ya podemos hacer lo que no se proporciona de forma predeterminada para las máquinas virtuales GeForce NOW. Pero, ¿qué más podemos hacer y qué tan peligroso será?



De acuerdo con las preguntas frecuentes de la página de informes de vulnerabilidades de NVIDIA, obtener acceso a cmd.exe en una máquina virtual GeForce NOW Service no es una vulnerabilidad. Esto se debe al hecho de que en un entorno virtual el usuario tiene derechos mínimos y también se filtran las aplicaciones lanzadas. Entonces, por ejemplo, después de iniciar powershell.exe, el tiempo de ejecución se detendrá inmediatamente.



Por lo tanto, para que nuestra investigación se tome en serio, debemos resolver dos problemas:



1) entregar la carga útil a la máquina virtual y

2) lanzarla omitiendo la lista blanca de aplicaciones.



En el proceso de resolver el primer problema, probamos los populares LOLBIN para descargar, como regsvr32, bitsadmin, etc. En todos los casos, la máquina virtual falló:







Pero la decisión vino por sí sola. GeForce NOW es un servicio para juegos (incluido el modo multijugador) donde un cliente de juego puede conectarse a un servidor de juegos y descargar sonidos, modelos, mapas y otros archivos desde allí. Por lo tanto, debemos elegir un juego que entregue un archivo arbitrario al cliente. Al mismo tiempo, no debemos preocuparnos por la extensión del archivo, ya que tenemos acceso al shell, y podemos mover el archivo descargado a donde podamos usarlo.



Pero, ¿qué pasa con la lista blanca de aplicaciones? Después de todo, incluso si logramos poner una aplicación de terceros en una máquina virtual, cuando se inicie, se bloqueará. Una de las soluciones a este problema es encontrar una aplicación de la lista de confianza, para lo cual podemos implementar el secuestro de dll. El objetivo más obvio es la jugabilidad.



Entonces, intentemos implementar esta idea usando el ejemplo de Counter-Strike: Source (de aquí en adelante lo abreviaremos como CS: S). Lo primero que hacemos es crear nuestro propio servidor CS: S, que entregará un archivo dll bajo la apariencia de, digamos, un modelo (d.mdl). A continuación, lanzamos GeForce NOW para reproducir CS: S y vamos a nuestro servidor, desde el cual se carga un archivo "modelo" previamente preparado en la máquina virtual. Ahora minimizamos el juego y ejecutamos cmd.exe. Mueva el archivo d.mdl a "Counter-Strike Source / bin / user32.dll" y reinicie el juego con el comando de la consola. Éxito: Ejecutamos código arbitrario en el contexto de un proceso confiable.



E incluso grabaron un video:







Conclusión



A pesar de que los ataques a los usuarios del servicio son potencialmente posibles, aún son poco probables. Además, los riesgos para otros usuarios del servicio serán mínimos. El hecho es que para cada nueva sesión de juego, se lanza un entorno virtual limpio en GeForce NOW. Una vez que el jugador ha terminado la sesión, la máquina virtual se apaga y se "reinicia". Por lo tanto, incluso si la vulnerabilidad se explota con éxito, el código malicioso sólo podrá funcionar mientras la máquina virtual comprometida esté en ejecución. Y para atacar a otros usuarios, los atacantes deberán salir del entorno virtual utilizando un exploit como el escape de la máquina virtual. Estos exploits son raros y difíciles de implementar. Pero si tiene éxito, no solo los usuarios individuales están en riesgo, sino todosque lanzó una sesión de juego después del compromiso inicial del servicio a través de una de las máquinas virtuales GeForce NOW.



Sin embargo, un escenario de ataque más simple y realista es utilizar una máquina virtual comprometida para extraer criptomonedas, realizar ataques DDoS y realizar otras actividades ilegales que requieren potencia informática.



Después de nuestro contacto, NVIDIA confirmó el problema y lanzó una solución para su servicio.



Cronología de eventos:



18.04.2020 — NVIDIA

20.04.2020 — NVIDIA PSIRT

13.05.2020 — NVIDIA PSIRT ,

21.08.2020 — NVIDIA PSIRT , 30.08

02.09.2020 —

03.09.2020 — NVIDIA

04.09.2020 — NVIDIA

07.09.2020 — .



All Articles