# 🔐 Демонстрация нарушения авторизации на уровне объектов (BOLA)
## CVE-2023-27524 Анализ безопасности и исправление
---
## 📌 Обзор проекта
Этот проект демонстрирует реальную уязвимость **нарушения авторизации на уровне объектов (BOLA)** и её безопасное устранение с помощью API на основе Flask.
Уязвимость смоделирована на основе **CVE-2023-27524**, которая связана с некорректными механизмами авторизации, позволяющими атакующим получать доступ к неавторизованным объектам или изменять их путём модификации идентификаторов объектов (ID) в API-запросах.
Этот репозиторий включает:
- ❌ vulnerable_api.py: уязвимая версия API
- ✅ fixed_vulnerable_api.py: защищённая исправленная версия с реализацией надлежащей авторизации на уровне объектов
---
## ⚠️ Что такое BOLA?
**Нарушение авторизации на уровне объектов (BOLA)** возникает, когда приложение:
- Раскрывает идентификаторы объектов (например, `/profile?id=2`)
- Не проверяет, авторизован ли аутентифицированный пользователь для доступа к этому объекту
### 🔴 Воздействие:
Атакующие могут:
- Получать доступ к личным данным других пользователей
- Изменять или удалять неавторизованные ресурсы
- Выполнять горизонтальное повышение привилегий
---
## 💥 Уязвимая реализация
### Пример (уязвимый код)
```python
@app.route('/profile')
def profile():
user_id = request.args.get("id")
return users.get(int(user_id))
```
### ❌ Проблема:
* Отсутствует проверка аутентификации
* Отсутствует проверка принадлежности объекта
* Управляемый пользователем идентификатор напрямую обращается к объектам базы данных
### 🔓 Сценарий эксплуатации:
```
/profile?id=1 → Alice data
/profile?id=2 → Bob data (unauthorized access)
```
---
## 🔒 Исправленная безопасная реализация
### Пример (безопасный код)
```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)
```
---
## ✅ Применённое исправление безопасности
Эта реализация предотвращает BOLA за счёт:
✔ Аутентификации на основе сессий
✔ Проверки принадлежности объекта
✔ Проверок авторизации на стороне сервера
✔ Предотвращения атак с подменой идентификаторов
---
## 🧠 Ключевой урок безопасности
> Никогда не доверяйте идентификаторам объектов, предоставленным пользователем, без проверки авторизации на стороне сервера.
Аутентификации НЕ достаточно — **авторизация должна обеспечиваться на уровне объектов.**
---
## 📊 Схема атаки и безопасная схема
### ❌ Уязвимая схема:
```
User → API Request (/profile?id=2) → Direct DB Access → Data Leak
```
### ✅ Безопасная схема:
```
User → API Request → Session Check → Ownership Validation → Allowed/Denied
```
---
## 🧪 Как запустить
### 1. Установите зависимости
```bash
pip install flask
```
### 2. Запустите приложение
```bash
python fixed_vulnerable_api.py or vulnerable_api.py
```
### 3. Откройте приложение
```
http://127.0.0.1:5000
```
---
## 📁 Структура проекта
```
api-bola-demo/
│
├── vulnerable_api.py # insecure version
├── fixed_vulnerable_api.py # Fixed BOLA version
└── README.md
```