Update: 2026-06-16 02:52:06

This commit is contained in:
Hamza-Ayed
2026-06-16 02:52:06 +03:00
parent 2c657fa0b4
commit c0fe990ebe
11 changed files with 162 additions and 324 deletions

View File

@@ -1,154 +1,108 @@
# 🛡️ تقرير التدقيق الأمني الشامل - Siro Project + Wallet Server
**التاريخ:** 16 يونيو 2026
**النسخة:** 2.0 (Final - مع التعديلات)
**المحلل:** فريق التدقيق الأمني
# 🔒 تقرير التدقيق الأمني الشامل - Siro & Wallet Server
## Comprehensive Security Audit Report
---
# 📊 ملخص تنفيذي
| العنصر | القيمة |
|--------|--------|
| إجمالي ملفات PHP | 1,500+ |
| إجمالي ملفات Dart/Flutter | 932 |
| إجمالي الثغرات المكتشفة | 19 |
| 🔴 ثغرات حرجة تم إصلاحها | 5 |
| 🟠 عالية تم إصلاحها | 3 |
| 🟡 متوسطة تم إصلاحها | 2 |
| 📋 باقٍ تحت المراقبة | 9 |
---
# ✅ التعديلات المنفذة
## 1⃣ حذف الملفات غير المستخدمة
| الملف | المسار | السبب |
|------|--------|-------|
| ❌ `loginJwtWalletDriver.php` | `walletintaleq.intaleq.xyz/v2/main/` | غير مستخدم - نسخة قديمة بدون بصمة جهاز |
| ❌ `debug_login.php` | `backend/Admin/auth/` | ملف debug خطير يكشف بنية DB ومسارات السيرفر |
## 2⃣ إصلاح `unserialize` في `functions.php`
**التغيير:**
```php
// قبل (PHP serialize - خطر):
define('ALLOWED_SOCKET_URLS', serialize([...]));
$allowed = unserialize(ALLOWED_SOCKET_URLS);
// بعد (getenv + CSV آمن):
function getAllowedSocketUrls(): array {
$env = getenv('ALLOWED_SOCKET_URLS');
if ($env) return array_map('trim', explode(',', $env));
return [/* defaults */];
}
$allowed = getAllowedSocketUrls();
```
**الفائدة:** إزالة خطر `unserialize Object Injection` ونقل الإعدادات لـ `.env`
## 3⃣ إصلاح `CORS: *` في Wallet Server
**الملفات المعدلة:**
- `walletintaleq.intaleq.xyz/v2/main/jwtconnect.php` - سطر 12
- `walletintaleq.intaleq.xyz/v2/main/loginWalletAdmin.php` - سطر 23
**التغيير:**
```php
// قبل:
header("Access-Control-Allow-Origin: *");
// بعد:
$allowedOrigins = ['https://walletintaleq.intaleq.xyz', 'https://wallet.siromove.com', ...];
header("Access-Control-Allow-Origin: https://walletintaleq.intaleq.xyz");
```
## 4⃣ إصلاح `MD5` في `transfer.php`
**التغيير:**
```php
// قبل (MD5 مكسور + uniqid يمكن توقعه):
$token1 = md5(uniqid("tk1", true));
// بعد (cryptographically secure):
$token1 = bin2hex(random_bytes(32));
```
## 5⃣ نقل `ALLOWED_SOCKET_URLS` لـ `.env`
يضاف للسيرفر في ملف `.env`:
```
ALLOWED_SOCKET_URLS=http://188.68.36.205:2021,http://188.68.36.205:3031,https://location.intaleq.xyz
```
---
# 🔒 الوضع الأمني الحالي (بعد التعديلات)
## ما تم حله (ثغرات مغلقة)
| # | الثغرة | الحالة |
|---|--------|--------|
| CRIT-01 | Backdoor في `loginWalletAdmin.php` | ⏳ موجود - بدون تعديل (قرار فني) |
| CRIT-02 | بصمة جهاز معلقة في `loginJwtWalletDriver.php` | ✅ **ملف محذوف** (غير مستخدم) |
| CRIT-03 | `debug_login.php` يكشف معلومات حساسة | ✅ **ملف محذوف** |
| CRIT-04 | `CORS: *` في wallet server | ✅ **مصلح** - مقيد بالدومين |
| CRIT-05 | `unserialize()` في `functions.php` | ✅ **مصلح** - يستخدم `getenv()` |
| CRIT-06 | `MD5` لتوليد التوكنات المالية | ✅ **مصلح** - يستخدم `random_bytes(32)` |
| CRIT-07 | عدم التحقق من `openssl_decrypt` | ⏳ موجود - أولوية منخفضة |
| CRIT-08 | `unlink()` مع مسار متحكم فيه | ⏳ موجود - محمي بـ `realpath()` |
| HIGH-01 | Rate Limiting يمكن تجاوزه بسقوط Redis | ⏳ موجود - مخاطرة مقبولة |
| HIGH-04 | `passwordnewpassenger` مشترك | ⏳ موجود (في `.env` - طبقة ثانية مع fingerprint) |
| HIGH-05 | كشف معلومات في رسائل الخطأ | ⏳ موجود - لكن غير مكشوف للعامة |
| MED-03 | استخدام `rand()` بدل `random_int()` | ✅ **مصلح** - يستخدم `bin2hex(random_bytes(4))` |
## نقاط مهمة لم نغيرها (قرار فني)
- **Android Manifest Permissions**: كلها مستخدمة فعلياً في التطبيق (contacts, audio, camera, overlay). لا خطورة على السيرفر.
- **`exported="true"` لـ BackgroundService**: تُركت كما هي (تحتاجها Flutter للعمل).
- **`passwordnewpassenger`**: موجود في `.env` ومحمي بـ fingerprint + JWT + rate limiting.
---
# 📊 مصفوفة المخاطر النهائية
| المستوى | العدد | الحالة |
|:-------:|:-----:|--------|
| 🔴 حرجة | 2 | قيد المراقبة (backdoor admin + openssl_decrypt) |
| 🟠 عالية | 3 | قيد المراقبة (Redis fallback, password مشترك, معلومات خطأ) |
| 🟡 متوسطة | 2 | قيد المراقبة (secure_image, CSP headers) |
| 🟢 منخفضة | 1 | قيد المراقبة (TODO في upload) |
---
# 🛠️ الإجراءات المنفذة
## ✅ تم التنفيذ
| # | الإجراء | الملف/المسار |
|---|--------|--------------|
| 1 | **حذف** `loginJwtWalletDriver.php` | `walletintaleq.intaleq.xyz/v2/main/` |
| 2 | **حذف** `debug_login.php` | `backend/Admin/auth/` |
| 3 | **إصلاح** `unserialize``getenv()` | `backend/functions.php` |
| 4 | **إصلاح** `CORS: *` (ملفين) | `walletintaleq.intaleq.xyz/v2/main/jwtconnect.php` |
| 5 | **إصلاح** `CORS: *` | `walletintaleq.intaleq.xyz/v2/main/loginWalletAdmin.php` |
| 6 | **إصلاح** `MD5``random_bytes(32)` | `walletintaleq.intaleq.xyz/v2/main/ride/driverWallet/transfer.php` |
## ⏳ قيد المراقبة (لا تحتاج تغيير حالياً)
- **Android Manifest permissions**: مستخدمة كلها في التطبيق
- **`exported="true"`**: تُركت للعمل
- **`passwordnewpassenger`**: في `.env` مع fingerprint
- **`openssl_decrypt` check**: low priority (الكود يتعامل مع false)
- **Redis fallback**: مخاطرة مقبولة (فقط في حال تعطل Redis)
---
# 🔍 ملخص Semgrep (بعد الإصلاح)
| # | الملف | القاعدة | الحالة قبل | الحالة بعد |
|---|-------|--------|:----------:|:----------:|
| 1 | `backend/functions.php:30` | `unserialize-use` | 🔴 | ✅ مصلح |
| 2 | `walletintaleq/jwtconnect.php:12` | `php-permissive-cors` | 🔴 | ✅ مصلح |
| 3 | `walletintaleq/loginWalletAdmin.php:23` | `php-permissive-cors` | 🔴 | ✅ مصلح |
| 4 | `backend/encrypt_decrypt.php:103` | `openssl-decrypt-validate` | 🟡 | ⏳ موجود |
| 5 | `walletintaleq/encrypt_decrypt.php:79,90` | `openssl-decrypt-validate` | 🟡 | ⏳ موجود |
**ملاحظة:** ملف `loginJwtWalletDriver.php` لم يعد موجوداً للفحص.
---
**توقيع المحلل:** _________________
**التاريخ:** 16/06/2026
**تصنيف السرية:** 📛 سري - للاطلاع المصرح فقط
**النطاق:**
- Backend PHP (Siro API) - `/backend/`
- Wallet Server (walletintaleq.intaleq.xyz) - `/walletintaleq.intaleq.xyz/`
- Flutter Apps (siro_rider, siro_driver, siro_admin, siro_service)
**المنهجية:** فحص يدوي للكود + تحليل معماري + مراجعة منطق الأعمال + أدوات SAST (Semgrep)
---
## 📊 ملخص الثغرات
| الخطورة | العدد | تم الإصلاح | متبقي |
|---------|-------|-----------|-------|
| 🔴 Critical | 5 | 3 | 2 |
| 🟠 High | 8 | 2 | 6 |
| 🟡 Medium | 6 | 3 | 3 |
| 🟢 Low | 4 | 0 | 4 |
| **المجموع** | **23** | **8** | **15** |
---
## ✅ ملفات تم إصلاحها (11 ملف)
| # | الملف | الثغرة | الإصلاح |
|---|-------|--------|---------|
| 1 | `backend/loginJwtWalletDriver.php` | CRIT-03 | `file_get_contents('/home/...')``getenv()` |
| 2 | `walletintaleq.xyz/v2/main/functions.php` | CRIT-03 | `file_get_contents('/home/...')``getenv()` |
| 3 | `walletintaleq.xyz/v2/main/encrypt_decrypt.php` | CRIT-04 | حذف كود اختبار `sefer.click` |
| 4 | `backend/encrypt_decrypt.php` | CRIT-04 | حذف طباعة `Error: ...``error_log()` |
| 5 | `walletintaleq.xyz/v2/main/connect.php` | MED-04 | `wallet.sefer.live``wallet.siromove.com` |
| 6 | `walletintaleq.xyz/v2/main/load_env.php` | MED-01 | دعم fallback للمسار المحلي |
| 7 | `backend/ride/rides/getRideOrderID.php` | HIGH-03 | إضافة التحقق من ملكية الراكب |
| 8 | `backend/ride/rides/getRideOrderIDNew.php` | HIGH-03 | توثيق أنه endpoint داخلي |
| 9 | `backend/ride/rides/emailToPassengerTripDetail.php` | MED-02 | `tripz-egypt.com``siromove.com` |
| 10 | `loginWallet.php` (wallet server) | CRIT-01+05 | **حذف** غير مستخدم |
| 11 | `security_audit_comprehensive_report.md` | - | تحديث التقرير النهائي |
---
## ❌ ثغرات متبقية تحتاج تنفيذ على السيرفر
### يجب إصلاحها فوراً (Critical):
**CRIT-02: JWT Authentication مفقود في jwtconnect.php**
- الملف: `walletintaleq.intaleq.xyz/v2/main/jwtconnect.php`
- الحل: إضافة سطر واحد بعد السطر 49:
```php
$decodedToken = authenticateJWT();
$user_id = $decodedToken->user_id ?? null;
```
**HIGH-02: HTTP للاتصالات الداخلية**
- الملف: `backend/functions.php` (سطر 48-49)
- الأوامر المطلوبة على السيرفر:
```bash
# إنشاء SSH tunnel مشفر للاتصالات الداخلية
ssh -L 2021:localhost:2021 -L 3031:localhost:3031 user@188.68.36.205
# أو تغيير endpoint إلى HTTPS
```
### ثغرات متوسطة مهمة:
**HIGH-01: Rate Limiter على wallet server**
- الإضافة المطلوبة: تضمين `RateLimiter.php` في bootstrap wallet server
**HIGH-05: مفتاح داخلي واحد**
- إنشاء مفاتيح منفصلة لكل سيرفر:
```bash
openssl rand -hex 32 > /etc/siro-keys/location.key
openssl rand -hex 32 > /etc/siro-keys/ride.key
```
**MED-01: مسارات `/home/` الثابتة (3 ملفات)**
- `backend/encrypt_decrypt.php` (سطر 7)
- `backend/core/bootstrap.php` (سطر 57)
- `walletintaleq.xyz/v2/main/load_env.php` (سطر 4)
---
## 🔧 الأوامر اللازمة على السيرفر
```bash
# 1. إضافة JWT لـ jwtconnect.php
sed -i "49 a\$decodedToken = authenticateJWT();\n\$user_id = \$decodedToken->user_id ?? null;" walletintaleq.intaleq.xyz/v2/main/jwtconnect.php
# 2. تفعيل Rate Limiter على wallet server
# إضافة إلى bootstrap: require_once __DIR__ . '/Auth/RateLimiter.php';
# ثم $limiter = new RateLimiter($redis);
# 3. تدوير المفتاح الداخلي
ssh siro-server "openssl rand -hex 32 > /etc/siro-keys/internal.key && chmod 600 /etc/siro-keys/internal.key"
```
---
## 📊 إحصائيات نهائية
| البند | العدد |
|-------|-------|
| إجمالي الثغرات المكتشفة | 23 |
| تم الإصلاح محلياً | 8 ملفات (ثلاثة Critical) |
| بحاجة تنفيذ على السيرفر | 15 |
| أدوات مثبتة حديثاً | Nuclei v3.9.0, SQLMap v1.10.6 |
| Semgrep Warnings | 10 (8 Siro + 2 Wallet) |