First time on RemoteApp ?
Table of Contents
Bonjour à tous :)
Je sais que beaucoup d’entre vous aiment avoir des choses créatives à lire et à tenter de reproduire… Sachant ça, j’ai décidé de montrer une vulnérabilité que l’on ne voit pas très souvent :)
Poking around
Cette fois, je travaillais sur une RemoteApp
et vous devez savoir que je ne suis pas du tout familier de ce genre de chose, n’ayant jamais eu l’opportunité de jouer avec par le passé.
Beaucoup de personnes préfèrent passer leur chemin en voyant quelque chose de ce genre…
Dans mon cas, je me suis dit que c’était l’occasion de découvrir comment ça fonctionne et de m’amuser un peu :)
Understanding
Tout d’abord, pour ceux qui ne connaissent pas la différence :
Quand vous vous connectez à distance sur un ordinateur, c’est généralement un RemoteDesktop
. En gros, c’est comme si vous étiez devant l’ordinateur.
La RemoteApp
, quant à elle, ouvre directement une application sans vous donner l’accès à l’ordinateur complet.
Pour vous mettre dans l’ambiance, je vais faire au mieux pour vous raconter la chose comme je l’ai vécue !
Place au spectacle…
Work in progress
Je me connecte à l’application et commence par regarder comment ça fonctionne.
C’est intéressant mais, évidemment, l’une des premières choses que l’on veut faire, c’est voir comment est faite l’appli derrière !
Sachant que nous sommes sur Windows, je commence par regarder les fonctions de l’application qui me donneraient un moyen de sortir de celle-ci pour aller sur l’ordinateur directement.
Sans surprise, ça se trouve assez facilement et, maintenant, il faut réfléchir à quoi faire ensuite.
J’ai d’abord commencé par regarder le dossier de l’application mais, comme je suis très mauvais avec ça, je me suis dit que j’allais lancer un Burp Suite et intercepter les requêtes !
Not So Fast
Comme je l’ai dit, je ne suis pas du tout familier avec ce genre de choses et, dans ma tête, j’étais plutôt en mode “allez, on télécharge Burp Suite sur la machine distante via CURL
et on commence à travailler.”
Malheureusement, ce n’était pas si simple…
Le premier problème, c’était que je ne pouvais pas lancer les fichiers où je le voulais.
Il y avait une protection en place pour être sûr que ce n’était pas possible.
Après quelques recherches, j’ai découvert qu’il me suffisait de mettre les fichiers dans le dossier de l’application pour les lancer ;)
Le deuxième était que Java n’était pas installé sur l’ordinateur, donc je devais trouver une version pour ce Windows…
Ça a vite été réglé et j’ai pu passer à la suite !
Le troisième était que je devais trouver une version de burp compatible avec ce Windows…
J’ai dû fouiller pas mal mais, j’ai finalement trouvé que la version v2020.1
était la plus récente qu’il était possible d’utiliser.\
Le dernier était de trouver comment mettre un proxy sur l’application…
Heureusement, c’était du .NET
avec un fichier .config
!
Dans un fichier config d’une application .NET
, il est possible de simplement ajouter quelque chose comme ceci pour la proxifier :
<system.net>
<defaultProxy>
<proxy
usesystemdefault="False"
proxyaddress="http://127.0.0.1:9975"
bypassonlocal="False"
/>
</defaultProxy>
</system.net>
Tout était en place.
Je n’avais plus qu’à lancer un CMD
, démarrer Burp, exporter le certificat pour l’ajouter à Windows et commencer à intercepter les requêtes émises par l’application !
Après avoir modifié le fichier de config, j’avais plus qu’à relancer ma RemoteApp
pour commencer à travailler dessus.
Wait, what ?
C’est là que j’ai été assez bête pour presque louper la chose la plus importante…
L’application était dans le dossier Program Files
de ce Windows et, j’étais capable de le modifier comme je le voulais…
Je l’ai démarrée à nouveau avec un deuxième compte et je recevais ses requêtes sur mon Burp Suite…
Oui, vous avez bien compris :
L’application n’était pas cloisonnée pour chaque utilisateur.
Je pouvais lire / écrire sur l’intégralité de son dossier.
Pour ceux qui ne comprennent pas, ça veut dire que je pouvais compromettre l’application complète et, du coup, tous les utilisateurs de celle-ci…
J’étais tellement concentré sur le fait de pouvoir intercepter les requêtes faites par celle-ci que j’ai failli passer à côté d’une vulnérabilité énorme.
Du coup, je pouvais simplement récupérer les identifiants de connexion de tous les utilisateurs et donc voler leurs comptes :)
More
Au final, il y avait plusieurs problèmes :
- Pas de cloisonnement entre utilisateurs
- Lecture / Écriture sur l'ensemble du dossier de l'app
- Possibilité de lancer n'importe quel EXE
J’ai bien évidemment signalé cette vulnérabilité !
Je me suis également amusé après avoir installé Burp Suite et, j’ai trouvé des IDOR directement dans les calls effectués par l’application.
Ce fut une découverte très intéressante pour moi.
Cet article n’est pas bien épais mais il faut savoir que, pour tout ça, il m’a tout de même fallu plusieurs heures de travail afin de tout comprendre.
Il y a beaucoup de choses dont je n’ai pas parlé et, surtout, Google m’a énormément servi (comme toujours).
Merci d’avoir pris le temps de lire :)
~ Kuromatae