
Infrastructure C2 via Microsoft Teams.
Infrastructure de commande et de contrôle qui permet aux Red Teamers d'exécuter des commandes système sur des hôtes compromis via Microsoft Teams.
Elle infiltre des données dans des balises span cachées dans les messages Microsoft Teams et exfiltre les sorties de commandes dans les URL d'images des Adaptive Cards, déclenchant des requêtes sortantes vers un serveur C2.
L'absence de communication directe entre la victime et l'attaquant, combinée au fait que la victime n'envoie que des requêtes HTTP vers les serveurs Microsoft et que les antivirus n'inspectent pas les fichiers journaux de MS Teams, rend la détection plus difficile.

La vidéo suivante démontre l'utilisation du serveur pour contrôler deux hôtes compromis : l'un exécutant le nouveau Teams sur Windows 11 et l'autre exécutant l'ancien Teams sur Windows 10. Dans le premier cas, l'attaquant ne fait pas partie de la même organisation que la victime.
https://github.com/user-attachments/assets/d9fcccc1-de73-49cd-aaa7-df53303dbc6a
Remarque : Dans le premier cas, la victime a déjà accepté la conversation avec l'attaquant externe, mais dans un scénario réel où l'attaquant démarre la conversation avec la victime pour la première fois, la victime devrait confirmer la conversation avec l'attaquant (bien que ce message d'alerte puisse être facilement contourné, voir ici). Ce n'est pas un problème : comme les messages sont de toute façon mis en cache dans le fichier journal, les commandes sont reçues et exécutées même si la victime n'a pas encore visualisé ou accepté la conversation.
Serveur
wget https://github.com/cxnturi0n/convoC2/releases/download/v0.1.0-alpha/convoC2_server_amd64.tar.gz
tar -xzvf convoC2_server_amd64.tar.gz --one-top-level
root@convoC2-server-VPS:~# ./convoC2_server_amd64 -h
Usage of convoC2 server:
-t, --msgTimeout How much to wait for command output (default 30 s)
-b, --bindIp Bind IP address (default 0.0.0.0)
Agent
wget https://github.com/cxnturi0n/convoC2/releases/download/v0.1.0-alpha/convoC2_agent.tar.gz
tar -xzvf convoC2_agent.tar.gz --one-top-level
C:\Windows>convoC2_agent.exe -h
Usage of convoC2 agent:
-v, --verbose Verbose logging (default false)
-s, --server C2 server URL (i.e. http://10.11.12.13/)
-t, --timeout Teams log file polling timeout [s] (default 1)
-w, --webhook Teams Webhook POST URL
-r, --regex Regex to match command (default "<span[^>]*aria-label=\"([^\"]*)\"[^>]*></span>")
Pour que cela fonctionne, vous devrez configurer quelques éléments :

https://teams.microsoft.com/api/chatsvc/emea/v1/threads avec les identifiants uniques de la victime et de l'attaquant dans le corps. Dans la réponse, le threadId sera renvoyé dans le chemin de l'URL de l'en-tête Location.
Le jeton Bearer de la même requête est utilisé pour s'authentifier auprès de https://teams.microsoft.com/api/chatsvc/emea/v1/users/ME/conversations/<threadId>/messages, qui est le point de terminaison pour l'envoi de messages. Il suffit donc de récupérer ces trois éléments et le serveur s'occupera du reste.Après avoir démarré le serveur, vous pouvez recevoir de nouveaux agents et les contrôler, en utilisant les données précédemment obtenues pour l'authentification. Consultez la démo pour un exemple d'utilisation.
Tout d'abord, vous devrez créer un canal Teams.

Faites un clic droit sur les trois points, puis cliquez sur « Workflows ».

Dans la barre de recherche, tapez « Webhook » et cliquez sur « Post to a channel when a webhook request is received ».

Continuez avec les paramètres par défaut et enfin copiez l'url.

Commencez par rechercher la victime.

Après avoir sélectionné le compte de la victime, avec le proxy web interceptant les requêtes, vous pouvez envoyer un message factice.

Enregistrez les deux ids présents dans la requête api/chatsvc/emea/v1/threads puis DROP la requête. Le jeton d'authentification sera le jeton Bearer de la même requête.
