
Dimostra la vulnerabilità CVE-2023-27524 di Broken Object Level Authorization (BOLA) con implementazioni Flask API vulnerabili e corrette per la formazione sulla sicurezza.
# 🔐 Dimostrazione di Broken Object Level Authorization (BOLA)
## CVE-2023-27524 Analisi di sicurezza e correzione
---
## 📌 Panoramica del progetto
Questo progetto dimostra una vulnerabilità reale di **Broken Object Level Authorization (BOLA)** e la sua correzione sicura utilizzando un'API basata su Flask.
La vulnerabilità è modellata su **CVE-2023-27524**, che comporta controlli di autorizzazione inadeguati che permettono agli attaccanti di accedere o manipolare oggetti non autorizzati modificando identificatori di oggetti (ID) nelle richieste API.
Questo repository include:
- ❌ vulnerable_api.py: Una versione vulnerabile dell'API
- ✅ fixed_vulnerable_api.py: Una versione corretta e sicura che implementa una corretta autorizzazione a livello di oggetto
---
## ⚠️ Cos'è BOLA?
**Broken Object Level Authorization (BOLA)** si verifica quando un'applicazione:
- Espone ID di oggetti (es. `/profile?id=2`)
- Non verifica se l'utente autenticato è autorizzato ad accedere a quell'oggetto
### 🔴 Impatto:
Gli attaccanti possono:
- Accedere ai dati privati di altri utenti
- Modificare o eliminare risorse non autorizzate
- Eseguire escalation orizzontale dei privilegi
---
## 💥 Implementazione vulnerabile
### Esempio (Codice vulnerabile)
```python
@app.route('/profile')
def profile():
user_id = request.args.get("id")
return users.get(int(user_id))
```
### ❌ Problema:
* Nessun controllo di autenticazione
* Nessuna validazione di proprietà
* ID controllato dall'utente accede direttamente agli oggetti del database
### 🔓 Scenario di sfruttamento:
```
/profile?id=1 → dati di Alice
/profile?id=2 → dati di Bob (accesso non autorizzato)
```
---
## 🔒 Implementazione sicura corretta
### Esempio (Codice sicuro)
```python
@app.route('/profile')
def profile():
requested_id = int(request.args.get("id", session["user_id"]))
# Object-level authorization check
if requested_id != session["user_id"]:
return "403 Forbidden - Access Denied", 403
return users.get(requested_id)
```
---
## ✅ Correzioni di sicurezza applicate
Questa implementazione previene BOLA applicando:
✔ Autenticazione basata su sessione
✔ Validazione della proprietà dell'oggetto
✔ Controlli di autorizzazione lato server
✔ Prevenzione degli attacchi di manipolazione degli ID
---
## 🧠 Lezione chiave sulla sicurezza
> Non fidarsi mai degli identificatori di oggetti forniti dall'utente senza verificare l'autorizzazione lato server.
L'autenticazione NON è sufficiente — **l'autorizzazione deve essere applicata a livello di oggetto.**
---
## 📊 Flusso di attacco vs flusso sicuro
### ❌ Flusso vulnerabile:
```
Utente → Richiesta API (/profile?id=2) → Accesso diretto al DB → Perdita di dati
```
### ✅ Flusso sicuro:
```
Utente → Richiesta API → Controllo sessione → Validazione proprietà → Consentito/Negato
```
---
## 🧪 Come eseguire
### 1. Installare le dipendenze
```bash
pip install flask
```
### 2. Eseguire l'applicazione
```bash
python fixed_vulnerable_api.py or vulnerable_api.py
```
### 3. Accedere all'app
```
http://127.0.0.1:5000
```
---
## 📁 Struttura del progetto
```
api-bola-demo/
│
├── vulnerable_api.py # versione insicura
├── fixed_vulnerable_api.py # Versione BOLA corretta
└── README.md
```