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.
Questo laboratorio ti permetterà di:
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.
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).
I principali componenti usati per questo progetto sono:
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 |
admin |
L’applicazione implementa un sistema di sicurezza a più livelli:
User → JWT Token → Quarkus Security → Role Check → Resource Access
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
mvn quarkus:dev
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:

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.
Bearer <token>
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

Con i ruoli appropriati, puoi accedere agli endpoint autorizzati.
Esempio: Accesso a /doc/example.md con ruoli guest o user

Vedi la mappatura di ruoli e path per maggiori dettagli.
Questo progetto è rilasciato sotto licenza MIT - vedi il file LICENSE per i dettagli.