Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
cakephp-cookie-suffix — CakePHP 5.4.2 - Alta - Remota - Cookie - El cookie jar del cliente Http hace coincidir dominios como sufijo de regex | Kitploit
Herramientas/GitHubGitHub/abraxas/cakephp-cookie-suffix
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebRecopilación de InformaciónSeguridad WebPapers e Investigación
GitHubabraxas/cakephp-cookie-suffix

cakephp-cookie-suffix

CakePHP 5.4.2 - Alta - Remota - Cookie - El cookie jar del cliente Http hace coincidir dominios como sufijo de regex

Ver Repositorio
20hace 9 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Abraxas Labs - cakephp-cookie-suffix

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

Análisis: https://abraxaslabs.tech/research/cakephp-cookie-suffix

cakephp-cookie-suffix

Clase: Fuga / plantado de cookies Alcance: Remoto

CakePHP 5.4.2 (887b641) - Cake Software Foundation

CookieCollection::findMatchingCookies usa preg_match('/' . preg_quote($domain) . '$/', $host). Eso es un sufijo de cadena, no una coincidencia de dominio según RFC 6265. Una cookie para api.partner.com se envía a evilapi.partner.com. Una cookie para bank.com se envía a notbank.com.

Cookie::createFromHeaderString() también copia el Domain= de Set-Cookie sin ninguna comprobación contra el host de la respuesta. addFromResponse desde attacker.test con Domain=victim.internal almacena esa cookie y posteriormente la adjunta a victim.internal.

Una aplicación que usa Cake\Http\Client con el jar por defecto a través de más de un host puede filtrar una cookie de sesión de un socio a un hermano confundido por sufijo, o plantar una cookie en un host interno tras obtener una URL del atacante. other.com no coincide. Esto no es un bug de cookies del navegador. El cakephp/app estándar no llama a un segundo host por sí mismo.

IDaún sin CVE
ClaseFuga / plantado de cookies (coincidencia de dominio por sufijo de regex)
AlcanceRemoto (la app usa el jar de Http Client entre hosts)
CWECWE-565, CWE-201
CVSSAlto: 8.2 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N
ProductoCakePHP
Afectado5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
Autenticaciónla app usa Cake\Http\Client con el jar de cookies por defecto entre hosts
LicenciaGNU Affero GPL v3.0
Laboratoriosolo 127.0.0.1

Qué puede hacer un atacante

Requiere una aplicación que conserve las cookies de Cake\Http\Client a través de más de un host (OAuth, webhooks, una URL proporcionada por el usuario, una segunda API).

PrivilegioMétodo / sinkProbado en laboratorio o inferido
Filtrar una cookie almacenada a un hermano confundido por sufijoCookieCollection::addToRequest para https://evilapi.partner.com/ tras una cookie con dominio api.partner.comProbado en laboratorio. La Cookie de la petición es sid=SECRET. RFC 6265 no coincidiría
Misma fuga para un sufijo registrableDominio de cookie bank.com, host de petición notbank.comProbado en laboratorio. La Cookie de la petición es sid=SECRET
Control negativoHost de petición other.comProbado en laboratorio. Sin cabecera Cookie
Plantar una cookie para un host internoaddFromResponse de Set-Cookie: sid=x; Domain=victim.internal desde https://attacker.test/Probado en laboratorio. El dominio almacenado es victim.internal; la siguiente petición a ese host envía sid=x
Fijación de sesión / sesión de socio robada en la siguiente llamada del Clientsid plantado o filtrado usado como sesión de APIInferido. El laboratorio se detiene en el oráculo de la cabecera Cookie
El envío al mismo host sigue funcionandoDominio de cookie api.partner.com a host api.partner.comProbado en laboratorio. Esperado, no es un bug

Descartado en este resto: other.com no coincide. Los jars de cookies del navegador no son este bug. Sin shell. No es RCE no autenticado en una app esqueleto.

Cómo lo encontré

Fijé cakephp/cakephp 5.4.2 tras GHSA-2qh5, GHSA-fxf7, GHSA-vjqc y la nota de filename= de la 5.4.2. La coincidencia de cookies de Http Client es un sufijo de regex:

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

addFromResponse pasa el host de la solicitud solo como valor predeterminado. Un atributo Domain= de Set-Cookie lo sobrescribe y se almacena.

Falsos caminos ya registrados: tratar esto como un bug de cookies del navegador; afirmar que other.com también coincide; inflar un oráculo de cabecera Cookie a ATO sin una aplicación que use el jar entre hosts. Teatro: una reverse shell.

Laboratorio

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

o

cd lab
./run.sh

Git clone tag 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63) en PHP 8.3. Oráculo loopback HTTP en 127.0.0.1:19420. No se requiere un origen HTTP adicional; el oráculo ejecuta CookieCollection desde el pin.

  1. Añadir sid=SECRET dominio api.partner.com. addToRequest https://evilapi.partner.com/ -> Cookie: sid=SECRET.
  2. Controlar https://other.com/ -> sin cabecera Cookie.
  3. El mismo host https://api.partner.com/ sigue enviando sid=SECRET.
  4. Sufijo extra bank.com -> https://notbank.com/ envía sid=SECRET.
  5. addFromResponse desde https://attacker.test/ con Set-Cookie: sid=x; Domain=victim.internal; Path=/. A continuación https://victim.internal/ envía sid=x.
SUCCESS cakephp-cookie-suffix suffix-leak=yes control-other=yes plant-domain=yes how=cakephp-5.4.2 CAKEPHP-COOKIE-SUFFIX-WITNESS

La solución

Coincidencia de dominio según RFC 6265 (host === domain || str_ends_with($host, '.' . $domain)). Cookies solo de host cuando se omite Domain. Rechazar Domain que no coincida con el dominio del host de la solicitud. Rechazar sufijos públicos.

Referencias

  • github.com/cakephp/cakephp etiqueta 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • src/Http/Cookie/CookieCollection.php · src/Http/Cookie/Cookie.php
  • Coincidencia de dominio según RFC 6265
  • CWE-565 · CWE-201

Licencia

GNU Affero GPL v3.0. Consulte LICENSE. Solo laboratorio de loopback. Sin garantía.

Descargar herramienta