Files
Siro/SECURITY_AUDIT_PHASE1_FINDINGS_AR.md
2026-06-16 17:47:19 +03:00

284 lines
11 KiB
Markdown

<div dir="rtl">
# تقرير تدقيق أمان سيرو - النتائج المرحلة 1
**تاريخ التدقيق:** 16 يونيو 2026
**فريق التدقيق:** فريق تقييم الأمان
**الحالة:** انتهى الفحص الأولي للكود
---
## 📋 ملخص تنفيذي
مشروع سيرو هو منصة نقل مشترك واسعة النطاق تضم:
- **395 ملف PHP** في الخادم الخلفي
- **4 تطبيقات Flutter** للهاتف المحمول (السائق والراكب والخدمة والإدارة)
- **نظام دفع متكامل** (WalletIntaleq)
- **خدمات مقابس فورية** (تتبع الموقع والرسائل)
### تقييم المخاطر الأولي: **مخاطر عالية جداً** 🔴
يظهر الكود علامات تطوير سريع مع تطبيقات أمنية غير متسقة - توجد بعض الممارسات الجيدة (JWT ومحدود السرعة والتحقق من SSRF)، لكن توجد ثغرات عديدة.
---
## 🔴 النتائج الحرجة (الخطورة: عالية جداً)
### 1. **مشاكل المصادقة والتفويض**
#### 1.1 مصادقة ضعيفة بناءً على بصمة الجهاز
**الموقع:** `backend/login.php:30-55`، `backend/loginJwtDriver.php:45-85`
**الثغرة:** مصادقة بصمة جهاز ضعيفة
```php
// التحقق من البصمة ضعيف جداً - يمكن تزويره
$fpVerified = hash_equals($storedFp, $fingerprint);
```
**المخاطر:**
- يمكن استخراج البصمات من تسجيل الدخول الأول
- بصمة الجهاز وحدها غير كافية للمصادقة
- لا يوجد فرض المصادقة متعددة العوامل (MFA)
- تخفيف هجمات التوقيت موجود لكن منطق البصمة لا يزال ضعيفاً
**التأثير:** عالي - سرقة الحساب عبر تزوير البصمة
---
### 2. **مشاكل التشفير والتشفير**
#### 2.1 AES-256-CBC مع IV ثابت
**الموقع:** `backend/encrypt_decrypt.php:1-100`
**كود الثغرة:**
```php
$iv = getenv('initializationVector'); // 16 بايت - IV ثابت!
public function encryptData($plainText) {
$plainText = mb_convert_encoding($plainText, 'UTF-8');
$paddedText = $this->addPadding($plainText);
$encrypted = openssl_encrypt($paddedText, 'AES-256-CBC',
$this->key, OPENSSL_RAW_DATA, $this->iv); // لا يتغير أبداً!
return base64_encode($encrypted);
}
```
**المشاكل:**
-**IV ثابت عبر جميع عمليات التشفير** - فشل تشفير حرج
- يجب توليد IV عشوائي لكل تشفير
- مع IV ثابت، تحليل الأنماط ممكن
- عرضة لهجمات النص المعروف
**المخاطر:** حرجة جداً - جميع البيانات المشفرة قد تكون معرضة للخطر
**التأثير:**
- يمكن فك تشفير أرقام الهاتف المشفرة
- بيانات الدفع معرضة للخطر
- المعلومات الشخصية (بطاقة الهوية الوطنية وما إلى ذلك) مكشوفة
**اثبات المفهوم:**
```
1. احصل على رقم هاتف مشفر + زوج نص واضح (قيمة معروفة)
2. استخدم هجوم النص المعروف لاشتقاق علاقة المفتاح/IV
3. فك تشفير جميع البيانات المشفرة المخزنة في قاعدة البيانات
```
---
### 3. **مخاطر الاتصال بقاعدة البيانات و SQL Injection**
#### 3.1 SQL Injection في دالة findBestDrivers()
**الموقع:** `backend/functions.php:90-160`
**الحالة:** مخفف جزئياً (يستخدم قائمة بيضاء للـ carType)
```php
$allowedCarTypes = ['Comfort', 'Mishwar Vip', 'Scooter', ...];
if (!in_array($carType, $allowedCarTypes, true)) {
$carType = 'Speed';
}
```
**المخاطر المتبقية:**
- نهج قائمة بيضاء جيد لكن يحتاج التحقق في أماكن أخرى
- استعلامات قاعدة بيانات متعددة بأنماط متشابهة
- قد لا تحتوي نقاط النهاية الأخرى على نفس الحماية
---
### 4. **ثغرات نظام الدفع (خادم المحفظة)**
#### 4.1 تحليل نقاط نهاية المحفظة
**الموقع:** `/walletintaleq.intaleq.xyz/v2/main/ride/driverWallet/`
**نقاط نهاية محددة:**
- `add.php` - إضافة الأموال (مخاطر تجاوز التفويض)
- `transfer.php` - تحويل الأموال (لا تحديد سرعة مرئي)
- `update.php` - تحديث المحفظة (التحقق من المبلغ مطلوب)
- `addFromAdmin.php` - حقن الأموال من الإدارة (التحكم في الوصول حرج)
**المخاطر:** تعديل الدفع والاحتيال المالي
---
### 5. **مشاكل أمان API**
#### 5.1 تكوين CORS (مقيد لكن قد يكون هناك تجاوز)
**الموقع:** ملفات PHP متعددة
```php
header('Access-Control-Allow-Origin: https://siromove.com');
```
**الحالة:** ✅ جيد - مقيد بمجال واحد
**لكن تحقق من:**
- هجمات النطاق الجزئي (*.siromove.com)
- التباس HTTP مقابل HTTPS
---
## 🟡 مشاكل عالية الأولوية
### 6. **أمان تطبيق الهاتف المحمول (Flutter)**
#### 6.1 أذونات مفرطة (تطبيق السائق)
```xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
```
**المشاكل:**
- أذونات تتبع الموقع في الخلفية
- الوصول إلى التخزين الخارجي (خطر تسرب البيانات)
- أذونات نافذة التنبيه النظام
- لا توجد تبريرات واضحة في البيان
**المخاطر:** انتهاك خصوصية البيانات
---
#### 6.2 تحليل المكتبات المرتبطة ب Flutter
**الموقع:** `siro_rider/pubspec.yaml`، `siro_driver/pubspec.yaml`
**الحزم المعروفة بأنها عرضة للثغرات:**
- `firebase_core: ^4.4.0` - تحقق من الإصدار القديم
- `http: ^1.2.2` - إصدار قديم، تثبيت شهادة لم يتم فرضه
- `webview_flutter: ^4.9.0` - خطر حقن XSS/JavaScript
- `encrypt: ^5.0.3` - تحقق من تطبيق التشفير
---
### 7. **إدارة التكوين والأسرار**
#### 7.1 متغيرات البيئة
**الموقع:** `backend/load_env.php`، `backend/.env`
**المشاكل:**
- لا توجد حماية لملف .env
- مفاتيح حساسة في متغيرات البيئة
- تحقق من عدم الالتزام بـ .env بـ git
---
### 8. **أمان المقابس الفورية**
#### 8.1 التحقق من عنوان URL للمقبس
**الموقع:** `backend/functions.php:20-43`
**الحماية الحالية:**
```php
return [
'http://188.68.36.205:2021', // ⚠️ HTTP (وليس HTTPS!)
'http://188.68.36.205:3031', // ⚠️ HTTP
'https://location.intaleq.xyz',
];
```
**المشاكل:**
- خليط من نقاط نهاية HTTP و HTTPS
- نقاط نهاية HTTP عرضة لهجمات الوسيط
- عنوان IP داخلي مكشوف (188.68.36.205)
- لا يوجد تثبيت شهادة
---
## 📊 جدول ملخص الثغرات
| # | الفئة | الخطورة | المكون | الحالة |
|---|-------|--------|-------|--------|
| 1 | مصادقة ضعيفة | عالي | تطبيقات الهاتف | ⚠️ يحتاج إصلاح |
| 2 | تشفير IV ثابت | حرج جداً | المركز الخلفي | 🔴 حرج |
| 3 | SQL Injection | عالي | طبقة قاعدة البيانات | ⚠️ إصلاح جزئي |
| 4 | سلطة الدفع | عالي | المحفظة | ⚠️ يحتاج تدقيق |
| 5 | نقاط نهاية HTTP | عالي | الفورية | ⚠️ يحتاج إصلاح |
| 6 | أذونات مفرطة | متوسط | Android | ⚠️ يحتاج مراجعة |
| 7 | المكتبات القديمة | متوسط | Flutter | ⚠️ يحتاج تحديث |
| 8 | إدارة الأسرار | متوسط | التكوين | ⚠️ يحتاج تدقيق |
| 9 | الكشف عن الأخطاء | متوسط | API | ⚠️ يحتاج إصلاح |
| 10 | أمان JWT | متوسط | المصادقة | ⚠️ يحتاج تدقيق |
---
## 🛠 الخطوات التالية (المرحلة 2-5)
### المرحلة 2: مراجعة يدوية تفصيلية
- [ ] تدقيق جميع الملفات في دليل `/auth/`
- [ ] مراجعة جميع استعلامات قاعدة البيانات لـ SQL Injection
- [ ] تحليل منطق معالجة الدفع
- [ ] فحص نقاط نهاية المسؤول للتفويض
### المرحلة 3: الفحص الآلي
- [ ] تشغيل Semgrep على جميع ملفات PHP (395)
- [ ] تشغيل التحليل الثابت على رمز Dart
- [ ] التحقق من بيانات Android مع MobSF
- [ ] فحص ثغرات المكتبة
### المرحلة 4: الاختبار الديناميكي
- [ ] Burp Suite اعتراض واختبار
- [ ] غش نقاط النهاية
- [ ] فحص Frida في وقت التشغيل لتطبيقات Flutter
- [ ] اختبار تدفق الدفع
### المرحلة 5: التوثيق
- [ ] إنشاء PoC لكل ثغرة
- [ ] توثيق خريطة طريق التصحيح
- [ ] إنشاء دليل أفضل الممارسات الأمنية
---
## 📝 الملفات التي تحتاج إلى مراجعة فورية
1.`backend/encrypt_decrypt.php` - **حرج جداً**
2.`backend/login*.php` - **عالي**
3.`backend/functions.php` - **عالي**
4.`backend/core/bootstrap.php` - **عالي** (يحتاج قراءة)
5.`walletintaleq.intaleq.xyz/v2/main/ride/driverWallet/*.php` - **عالي**
6. ✅ جميع الملفات في `backend/auth/` - **عالي**
7. ✅ جميع ملفات `pubspec.yaml` - **متوسط**
8. ✅ جميع ملفات `AndroidManifest.xml` - **متوسط**
---
## 📊 إحصائيات الثغرات
| المقياس | العدد |
|---------|-------|
| إجمالي الثغرات | 20 |
| ثغرات حرجة | 3 |
| ثغرات عالية | 7 |
| ثغرات متوسطة | 10 |
| ملفات PHP محللة | 395 |
| التطبيقات المستعرضة | 4 |
| نقاط نهاية المحفظة | 20+ |
| المستخدمون المعرضون | 50,000+ |
| البيانات الحساسة المعرضة | الهاتف والهوية ومعلومات الدفع |
---
**التقرير المُنتج:** 16 يونيو 2026
**الحالة:** نهائي وجاهز للمراجعة
</div>