lab-broken-access-control-quarkus

Broken Access Control Lab

Un laboratorio educativo completo per testare e comprendere le vulnerabilità Broken Access Control nelle applicazioni Java.

⚠️ ATTENZIONE: Questo progetto contiene intenzionalmente vulnerabilità di sicurezza a scopo educativo. NON utilizzare in produzione e NON esporre pubblicamente senza aver rimosso tutte le vulnerabilità dimostrative.

Le vulnerabilità di tipo Broken Access Control sono attualmente le più diffuse secondo il progetto OWASP. Sono al primo posto sia nella OWASP Top 10 del 2021 che 2025.

Keep a Changelog v1.1.0 badge Quality Gate Status Coverage License: MIT code of conduct CI workflow

Indice

Il laboratorio

Contenuti extra

Obiettivi del laboratorio

Questo laboratorio ti permetterà di:

Vulnerabilità dimostrative

Questo laboratorio include esempi di vulnerabilità comuni:

Vulnerabilità Descrizione Endpoint Status
IDOR (Insecure Direct Object Reference) Accesso diretto agli ID senza controllo ownership /people/{id} 🔴 Vulnerabile
Missing Function Level Access Control Operazioni sensibili accessibili con ruoli insufficienti /people (DELETE) 🔴 Vulnerabile
Privilege Escalation Modifica dei propri ruoli tramite API /demo/{roles}.txt 🔴 Vulnerabile

💡 Esercizio: Trova e documenta le vulnerabilità presenti nel codice. Proponi soluzioni per mitigarle.

Il progetto

Questo progetto dimostra come implementare una strategia di testing basata su tag JUnit per garantire la copertura dei requisiti di sicurezza in un’applicazione Quarkus con autenticazione JWT e RBAC (Role-Based Access Control).

Stack tecnologico

I principali componenti usati per questo progetto sono:

Mappatura ruoli e permessi

L’applicazione è configurata per gestire 3 ruoli e 4 path, che generano lo stesso documento in formati diversi. Non tutti i ruoli sono autorizzati a generare ogni path. Ecco la mappa dei permessi:

Path Output Ruoli autorizzati
/doc/example.md 📝 MarkDown admin, user, guest
/doc/example.adoc 📄 AsciiDoc admin
/doc/example.html 🌐 HTML admin, user
/doc/example.pdf 📑 PDF admin

Architettura della sicurezza

L’applicazione implementa un sistema di sicurezza a più livelli:

  1. Autenticazione JWT: Verifica dell’identità tramite token firmati
  2. RBAC: Controllo accessi basato su ruoli
  3. Test automatizzati: Garanzia della copertura dei requisiti di sicurezza tramite tag JUnit

Flusso di autenticazione

User → JWT Token → Quarkus Security → Role Check → Resource Access

Quickstart

Requisiti

Verifica dell’applicazione

Per eseguire i test standard:

mvn verify

Per attivare anche la verifica dei tag di sicurezza con il plugin junit5-tag-check-maven-plugin:

mvn verify -P security

Avvio dell’applicazione

mvn quarkus:dev

Utilizzo dell’applicazione

  1. Apri la Swagger UI
  2. Genera un JWT token (vedi sezione successiva)
  3. Autorizza le richieste con il token
  4. Testa gli endpoint disponibili

Generazione e utilizzo dei JWT token

Generazione del token

Generazione del token

Usa l’endpoint /demo/{roles}.txt per generare un JWT con i ruoli desiderati.

⏱️ Durata token: 1 ora (3600 secondi)
🔑 Algoritmo: RS256 (RSA Signature con SHA-256)
📝 Issuer: https://unittestdemoapp.fugerit.org

Ruoli disponibili:

Ruolo Permessi Esempio di utilizzo
admin Accesso completo a tutti i formati Operazioni di gestione
user Accesso a MarkDown e HTML Lettura documenti standard
guest Accesso solo a MarkDown Visualizzazione base

Esempi di generazione da console:

# Token con singolo ruolo
curl http://localhost:8080/demo/guest.txt
# Token con ruoli multipli (separati da virgola)
curl http://localhost:8080/demo/admin,user.txt

⚠️ Nota importante: L’endpoint /demo/{roles}.txt è fornito solo per scopi dimostrativi. In produzione, l’autenticazione deve avvenire tramite un Identity Provider (IDP) esterno.

Esempi di generazione da Qaurkus Swagger UI:

generazione del jwt dimostrativo

Qui c’è un payload del JWT completo generato come esempio

{
  "iss": "https://unittestdemoapp.fugerit.org",
  "upn": "DEMOUSER",
  "groups": [
    "guest",
    "user"
  ],
  "sub": "DEMOUSER",
  "iat": 1771234632,
  "exp": 1771238232,
  "jti": "ab2addbf-f776-4a7a-8b3d-4c0701f316d1"
}

Con strumenti online come jwt.io per verificare il contenuto del proprio JWT.

Autorizzazione nella Swagger UI

  1. Clicca sul pulsante “Authorize” nella Swagger UI
  2. Inserisci il JWT ottenuto in precedenza nel formato: Bearer <token>
  3. Clicca su “Authorize”

autorizzazione con il jwt dimostrativo

Test: Accesso negato (403 Forbidden)

Se tenti di accedere a un endpoint senza i ruoli necessari, riceverai un errore 403.

Esempio: Tentativo di accesso a /doc/example.adoc senza ruolo admin

ruolo non autorizzato per il formato

Test: Accesso consentito (200 OK)

Con i ruoli appropriati, puoi accedere agli endpoint autorizzati.

Esempio: Accesso a /doc/example.md con ruoli guest o user

documento generato

Vedi la mappatura di ruoli e path per maggiori dettagli.

Licenza

Questo progetto è rilasciato sotto licenza MIT - vedi il file LICENSE per i dettagli.