GiveWP: RCE без логина, патч чистит базу
🔥 GiveWP: RCE без логина, патч чистит базу
Уязвимость CVE-2026-82222 в плагине GiveWP для WordPress получила CVSS 10.0. Атакующему не нужны учётная запись и действия пользователя. Версии до 4.16.7.1 включительно уязвимы. По данным securityaffairs, на конфигурациях по умолчанию до 4.16.5.1 эксплойт работает сразу: активны ручной шлюз Test Donation и офлайн-шлюз, нужна лишь одна опубликованная форма пожертвования.
Механика цепочки небанальна. GiveWP использует собственную «безопасную» обёртку для unserialize с allowed_classes => false. Но PHP не выбрасывает сериализованный объект, а превращает его в __PHP_Incomplete_Class, сохраняя имя класса и свойства. При повторной сериализации этой заглушки атакующая нагрузка снова попадает в данные. Вредоносный объект переживает первую проверку и оседает в таблице wp_give_sessions. Позже другой запрос читает сессию и десериализует её уже без защиты. Дальше — цепочка гаджетов через TCPDF и классы Give\TestData. Итог: вызов system() с правами веб-сервера.
Патч 4.16.7.2 выпущен 27 августа, на день раньше публичного раскрытия Patchstack. Он не только закрывает дыру в коде, но и проверяет существующие записи в базе, удаляя сериализованные объекты с вредоносной нагрузкой. Это критично: предыдущее исправление 4.16.6 сохраняло такие объекты после обнаружения __PHP_Incomplete_Class. Теперь они отбрасываются. Отдельная проблема с регистрацией, игнорирующей users_can_register, осталась нерешённой — это контроль доступа, не часть RCE.
Меня цепляет не сам RCE, а то, что после обновления до 4.16.6 атакующий мог остаться внутри через уже сохранённый объект в wp_give_sessions. Патч кода не удаляет вредоносную нагрузку из базы. Проверьте таблицу и логи, если плагин стоял на уязвимой версии — просто обновить недостаточно.
#GiveWP #WordPress #RCE #PHPObjectInjection #CVE202682222
Такие разборы выходят в канале каждый день — коротко и со ссылкой на первоисточник.