
Preuve de concept pour CVE-2022-45782 : jetons de réinitialisation de mot de passe dotCMS prévisibles, avec un casseur de jetons et une chaîne d'exploitation complète.
Ce dépôt contient une preuve de concept d'exploit pour CVE-2022-45782, une vulnérabilité dans dotCMS où les jetons de réinitialisation de mot de passe sont générés en utilisant la méthode non cryptographique RandomStringUtils.randomAlphanumeric(). Étant donné que ce jeton est prévisible, un attaquant peut le forcer brutalement ou le dériver et réinitialiser le mot de passe d'un compte administrateur.
Ce PoC démontre la chaîne d'exploit complète :
Ce dépôt utilise un sous-module Git contenant le craqueur pour la fonction vulnérable de génération de jetons. Il s'agit de l'implémentation C du craqueur utilisé pour dériver/deviner les jetons de réinitialisation de mot de passe générés par RandomStringUtils.randomAlphanumeric().
Cloner avec le sous-module :
git clone https://github.com/alex91ar/randomstringutils.git
dotCMS doit envoyer des emails de réinitialisation pour que le PoC fonctionne.
Modifier docker-compose.yml :
DOT_MAIL_SMTP_USER: "<smtp_email>"
DOT_MAIL_SMTP_PASSWORD: "<smtp_pass>"
(Si vous utilisez Gmail : activez le mot de passe d'application et utilisez le mot de passe d'application de 16 caractères généré.)
docker compose up
Si cela échoue (courant au premier démarrage), exécutez simplement à nouveau la commande.
Page de connexion : https://localhost:8443/dotAdmin/#/public/login
Dans dotCMS :
Ces deux comptes seront utilisés par le PoC.
randomstringutils est le brute-forcer/cracker pour le jeton non sécurisé de dotCMS.
Compilez-le en utilisant :
cd randomstringutils
gcc -lpthread -O3 -o randomutils randomutils.c
Cela produit le binaire rapide de craqueur de jetons.
python3 poc.py
En cas de succès, le script utilise le jeton admin craqué pour réinitialiser le compte admin.
Ce dépôt est destiné uniquement à des fins éducatives, académiques et de tests de sécurité autorisés. N'utilisez PAS cet exploit contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de tester.