284 lines
11 KiB
Markdown
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>
|