
Demonstriert die CVE-2023-27524 Broken Object Level Authorization (BOLA) Sicherheitslücke mit anfälligen und behobenen Flask-API-Implementierungen für die Sicherheitsausbildung.
# 🔐 Demonstration einer fehlerhaften Autorisierung auf Objektebene (Broken Object Level Authorization – BOLA)
## CVE-2023-27524 Sicherheitsanalyse & Behebung
---
## 📌 Projektübersicht
Dieses Projekt demonstriert eine reale **Schwachstelle durch fehlerhafte Autorisierung auf Objektebene (BOLA)** und deren sichere Behebung mithilfe einer Flask-basierten API.
Die Schwachstelle ist nach **CVE-2023-27524** modelliert, bei der unzureichende Autorisierungskontrollen es Angreifern ermöglichen, nicht autorisierte Objekte durch Ändern von Objektkennungen (IDs) in API-Anfragen zuzugreifen oder zu manipulieren.
Dieses Repository enthält:
- ❌ vulnerable_api.py: Eine angreifbare Version der API
- ✅ fixed_vulnerable_api.py: Eine sichere, korrigierte Version mit ordnungsgemäßer Autorisierung auf Objektebene
---
## ⚠️ Was ist BOLA?
**Fehlerhafte Autorisierung auf Objektebene (BOLA)** tritt auf, wenn eine Anwendung:
- Objekt-IDs offenlegt (z. B. `/profile?id=2`)
- Nicht überprüft, ob der authentifizierte Benutzer berechtigt ist, auf dieses Objekt zuzugreifen
### 🔴 Auswirkungen:
Angreifer können:
- Auf private Daten anderer Benutzer zugreifen
- Nicht autorisierte Ressourcen ändern oder löschen
- Horizontale Rechteausweitung durchführen
---
## 💥 Angreifbare Implementierung
### Beispiel (angreifbarer Code)
```python
@app.route('/profile')
def profile():
user_id = request.args.get("id")
return users.get(int(user_id))
/profile?id=1 → Alice-Daten
/profile?id=2 → Bob-Daten (nicht autorisierter Zugriff)
@app.route('/profile')
def profile():
requested_id = int(request.args.get("id", session["user_id"]))
# Autorisierungsprüfung auf Objektebene
if requested_id != session["user_id"]:
return "403 Forbidden - Access Denied", 403
return users.get(requested_id)
Diese Implementierung verhindert BOLA durch Durchsetzung von:
✔ Sitzungsbasierter Authentifizierung ✔ Überprüfung des Objektbesitzes ✔ Serverseitigen Autorisierungsprüfungen ✔ Verhinderung von ID-Manipulationsangriffen
Vertrauen Sie niemals vom Benutzer bereitgestellten Objektkennungen, ohne die Autorisierung serverseitig zu überprüfen.
Authentifizierung allein reicht nicht – Autorisierung muss auf Objektebene durchgesetzt werden.
Benutzer → API-Anfrage (/profile?id=2) → Direkter DB-Zugriff → Datenleck
Benutzer → API-Anfrage → Sitzungsprüfung → Besitzüberprüfung → Erlaubt/Verweigert
pip install flask
python fixed_vulnerable_api.py oder vulnerable_api.py
http://127.0.0.1:5000
api-bola-demo/
│
├── vulnerable_api.py # unsichere Version
├── fixed_vulnerable_api.py # Korrigierte BOLA-Version
└── README.md