# 🔐 टूटा हुआ ऑब्जेक्ट स्तर प्राधिकरण (BOLA) प्रदर्शन
## CVE-2023-27524 सुरक्षा विश्लेषण एवं सुधार
---
## 📌 परियोजना अवलोकन
यह प्रोजेक्ट Flask-आधारित API का उपयोग करके एक वास्तविक-विश्व **टूटा हुआ ऑब्जेक्ट स्तर प्राधिकरण (BOLA)** भेद्यता और उसके सुरक्षित समाधान को प्रदर्शित करता है।
यह भेद्यता **CVE-2023-27524** के आधार पर तैयार की गई है, जिसमें अनुचित प्राधिकरण नियंत्रण शामिल हैं जो हमलावरों को API अनुरोधों में ऑब्जेक्ट पहचानकर्ता (ID) को संशोधित करके अनधिकृत ऑब्जेक्ट्स तक पहुंचने या उनमें हेरफेर करने की अनुमति देते हैं।
इस रिपॉजिटरी में शामिल हैं:
- ❌ vulnerable_api.py: API का एक असुरक्षित संस्करण
- ✅ fixed_vulnerable_api.py: उचित ऑब्जेक्ट-स्तर प्राधिकरण लागू करने वाला एक सुरक्षित, हल किया गया संस्करण
---
## ⚠️ BOLA क्या है?
**टूटा हुआ ऑब्जेक्ट स्तर प्राधिकरण (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
```