# 🔐 对象级授权失效(BOLA)演示
## CVE-2023-27524 安全分析与修复
---
## 📌 项目概述
本项目演示了一个现实世界中的**对象级授权失效(Broken Object Level Authorization,BOLA)**漏洞,以及使用基于 Flask 的 API 进行的安全修复方案。
该漏洞以 **CVE-2023-27524** 为原型,涉及不当的授权控制,使攻击者能够通过修改 API 请求中的对象标识符(ID)来访问或操作未授权的对象。
本仓库包含:
- ❌ vulnerable_api.py:API 的易受攻击版本
- ✅ fixed_vulnerable_api.py:实现了正确对象级授权的安全修复版本
---
## ⚠️ 什么是 BOLA?
**对象级授权失效(Broken Object Level Authorization,BOLA)**发生在应用程序出现以下情况时:
- 暴露对象 ID(例如 `/profile?id=2`)
- 未能验证已认证用户是否有权访问该对象
### 🔴 影响:
攻击者可以:
- 访问其他用户的私人数据
- 修改或删除未授权的资源
- 执行水平越权
---
## 💥 易受攻击的实现
### 示例(易受攻击的代码)
```python
@app.route('/profile')
def profile():
user_id = request.args.get("id")
return users.get(int(user_id))
```
### ❌ 问题:
* 没有认证检查
* 没有所有权验证
* 用户可控的 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:
✔ 基于会话的认证
✔ 对象所有权验证
✔ 服务端授权检查
✔ 防止 ID 篡改攻击
---
## 🧠 关键安全要点
> 切勿在未于服务端验证授权的情况下信任用户提供的对象标识符。
仅有认证是不够的——**必须在对象层面强制执行授权。**
---
## 📊 攻击流程与安全流程对比
### ❌ 易受攻击的流程:
```
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
```