Chassez la vulnérabilité. Exécution de code arbitraire sur des machines virtuelles NVIDIA GeForce NOW

introduction



Dans le contexte de la pandémie de coronavirus, la popularité des services cloud a augmenté, vous permettant de jouer à des jeux vidéo. Ces services fournissent la puissance de calcul nécessaire pour exécuter des jeux et diffuser le gameplay sur les appareils des utilisateurs en temps réel. L'avantage le plus évident d'un tel système est que les joueurs n'ont pas besoin de matériel puissant. Pour démarrer le client de service et passer le temps de l'auto-isolation, une machine assez économique suffira: tous les calculs se font sur un serveur distant.



L'une de ces plates-formes cloud est GeForce NOW de NVIDIA. Selon Google Trends, les recherches mondiales pour ce service ont atteint un sommet en février. Cela est en corrélation avec l'apparition de restrictions dans de nombreux pays d'Asie, d'Europe, d'Amérique du Nord et du Sud et d'autres régions. Dans le même temps, pour la Russie, où le régime d'auto-isolement a commencé plus tard, en mars, nous voyons une image similaire, mais avec un retard correspondant.



Compte tenu du grand intérêt pour GeForce NOW, nous avons décidé de considérer cette plate-forme d'un point de vue de la sécurité.



Explorer la plateforme



Au moment de nos recherches, GeForce NOW était disponible en deux versions - gratuite et par abonnement. Leur différence est que lorsque vous utilisez le service gratuitement, vous devez attendre qu'un environnement virtuel gratuit devienne disponible. Dans le cas de l'option payante, la machine virtuelle démarre avec une priorité plus élevée et le joueur n'a généralement pas besoin d'attendre. En termes de sécurité, les deux versions du service sont les mêmes. Pour toute violation des règles d'utilisation de la plate-forme, le runtime cloud est immédiatement désactivé et le compte du joueur fautif peut être bloqué.



Le menu contient une liste de jeux pris en charge par le service. Pour jouer, vous avez besoin d'un compte dans l'un des magasins de contenu numérique auquel tel ou tel jeu est déjà lié (s'il est payé, vous devez l'acheter à l'avance). Dans cette étude, nous examinons le bundle GeForce NOW et Steam Store.



Lorsque vous cliquez sur le bouton «Jouer» dans la fenêtre principale de l'application, un environnement virtuel distant est lancé et diffusé en temps réel du côté serveur vers l'appareil de l'utilisateur.



Si le jeu sélectionné a déjà été acheté, il fonctionnera en mode plein écran et les autres fonctionnalités de l'environnement virtuel ne devraient pas être disponibles pour l'utilisateur. Cependant, si les paramètres du jeu vous permettent de sélectionner le mode de fonctionnement fenêtré, nous avons la possibilité d'accéder à la bibliothèque Steam. Une autre façon d'y entrer est de choisir un jeu qui n'est pas encore dans la bibliothèque.







Il est déjà clair que nous pouvons exécuter du code arbitraire si nous exploitons une vulnérabilité dans un jeu supporté par le service. La seule limitation est que l'exploit doit être diffusé sur le réseau. Différents scénarios sont possibles ici. Par exemple, si un exploit crée un exécutable sur le disque, le service peut théoriquement empêcher l'exécution de la charge utile en traçant la création de l'exécutable en tant qu'utilisateur du kiosque (il s'agit d'un utilisateur standard dans les machines virtuelles du service GeForce NOW). En revanche, si le shellcode est exécuté suite à l'exploitation d'une vulnérabilité, le service ne pourra pas se défendre.



Pour effectuer une exploration complète de l'environnement de l'environnement de la machine virtuelle, nous n'avons pas besoin d'avoir accès à cmd.exe ou powershell.exe. Mais comment l'obtenir? Après avoir parcouru un peu le menu de la bibliothèque Steam, nous trouvons un moyen qui vous permettra d'exécuter un fichier exécutable arbitraire déjà disponible dans le système. Pour ce faire, nous utiliserons la fonction "Ajouter un jeu tiers ...".







Normalement, l'ajout de cmd.exe à la bibliothèque en tant que jeu tiers ne pose pas de problème. Cependant, cette fonctionnalité est désactivée dans GeForce NOW, et cliquer sur le bouton Parcourir dans la capture d'écran ci-dessous ne fait rien. Néanmoins, vous pouvez choisir l'une des applications existantes (et en même temps voir quels programmes sont installés dans les entrailles de la machine virtuelle). Par exemple, choisissons l'archiveur 7-Zip (d'autres programmes sont également excellents).







Après avoir ajouté 7-Zip à la bibliothèque Steam, les paramètres du programme peuvent être modifiés. Ici, nous corrigeons le chemin d'accès au fichier cmd.exe dont nous avons besoin. Terminé! Nous lançons notre "jeu" tiers et obtenons un shell fonctionnel:







nous pouvons maintenant regarder autour de nous et savoir où nous en sommes. Lancer winver:







il s'est avéré que la machine virtuelle de service fonctionne sur Windows Server 2019.



Par conséquent, nous pouvons déjà faire ce qui n'est pas fourni par défaut pour les machines virtuelles GeForce NOW. Mais que pouvons-nous faire d'autre et à quel point cela sera-t-il dangereux?



Selon la FAQ sur la page NVIDIA Vulnerability Reporting, accéder à cmd.exe dans une VM de service GeForce NOW n'est pas une vulnérabilité. Cela est dû au fait que dans un environnement virtuel, l'utilisateur dispose de droits minimaux et qu'il existe également un filtrage des applications lancées. Ainsi, par exemple, après le démarrage de powershell.exe, le runtime s'arrêtera immédiatement.



Ainsi, pour que notre recherche soit prise au sérieux, nous devons résoudre deux problèmes:



1) livrer la charge utile à la machine virtuelle, et

2) la lancer en contournant la liste blanche des applications.



Dans le processus de résolution du premier problème, nous avons essayé les LOLBIN populaires pour le téléchargement, tels que regsvr32, bitsadmin, etc. Dans tous les cas, la machine virtuelle s'est plantée:







Mais la décision est venue d'elle-même. GeForce NOW est un service de jeux (y compris multijoueur) où un client de jeu peut se connecter à un serveur de jeu et télécharger des sons, des modèles, des cartes et d'autres fichiers à partir de là. Par conséquent, nous devons choisir un jeu qui nous permettra de livrer un fichier arbitraire au client. En même temps, nous n'avons pas à nous soucier de l'extension du fichier, car nous avons accès au shell, et nous pouvons déplacer le fichier téléchargé là où nous pouvons l'utiliser.



Mais qu'en est-il de la liste blanche des applications? Après tout, même si nous parvenons à mettre une application tierce dans une machine virtuelle, au démarrage, elle plantera. L'une des solutions à ce problème est de trouver une application dans la liste de confiance pour laquelle nous pouvons implémenter le détournement de dll. Le but le plus évident est le gameplay.



Alors, essayons d'implémenter cette idée en utilisant l'exemple de Counter-Strike: Source (ci-après nous l'abrégerons en CS: S). La première chose que nous faisons est de créer notre propre serveur CS: S, qui servira un fichier dll sous le couvert, par exemple, d'un modèle (d.mdl). Ensuite, nous lançons GeForce NOW pour lire CS: S et allons sur notre serveur, à partir duquel un fichier "modèle" préalablement préparé est chargé sur la machine virtuelle. Maintenant, nous minimisons le jeu et exécutons cmd.exe. Déplacez le fichier d.mdl vers «Counter-Strike Source / bin / user32.dll» et redémarrez le jeu avec la commande console. Succès: nous avons exécuté du code arbitraire dans le contexte d'un processus de confiance.



Et ils ont même enregistré une vidéo:







Conclusion



Bien que les attaques contre les utilisateurs du service soient potentiellement possibles, elles sont encore peu probables. De plus, les risques pour les autres utilisateurs du service seront minimes. Le fait est que pour chaque nouvelle session de jeu, un environnement virtuel propre est lancé dans GeForce NOW. Une fois que le joueur a terminé la session, la machine virtuelle est arrêtée et "réinitialisée". Par conséquent, même si la vulnérabilité est exploitée avec succès, le code malveillant ne pourra fonctionner que tant que la machine virtuelle compromise est en cours d'exécution. Et pour attaquer d'autres utilisateurs, les attaquants devront sortir de l'environnement virtuel en utilisant un exploit tel que Virtual machine escape. De tels exploits sont rares et difficiles à mettre en œuvre. Mais en cas de succès, ce ne sont pas seulement les utilisateurs individuels qui sont à risque, mais tout le mondequi a lancé une session de jeu après le compromis initial du service via l'une des machines virtuelles GeForce NOW.



Cependant, un scénario d'attaque plus simple et plus réaliste consiste à utiliser une machine virtuelle compromise pour extraire des crypto-monnaies, mener des attaques DDoS et effectuer d'autres activités illégales nécessitant de la puissance de calcul.



Après notre contact, NVIDIA a confirmé le problème et a publié un correctif pour leur service.



Chronologie des événements:



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