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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-28695-craft-rce-bypass — Аутентифицированное **слепое** удалённое выполнение кода в Craft CMS. Исправление для CVE-2026-28695 | Kitploit
Инструменты/GitHubGitHub/gbuyssens/cve-2026-28695-craft-rce-bypass
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийПост-эксплуатацияТестирование на ПроникновениеRed TeamingИнструмент Удаленного ДоступаРазработка Полезной Нагрузки
GitHubgbuyssens/cve-2026-28695-craft-rce-bypass

CVE-2026-28695-craft-rce-bypass

Аутентифицированное **слепое** удалённое выполнение кода в Craft CMS. Исправление для CVE-2026-28695

Репозиторий
15 дней назадЕщё не проверено

Популярное

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

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

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

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

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

Обход патча CVE-2026-28695 — аутентифицированный RCE в Craft CMS ≤ 5.9.8 (element-search)

CVSS 3.x : 8.8 HIGH   (приблизительно — проверьте)
CWE      : CWE-502 (Unsafe Object Instantiation) + CWE-1336 (SSTI origin)
Base     : CVE-2026-28695  (SSTI через create() + Symfony Process)
Fix      : исправление из advisory e31e508 (ограничивает create() до BaseObject) — ОБОЙДЕНО здесь
Affects  : Craft CMS ≤ 5.9.8 с применённым исправлением CVE-2026-28695

Аутентифицированное, слепое удалённое выполнение кода в Craft CMS. Официальное исправление для CVE-2026-28695 лишь ограничивает create() подклассами yii\base\BaseObject. Гаджет yii\behaviors\AttributeTypecastBehavior является BaseObject, но всё ещё достигает точки вызова call_user_func(), поэтому он проходит фильтр. Доставляется через не-Twig действие admin/actions/element-search/search, что также обходит CRAFT_ENABLE_TWIG_SANDBOX. Достаточно учётной записи Content Editor.


Содержание

  • Краткое описание уязвимости
  • Почему PoC для CVE-2026-28695 не работает на 5.9.8
  • Обход (цепочка гаджетов)
  • Ограничение escapeshellcmd
  • Цепочка атаки
  • Затронутые версии
  • Этот репозиторий
  • Использование
  • Устранение
  • Ссылки

Краткое описание уязвимости

Контроллер element-search в Craft десериализует JSON атакующего в живые PHP-объекты через механизмы Craft::createObject() / Instance фреймворка Yii. Прикрепив AttributeTypecastBehavior, чей attributeTypes сопоставляет атрибут с вызываемым [Psy\Readline\Hoa\ConsoleProcessus, execute], и вызвав событие beforeSave, приведение типов превращается в:

call_user_func([Psy\Readline\Hoa\ConsoleProcessus, "execute"], "<CMD>")

Эндпоинт всегда отвечает HTTP 500 и не возвращает вывод команды — выполнение слепое.


Почему PoC для CVE-2026-28695 не работает на 5.9.8

  • CVE-2026-28695 = SSTI через create() + Symfony Process, достигаемый из Twig-точки (обычно Entry Types → Title Format).
  • На 5.9.8 коммит-исправление e31e508 ограничивает create() подклассами BaseObject, а цель также работает с CRAFT_ALLOW_ADMIN_CHANGES=false (settings → 403) и CRAFT_ENABLE_TWIG_SANDBOX=true. Документированный вектор закрыт трижды.
  • Урок: сопоставляйте точную версию с коммитом-исправлением, не действуйте по имени CVE. Здесь исправление старше развёрнутой сборки → ищите обход фильтра, а не сырой PoC.

Обход (цепочка гаджетов)

yii\behaviors\AttributeTypecastBehavior  ->  Psy\Readline\Hoa\ConsoleProcessus::execute

Двойной обход, по построению:

  1. Песочница — element-search — это путь через PHP-объекты, не рендеринг Twig. CRAFT_ENABLE_TWIG_SANDBOX ограничивает только шаблонизатор, поэтому он здесь не применяется.
  2. Патч — исправление ограничивает create() до BaseObject. AttributeTypecastBehavior → yii\base\Behavior → yii\base\BaseObject, поэтому он удовлетворяет новому ограничению, при этом всё ещё предоставляя точку выполнения. Исправление закрывает одно семейство классов, а не класс BaseObject.

Эндпоинт:

POST /index.php?p=admin/actions/element-search/search
X-CSRF-Token: <dashboard csrf>
X-Requested-With: XMLHttpRequest
Accept: application/json

Ограничение escapeshellcmd

Hoa\ConsoleProcessus::execute() выполняет команду через escapeshellcmd():

  • Нейтрализовано: | && ; > < $() ' " → нет цепочек, нет пайпов, нет перенаправления, нет классического bash reverse shell.
  • Проходит: : , /
  • Результат: один бинарник + аргументы, без метасимволов оболочки.

Именно поэтому полезная нагрузка — это единый bind-шелл socat TCP-LISTEN,fork EXEC (аргументы в : / , / /), а не reverse shell.


Цепочка атаки

   Attacker (Content Editor)                Craft CMS 5.9.8
        |                                        |
        |  GET /admin/login  (scrape CSRF)       |
        |--------------------------------------->|
        |  POST users/login (jenny:******)       |
        |--------------------------------------->|
        |  GET /admin/dashboard (JS csrf)        |
        |<---------------------------------------|
        |  POST element-search/search            |
        |    AttributeTypecastBehavior gadget    |
        |    typecastBeforeSave = "<CMD>"        |
        |--------------------------------------->|  call_user_func(
        |  HTTP 500  (blind, no output)          |    [ConsoleProcessus,execute], CMD)
        |<---------------------------------------|  -> escapeshellcmd(CMD) -> exec
        |                                        |
        |  oracle: "sleep 5" -> +~5s latency     |
        |  shell:  socat TCP-LISTEN:4445 bind     |

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

СтатусВерсии
УязвимоCraft CMS ≤ 5.9.8 с исправлением CVE-2026-28695
ПримечаниеГаджет требует аутентифицированной сессии CP

Этот репозиторий

ФайлРоль
exploit.pyPoC: логин → проверка timing-oracle → одна команда → bind shell
README.mdЭтот файл

Использование

Требуется requests (pip install requests).

# 1. Prove code execution (timing oracle: sleep 5 must add ~5s)
python3 exploit.py http://example.lab --check

# 2. Fire a single blind command (one binary + args, no metachars)
python3 exploit.py http://example.lab "sleep 5"

# 3. Plant a persistent bind shell as the web user, then connect
python3 exploit.py http://example.lab --bind 4445
nc IP or exemple.lab 4445

# custom creds
python3 exploit.py http://exemple.lab -u User -p 'SecureP4$$!' --bind

Что происходит:

  1. Скрапится CSRF логина, выполняется аутентификация в CP, извлекается CSRF действия dashboard.
  2. Гаджет AttributeTypecastBehavior отправляется в element-search.
  3. --check доказывает слепое выполнение через инъецированную задержку; --bind поднимает слушатель socat.

Устранение

  1. Обновите Craft CMS до релиза, который ограничивает инстанцирование объектов на всех путях десериализации входных данных (не только create()), и проведите аудит обработки условий в element-search.
  2. Оставьте CRAFT_ALLOW_ADMIN_CHANGES=false и минимизируйте привилегии Content Editor — аутентификация здесь единственное предварительное условие.
  3. Удалите/обновите встроенную зависимость psy/psysh (Hoa) там, где достижим гаджет ConsoleProcessus::execute.
  4. WAF/телеметрия: оповещайте о телах запросов к element-search/search, содержащих __class, as rce или AttributeTypecastBehavior; отмечайте всплески HTTP 500 от этого действия.

Ссылки

  • NVD — CVE-2026-28695 (базовый SSTI)
  • Коммит-исправление Craft CMS e31e508 (create() → ограничение BaseObject)
  • Документация Yii AttributeTypecastBehavior / yii\base\Security

Отказ от ответственности

Этот проект предназначен только для авторизованного тестирования безопасности, обучения и защитных исследований. Вы несёте ответственность за соблюдение применимых законов и правил взаимодействия вашей лаборатории или клиента.

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