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

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

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

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

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

Категории

Все категории
Loading categories
cotonti-commentswidget-poc — Безопасный локальный proof of concept для уязвимости инъекции PHP-объектов в Cotonti CommentsWidget (CAN-2026-2035973 / CVE-2026-71294). | Kitploit
Инструменты/GitHubGitHub/harshrajsinghania/cotonti-commentswidget-poc
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийОбучение и Образование
GitHubharshrajsinghania/cotonti-commentswidget-poc

cotonti-commentswidget-poc

Безопасный локальный proof of concept для уязвимости инъекции PHP-объектов в Cotonti CommentsWidget (CAN-2026-2035973 / CVE-2026-71294).

Репозиторий
14 ч 11 мин назадЕщё не проверено

Популярное

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

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

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

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

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

Cotonti CommentsWidget PHP Object Injection PoC

Безопасный локальный proof of concept для проблемы инъекции PHP-объектов, выявленной в реализации CommentsWidget в Cotonti.

Уязвимость

  • Проект: Cotonti
  • Уязвимый компонент: plugins/comments/inc/CommentsWidget.php
  • CWE: CWE-502 — десериализация недоверенных данных
  • CVE/кандидат: CAN-2026-2035973 / CVE-2026-71294
  • Исследователь: Harsh Raj Singhania

Уязвимый путь кода принимает GET-параметр ci и передаёт контролируемые злоумышленником данные через base64_decode() в PHP-функцию unserialize() без ограничения классов, которые могут быть инстанцированы.

Концептуально уязвимая операция выглядит так:

root@kitploit:~
$ci = @unserialize(base64_decode($ci));

Когда передаётся сериализованный объект, PHP может инстанцировать контролируемый злоумышленником класс и вызвать магические методы, такие как . В более крупном приложении это может стать опасным при наличии подходящих gadget-классов.

__wakeup()

Предложенное исправление меняет десериализацию на:

root@kitploit:~
$ci = @unserialize(base64_decode($ci), ['allowed_classes' => false]);

и проверяет, что полученное значение имеет ожидаемую структуру массива, прежде чем использовать его.

Что демонстрирует этот PoC

poc.php выполняет три локальных теста:

  1. Уязвимое поведение — неограниченный unserialize() инстанцирует DangerousGadget и вызывает его метод __wakeup().
  2. Исправленное поведение — allowed_classes => false предотвращает инстанцирование gadget-класса и, следовательно, предотвращает побочный эффект __wakeup().
  3. Структурная валидация — сериализованное значение с неожиданной структурой отклоняется логикой валидации, используемой в исправлении.

PoC использует /tmp/pwned_by_cotonti_poc.txt только как безвредный sentinel-файл, показывающий, что __wakeup() выполнился. Он не выполняет команду операционной системы. Строка id && whoami существует только как значение-заполнитель в свойстве command gadget-объекта.

Требования

  • PHP CLI с поддержкой serialize() / unserialize()
  • Локальная тестовая среда

Установка Cotonti не требуется, поскольку уязвимое и исправленное поведение десериализации воспроизводится напрямую.

Запуск PoC

Из каталога репозитория:

root@kitploit:~
php poc.php

Ожидаемый вывод примерно такой:

root@kitploit:~
[!] DangerousGadget::__wakeup() triggered
[TEST 1] VULNERABLE: __wakeup() executed during unrestricted unserialize().
[TEST 2] FIXED: object instantiation was blocked; no sentinel was created.
[TEST 3] FIXED: invalid serialized structure rejected by validation.

Summary:
- Vulnerable path allows a serialized attacker-controlled object to be instantiated and invokes __wakeup().
- Fixed path uses allowed_classes=false, preventing the gadget class from being instantiated.
- Structural validation rejects values that do not match the expected array shape.
- No real command execution is performed by this PoC; the command property is only a placeholder.

Скрипт удаляет свой sentinel-файл перед завершением.

Устранение

Не десериализуйте контролируемые злоумышленником данные с помощью неограниченного PHP unserialize().

Для этого пути кода продемонстрированная мера защиты — отключить инстанцирование классов:

root@kitploit:~
unserialize($data, ['allowed_classes' => false]);

Также следует проверять десериализованное значение на точное соответствие структуре, ожидаемой приложением, прежде чем использовать его содержимое.

Ссылки

  • Проблема безопасности в upstream: https://github.com/Cotonti/Cotonti/issues/1888
  • Pull request с исправлением в upstream: https://github.com/Cotonti/Cotonti/pull/1889
  • Проект Cotonti: https://github.com/Cotonti/Cotonti

Ответственное использование

Этот репозиторий предназначен для исследований в области безопасности, верификации и защитного тестирования. Запускайте PoC только в средах, которыми вы владеете или которые вам явно разрешено тестировать. Не используйте его для атаки на системы без разрешения.

Атрибуция

Harsh Raj Singhania — исследование уязвимости, proof of concept и раскрытие информации.

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