Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
givewp-cve-2026-82222-rce-lab — # Авторизованная Docker-лаборатория и чистый PoC для проверки CVE-2026-82222 RCE в GiveWP 4.16.5.1 и исправления 4.16.7.2. | Kitploit
Инструменты/GitHubGitHub/dinosn/givewp-cve-2026-82222-rce-lab
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийОбучение и ОбразованиеЛаборатории и Практика
GitHubdinosn/givewp-cve-2026-82222-rce-lab

givewp-cve-2026-82222-rce-lab

# Авторизованная Docker-лаборатория и чистый PoC для проверки CVE-2026-82222 RCE в GiveWP 4.16.5.1 и исправления 4.16.7.2.

Репозиторий
163231 месяц назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-82222 — Лаборатория проверки RCE только по маркеру в GiveWP

Материалы для исследования безопасности, предназначенные для воспроизведения и проверки CVE-2026-82222 в изолированной Docker-лаборатории.

Для прямого PoC RCE и сканирования URL используйте CVE-2026-8222-RCE.py

Вердикт

Статус: подтверждено в предоставленной лаборатории

GiveWP 4.16.5.1 позволяет изначально неаутентифицированному атакующему сохранить граф PHP-объектов, восстановить его через обработку сессий GiveWP и выполнить фиксированную маркерную команду от имени пользователя веб-сервера WordPress.

Положительный результат теста:

GiveWP:    4.16.5.1
WordPress: 6.6.2
PHP:       8.1.30
Result:    /tmp/CVE-2026-82222-RCE-GETBAG создан пользователем www-data

Сквозной результат также был воспроизведён на чистом, неинструментированном исходном коде GiveWP 4.16.5.1. GiveWP 4.16.7.2 заблокировал HTTP-носитель в протестированной конфигурации и независимо заблокировал терминальный гаджет при прямом управлении.

Это демонстрирует выполнение команд внутри контейнера WordPress. Это не демонстрирует получение root-доступа, выход из контейнера, горизонтальное перемещение или компрометацию хоста.

Границы безопасности

Используйте этот репозиторий только на системах, которыми вы владеете или на тестирование которых у вас есть явное разрешение.

Предоставленный PoC намеренно ограничен:

  • Он выполняет только touch /tmp/CVE-2026-82222-RCE-GETBAG.
  • Он не предоставляет опции произвольных команд.
  • Он не создаёт оболочку, callback, механизм персистентности или повышение привилегий.
  • Он отказывается работать с целями вне loopback, если оператор не укажет явный флаг --allow-authorized-non-loopback.
  • Docker публикует WordPress только на 127.0.0.1.
  • Имя проекта Compose формируется из пути к каталогу, поэтому один клон не может удалить контейнеры или тома другого клона.
  • Лаборатория использует чистый официальный исходный код плагина; она не инструментирует и не модифицирует уязвимую цель.

HTTP-тест создаёт одноразового донора, метаданные и строки сессии GiveWP. После тестирования используйте встроенную команду сброса.

Быстрый старт

Требования:

  • Docker с Compose v2
  • Python 3.10 или новее
  • curl
  • unzip
  • sha256sum или shasum
  • Сетевой доступ к downloads.wordpress.org для официальных архивов плагинов

Запустите полную матрицу уязвимая/исправленная версия:

./lab verify

Эта команда:

  1. Загружает GiveWP 4.16.5.1 и 4.16.7.2 с WordPress.org.
  2. Проверяет оба SHA-256 хеша.
  3. Создаёт новую лабораторию WordPress 6.6.2/PHP 8.1 только на loopback с явно отключённой стандартной регистрацией WordPress.
  4. Тестирует чистую версию 4.16.5.1 и требует создания маркера веб-пользователем.
  5. Создаёт вторую новую лабораторию с чистой версией 4.16.7.2.
  6. Требует отсутствия HTTP-маркера.
  7. Обходит вход в систему при прямом управлении и подтверждает, что исправленный терминальный ProviderForwarder также отклоняет строковый callable.

Исправленная лаборатория остаётся запущенной в конце. Удалите её с помощью:

./lab reset

Для использования другого loopback-порта:

LAB_PORT=8099 ./lab verify

Ожидаемые доказательства

Уязвимый контроль должен завершиться конкретными терминальными доказательствами:

[PASS] E1: неаутентифицированная регистрация выдала auth cookie
[PASS] E3: сериализованный граф сохранён в собственном last_name
[PASS] E4: получен nonce формы пожертвования
[PASS] E5: запись сессии достигла ожидаемого пост-синка HTTP status=500
[PASS] E6: чтение/уничтожение сессии завершено
маркер присутствует и принадлежит веб-пользователю WordPress
RESULT: УЯЗВИМЫЙ КОНТРОЛЬ ПОДТВЕРЖДЁН

Исправленный контроль должен показать:

[PASS] P1: исправленный шлюз регистрации заблокировал auth cookie
DIRECT_MARKER=absent
HTTP-маркер отсутствует, и прямой терминальный гаджет заблокирован
RESULT: ИСПРАВЛЕННЫЙ КОНТРОЛЬ ПОДТВЕРЖДЁН

HTTP 500, сохранённая нагрузка, исключение или срабатывание детектора без маркера не принимаются как доказательство RCE.

Ручной жизненный цикл лаборатории

Запустите и протестируйте уязвимую версию:

./lab start vulnerable
./lab test

Запустите и протестируйте исправленную версию:

./lab start patched
./lab test

Проверьте текущее состояние:

./lab status

Удалите контейнеры, тома, тестовых пользователей, сессии и состояние маркера:

./lab reset

Кэшированные ZIP-архивы плагинов и извлечённые ресурсы сохраняются для ускорения повторных запусков. Удалите и эти сгенерированные ресурсы с помощью:

./lab reset --purge-assets

Затронутые и протестированные версии

ВерсияОценка
GiveWP 4.16.5.1RCE воспроизведён сквозным образом
GiveWP 4.16.6–4.16.7.1Указаны как затронутые; здесь индивидуально не воспроизведены
GiveWP 4.16.7.2Исправленные отрицательные контроли воспроизведены
Более поздние версииИндивидуально не тестировались; обновитесь до последней поддерживаемой версии

Публичный advisory указывает версии до 4.16.7.1 включительно как затронутые. Этот репозиторий напрямую доказывает только две версии в своей матрице положительных/отрицательных тестов.

Ссылки:

  • Advisory Patchstack
  • CVE-2026-82222
  • Коммит исправления GiveWP
  • Официальная страница плагина GiveWP

Корневая причина

Эксплойт сочетает несколько видов поведения:

  1. GiveWP 4.16.5.1 предоставляет действие регистрации, которое создаёт и аутентифицирует донора с низкими привилегиями, даже когда стандартная регистрация WordPress отключена.
  2. Этот пользователь может сохранять сериализованные данные в собственных метаданных имени.
  3. Give\Helpers\Utils::maybeSafeUnserialize() использует allowed_classes => false, создавая __PHP_Incomplete_Class, но последующая сериализация сохраняет исходные имена классов и свойства.
  4. Граф сохраняется в сессии покупки GiveWP.
  5. Последующий неограниченный maybe_unserialize() восстанавливает поставляемые классы.
  6. Автоматическое уничтожение входит в полную POP-цепочку до system().

В HTTP-носителе требуются четыре литеральных обратных слэша в пространстве имён. Два эффективных прохода удаления уменьшают их 4 -> 2 -> 1. Нагрузка не содержит NUL-байтов, и PHP 8.1.30 был проверен на корректное восстановление обычного сериализованного имени для приватного свойства Session::$attributeName.

Полная POP-цепочка

TCPDF::__destruct()
  -> TCPDF::_destroy(true)
  -> foreach ($this->imagekeys as $file)
  -> Symfony Session::getIterator()
  -> Session::getAttributeBag()
  -> Session::getBag($this->attributeName)
  -> $this->storage->getBag($attributeName)
  -> DonationFactory->__call('getBag', [$attributeName])
  -> call_user_func_array('system', [$attributeName])
  -> system('touch /tmp/CVE-2026-82222-RCE-GETBAG')

Граф, контролируемый атакующим:

TCPDF
├── file_id = уникальный идентификатор запроса
└── imagekeys = Give\Vendors\Symfony\Component\HttpFoundation\Session\Session
    ├── attributeName = фиксированная маркерная команда
    └── storage = Give\TestData\Factories\DonationFactory
        └── loadedProviders["getBag"] = "system"

Критический скрытый переход — это неявная диспетчеризация IteratorAggregate в PHP. TCPDF::$imagekeys не типизирован, поэтому присвоение Symfony Session заставляет foreach вызывать Session::getIterator().

Маркерная команда выполняется до того, как Symfony применит тип возврата getAttributeBag(): AttributeBagInterface. Возникающие TypeError и HTTP 500 являются пост-синк эффектами.

Скачать инструмент