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

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

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

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

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

Категории

Все категории
Loading categories
cakephp-cookie-suffix — CakePHP 5.4.2 — высокий — удалённый — cookie — Cookie jar HTTP-клиента сопоставляет домены как суффикс регулярного выражения | Kitploit
Инструменты/GitHubGitHub/abraxas/cakephp-cookie-suffix
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийСбор информацииВеб-безопасностьСтатьи и Исследования
GitHubabraxas/cakephp-cookie-suffix

cakephp-cookie-suffix

CakePHP 5.4.2 — высокий — удалённый — cookie — Cookie jar HTTP-клиента сопоставляет домены как суффикс регулярного выражения

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

Популярное

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

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

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

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

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

Abraxas Labs - cakephp-cookie-suffix

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  cakephp-cookie-suffix

cakephp-cookie-suffix

Класс: Утечка / подмена cookie Доступ: Удалённый

CakePHP 5.4.2 (887b641) — Cake Software Foundation

CookieCollection::findMatchingCookies использует preg_match('/' . preg_quote($domain) . '$/', $host). Это суффикс строки, а не domain-match по RFC 6265. Cookie для api.partner.com отправляется на evilapi.partner.com. Cookie для bank.com отправляется на notbank.com.

Cookie::createFromHeaderString() также копирует Domain= из Set-Cookie без проверки соответствия хосту ответа. addFromResponse от attacker.test с Domain=victim.internal сохраняет этот cookie и впоследствии прикрепляет его к victim.internal.

Приложение, использующее Cake\Http\Client с cookie jar по умолчанию для нескольких хостов, может утечь сессионный cookie партнёра на суффиксно-спутанный соседний хост или подсадить cookie на внутренний хост после запроса к URL атакующего. other.com не совпадает. Это не баг cookie браузера. Стандартный cakephp/app сам по себе не обращается ко второму хосту.

IDCVE пока нет
КлассУтечка / подмена cookie (domain-match по суффиксу регулярного выражения)
ДоступУдалённый (приложение использует cookie jar Http Client для нескольких хостов)
CWECWE-565, CWE-201
CVSSHigh: 8.2 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N
ПродуктCakePHP
Затронуто5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
Аутентификацияприложение использует Cake\Http\Client с cookie jar по умолчанию для нескольких хостов
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1

Что может сделать атакующий

Требуется приложение, которое сохраняет cookie Cake\Http\Client для более чем одного хоста (OAuth, вебхуки, URL, предоставленный пользователем, второй API).

ПривилегияМетод / sinkДоказано в лаборатории или выведено
Утечка сохранённого cookie на суффиксно-спутанный соседний хостCookieCollection::addToRequest для https://evilapi.partner.com/ после cookie с доменом api.partner.comДоказано в лаборатории. В запросе Cookie — sid=SECRET. RFC 6265 не дал бы совпадения
Та же утечка для регистрируемого суффиксаДомен cookie bank.com, хост запроса notbank.comДоказано в лаборатории. В запросе Cookie — sid=SECRET
Негативный контрольХост запроса other.comДоказано в лаборатории. Заголовок Cookie отсутствует
Подмена cookie для внутреннего хостаaddFromResponse для Set-Cookie: sid=x; Domain=victim.internal от https://attacker.test/Доказано в лаборатории. Сохранённый домен — victim.internal; следующий запрос к этому хосту отправляет sid=x
Фиксация сессии / украденная сессия партнёра при следующем вызове ClientПодсаженный или утёкший sid, используемый как сессия APIВыведено. Лаборатория останавливается на оракуле заголовка Cookie
Отправка на тот же хост по-прежнему работаетДомен cookie api.partner.com для хоста api.partner.comДоказано в лаборатории. Ожидаемо, не баг

Закрыто по этому остатку: other.com не совпадает. Cookie jar браузера — это не данный баг. Без шелла. Не неаутентифицированный RCE на скелетном приложении.

Как я это нашёл

Я зафиксировал cakephp/cakephp 5.4.2 после GHSA-2qh5, GHSA-fxf7, GHSA-vjqc и заметки о filename= в 5.4.2. Сопоставление cookie в Http Client — это суффикс регулярного выражения:

$pattern = '/' . preg_quote($domain, '/') . '$/';
if (!preg_match($pattern, $host)) {
    continue;
}

addFromResponse передаёт хост запроса только как значение по умолчанию. Атрибут Domain= из Set-Cookie перезаписывает его и сохраняется.

Уже зафиксированные ошибочные пути: трактовка этого как бага cookie браузера; утверждение, что other.com тоже совпадает; раздувание оракула заголовка Cookie до ATO без приложения, использующего jar для нескольких хостов. Театр: обратный шелл.

Лаборатория

python3 cakephp-cookie-suffix-Abraxas-Labs.py

или

cd lab
./run.sh

Git clone тега 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63) на PHP 8.3. Loopback-оракул HTTP на 127.0.0.1:19420. Дополнительный HTTP-источник не требуется; оракул запускает CookieCollection из зафиксированной версии.

  1. Добавить sid=SECRET домен api.partner.com. addToRequest https://evilapi.partner.com/ -> Cookie: sid=SECRET.
  2. Контроль https://other.com/ -> заголовок Cookie отсутствует.
  3. Тот же хост https://api.partner.com/ по-прежнему отправляет sid=SECRET.
  4. Дополнительный суффикс bank.com -> https://notbank.com/ отправляет sid=SECRET.
  5. addFromResponse от https://attacker.test/ с Set-Cookie: sid=x; Domain=victim.internal; Path=/. Следующий https://victim.internal/ отправляет sid=x.
SUCCESS cakephp-cookie-suffix suffix-leak=yes control-other=yes plant-domain=yes how=cakephp-5.4.2 CAKEPHP-COOKIE-SUFFIX-WITNESS

Исправление

Domain-match по RFC 6265 (host === domain || str_ends_with($host, '.' . $domain)). Host-only cookie, когда Domain опущен. Отклонять Domain, который не проходит domain-match с хостом запроса. Отклонять публичные суффиксы.

Ссылки

  • github.com/cakephp/cakephp тег 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • src/Http/Cookie/CookieCollection.php · src/Http/Cookie/Cookie.php
  • RFC 6265 domain-match
  • CWE-565 · CWE-201

Лицензия

GNU Affero GPL v3.0. См. LICENSE. Только loopback-лаборатория. Без гарантий.

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