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-trusted-proxies — CakePHP 5.4.2 - Alta - Remota - Proxy - trustedProxies respeta X-Forwarded-* desde cualquier REMOTE_ADDR | Kitploit
Herramientas/GitHubGitHub/abraxas/cakephp-trusted-proxies
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebVirtualización de SeguridadSeguridad WebPruebas de Penetración
GitHubabraxas/cakephp-trusted-proxies

cakephp-trusted-proxies

CakePHP 5.4.2 - Alta - Remota - Proxy - trustedProxies respeta X-Forwarded-* desde cualquier REMOTE_ADDR

Ver Repositorio
15hace 6 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-trusted-proxies

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

Análisis: https://abraxaslabs.tech/research/cakephp-trusted-proxies

cakephp-trusted-proxies

Clase: omisión de redirección HTTPS / suplantación de IP-host Alcance: Remoto

CakePHP 5.4.2 (887b641) - Cake Software Foundation

HttpsEnforcerMiddleware con trustedProxies => ['10.0.0.1'] llama a setTrustedProxies, que establece trustProxy = true y nunca compara la lista con REMOTE_ADDR. Después de eso, scheme(), host() y clientIp() respetan los encabezados del atacante X-Forwarded-Proto / X-Forwarded-For / X-Forwarded-Host / X-Real-IP.

El middleware por defecto tiene trustedProxies en null y no habilita esto. La configuración documentada para balanceadores de carga es el caso expuesto. Un cliente HTTP no autenticado que no es el proxy listado puede omitir la redirección HTTPS y suplantar la IP del cliente y el Host.

IDaún sin CVE
Claseomisión de redirección HTTPS / suplantación de IP-host
AlcanceRemoto (HTTP no autenticado; la app configuró trustedProxies)
CWECWE-441, CWE-346
CVSSAlto: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N
ProductoCakePHP
Afectado5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
Autenticaciónninguna. La app configuró trustedProxies en HttpsEnforcerMiddleware
LicenciaGNU Affero GPL v3.0
Laboratoriosolo 127.0.0.1

Qué puede hacer un atacante

Requiere una app que haya habilitado trustedProxies (típico refuerzo de HTTPS mediante proxy inverso). No necesita conectarse desde una IP de proxy listada.

PrivilegioMétodo / sinkProbado en laboratorio o inferido
Omitir la redirección HTTPS / la ruta HSTSGET / HTTP con X-Forwarded-Proto: httpsProbado en laboratorio. 200, scheme=https, testigo en JSON
Suplantar clientIp()X-Forwarded-For: 203.0.113.50Probado en laboratorio. client_ip=203.0.113.50
Suplantar host()X-Forwarded-Host: spoof.invalidProbado en laboratorio. host=spoof.invalid
Suplantar mediante X-Real-IPX-Real-IP: 198.51.100.9Probado en laboratorio. client_ip=198.51.100.9
Omitir ACL de IP / límite de tasa basado en clientIp()Misma suplantaciónInferido. El remote_addr por defecto de RateLimitMiddleware no es este fallo
Control negativoLos mismos encabezados reenviados en /control (sin trustedProxies)Probado en laboratorio. Sigue devolviendo 301 a https

Cerrado sobre este remanente: trustedProxies => null por defecto; el propio REMOTE_ADDR sigue siendo la IP del puente de Docker en el laboratorio (192.168.208.1, no la 10.0.0.1 listada). No es RCE. No es un fallo de cookie-jar.

Cómo lo encontré

Fijé cakephp/cakephp 5.4.2. ServerRequest::setTrustedProxies():

public function setTrustedProxies(array $proxies): void
{
    $this->trustedProxies = $proxies;
    $this->trustProxy = true;
    $this->uri = $this->uri->withScheme($this->scheme());
}

HttpsEnforcerMiddleware llama a eso siempre que trustedProxies no sea nulo. Las IPs listadas se usan después como un array_diff sobre la cadena XFF, no como una verificación del par conectado.

Falsos caminos ya registrados: tratar el middleware por defecto como este remanente (no lo es); llamar a x-forwarded-for de RateLimitMiddleware el mismo error (la panadería 5.4.1 ya movió ese valor por defecto a remote_addr); afirmar que REMOTE_ADDR en sí fue falsificado. Teatro: una reverse shell.

Laboratorio

python3 cakephp-trusted-proxies-Abraxas-Labs.py

o

cd lab
./run.sh

Composer cakephp/cakephp 5.4.2 en PHP 8.3. App mínima: / usa trustedProxies => ['10.0.0.1']; /control no. HTTP de loopback en 127.0.0.1:19430.

  1. GET / sin cabeceras forwarded -> 301 https.
  2. GET /control con proto/for/host/real-ip -> 301 https.
  3. GET / con X-Forwarded-Proto: https -> 200, esquema https, trust_proxy=true, REMOTE_ADDR no es 10.0.0.1.
  4. GET / con XFF + Host -> client_ip=203.0.113.50, host=spoof.invalid.
  5. GET / con X-Real-IP -> client_ip=198.51.100.9.
SUCCESS cakephp-trusted-proxies pin=5.4.2 how=app remote-addr=192.168.208.1 listed-proxy=10.0.0.1 proto-bypass=200 control-redirect=301 client-ip=203.0.113.50 host=spoof.invalid x-real-ip=198.51.100.9 CAKEPHP-TRUSTED-PROXIES-WITNESS

La solución

Solo se deben respetar las cabeceras reenviadas cuando REMOTE_ADDR esté en la lista de proxies de confianza (Symfony isFromTrustedProxy()). Una lista vacía no debe habilitar la confianza.

Referencias

  • github.com/cakephp/cakephp etiqueta 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • src/Http/ServerRequest.php · src/Http/Middleware/HttpsEnforcerMiddleware.php
  • CWE-441 · CWE-346

Licencia

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

Descargar herramienta