01المصادقة في تطبيقات الويب

تعريف المصادقة (Authentication)

عملية أساسية في أمن المعلومات، مسؤولة عن التحقق من هوية المستخدمين أو الأنظمة اللي بتحاول الوصول للموارد. الهدف الأساسي: ضمان إن المستخدمين الشرعيين بس هم اللي يقدروا يوصلوا للبيانات أو الأنظمة أو الوظائف الحساسة.

المصادقة مقابل التفويض (Authentication vs Authorization)

المصادقة بتتحقّق من هوية المستخدم، بينما التفويض بيحدّد إيه اللي المستخدم المصادَق عليه مسموح له يعمله.

الجانبAuthenticationAuthorization
التعريفالتحقق من هوية المستخدم أو النظامتحديد ما يُسمح للمستخدم المصادَق عليه بفعله
الغرضإثبات "مين المستخدم"تحديد الموارد والإجراءات المتاحة له
العمليةفحص بيانات اعتماد (كلمات مرور، توكنات)فحص الصلاحيات والأدوار مقابل الموارد
النتيجةهوية مؤكَّدة (مسجَّل دخول أو لا)منح أو رفض الوصول لمورد/إجراء محدَّد
مثالتسجيل الدخول باسم مستخدم وكلمة مرورتحديد هل المستخدم المسجَّل يقدر يوصل لمورد معيّن
أهمية المصادقة

هي خط الدفاع الأول ضد الوصول غير المصرَّح به — بتحمي من اختراق البيانات، الاستيلاء على الحسابات، وغيرها من التهديدات، عبر ضمان إن المستخدمين الشرعيين بس هم اللي يتفاعلوا مع مناطق التطبيق المقيَّدة.


02آليات المصادقة وإدارة الجلسات

أنواع آليات المصادقة

1Password-Based — اسم مستخدم + كلمة مرور
2MFA — دمج عاملين مستقلين أو أكتر (شيء تعرفه، شيء تملكه، شيء أنت هو)
32FA — نوع محدَّد من MFA يتطلّب عاملين بالضبط
4Token-Based — توكنات زي JWT أو OAuth بعد تسجيل الدخول الناجح
5SSO — تسجيل دخول واحد للوصول لعدة تطبيقات (SAML/OAuth)
6OTP — كلمة مرور مؤقتة لمرة واحدة عبر SMS أو بريد إلكتروني

إدارة الجلسات (Session Management)

عملية إنشاء وصيانة وتأمين جلسة المستخدم بعد المصادقة. بما إن HTTP بروتوكول عديم الحالة (Stateless)، إدارة الجلسات ضرورية لتتبّع هوية المستخدم عبر طلبات متعددة. الوظائف الأساسية: إنشاء الجلسة (توليد Session ID عند المصادقة)، صيانة الجلسة (تذكّر المستخدم عبر الطلبات)، أمان الجلسة (حماية من Hijacking/Fixation عبر HTTPS وأعلام الكوكيز الآمنة)، وإنهاء الجلسة (بعد فترة خمول أو تسجيل خروج).

العلاقة بين المصادقة وإدارة الجلسات

  1. المصادقة هي نقطة البداية — بتتحقّق من الهوية
  2. إنشاء الجلسة بعد المصادقة مباشرة — Session ID فريد
  3. إدارة الجلسة بتحافظ على استمرارية الهوية عبر الطلبات المتعددة
  4. أمان الجلسة بعد المصادقة — Timeouts، كوكيز آمنة، آليات قائمة على التوكنات
  5. إنهاء الجلسة وإعادة المصادقة عند تسجيل الخروج أو انتهاء الصلاحية
فرق دقيق

إدارة الجلسات مش دايمًا مرتبطة بالمصادقة — تطبيقات الويب الحديثة ممكن تبدأ جلسات حتى قبل المصادقة، لتتبّع مستخدمين مجهولين (مثلًا لحفظ تفضيل اللغة من أول طلب).


03منهجية اختبار المصادقة (WSTG-ATHN)

اختبار المصادقة هو عملية فحص واستغلال نقاط الضعف في آليات التحقق من الهوية — نماذج تسجيل الدخول، إعادة تعيين كلمة المرور، MFA، وآليات القفل. الهدف: تحديد واستغلال نقاط ضعف تسمح بالوصول غير المصرَّح به أو تصعيد الصلاحيات أو اختطاف الجلسات الشرعية.

IDالاختبارالوصف
ATHN-01نقل بيانات الاعتماد عبر قناة مشفَّرةالتحقق من نقل بيانات الاعتماد عبر HTTPS لمنع الاعتراض أو التلاعب
ATHN-02بيانات اعتماد افتراضيةفحص وجود بيانات اعتماد افتراضية لسه مستخدَمة
ATHN-03آلية قفل ضعيفةتقييم آليات القفل لمنع هجمات Brute-force على الحسابات
ATHN-04تجاوز مخطط المصادقةتحديد عيوب تسمح بتجاوز عملية المصادقة بالكامل
ATHN-05دالة "تذكّرني" ضعيفةتقييم إذا كانت ميزة Remember Me مُطبَّقة بأمان
ATHN-06ضعف ذاكرة التخزين المؤقت للمتصفحالتأكد إن معلومات حساسة مش متخزّنة بشكل غير آمن في الكاش
ATHN-07سياسة كلمة مرور ضعيفةفحص إنفاذ التعقيد وانتهاء صلاحية كلمات المرور
ATHN-08مصادقة ضعيفة في قنوات بديلةاختبار قنوات مصادقة بديلة (APIs، تطبيقات موبايل) لممارسات أمنية أضعف

04تعداد أسماء المستخدمين

تقنية لاختبار هل المهاجم يقدر يحدّد إن اسم مستخدم معيّن موجود في النظام — غالبًا بتُنفَّذ على نماذج تسجيل الدخول والتسجيل واسترجاع كلمة المرور. الهدف: تجميع مجموعة أسماء مستخدمين صالحة عبر التفاعل مع آلية المصادقة، وده مفيد لاختبار Brute-force لاحقًا.

كيف تحدث الثغرة

التطبيق بيستجيب بشكل مختلف حسب صحة اسم المستخدم — مثلًا رسالة خطأ منفصلة لـ "اسم مستخدم غير صحيح" مقابل "كلمة مرور غير صحيحة". المهاجم يقدر يستخدم الفرق ده لتأكيد أسماء مستخدمين صالحة، ثم يستخدمها في هجوم Brute-force موجَّه. الثغرة ممكن تظهر كمان في شكل رموز HTTP مختلفة، أوقات تحميل مختلفة، أو رسائل خطأ مختلفة.


05اختبار سياسة كلمة المرور الضعيفة (ATHN-07)

تقييم هل التطبيق بيفرض سياسة كلمة مرور قوية — جزء حرج من اختبار المصادقة لضمان عدم قبول كلمات مرور ضعيفة أو سهلة التخمين.

تركيز
مناطق الفحص
تعقيد كلمة المرور (الطول، أنواع الأحرف)، آليات القفل/Rate Limits، ووضوح رسائل الخطأ (هل بتكشف معلومات عن صحة كلمة المرور؟).
نتائج
ما قد يُكتشَف
سياسة ضعيفة جدًا تقبل كلمات بسيطة، حماية غير كافية من Brute-force، رسائل خطأ غير متسقة بتسرّب معلومات، أو تجاوز كامل لأمان تسجيل الدخول.

06آليات القفل الضعيفة وتجاوز الـ CAPTCHA (ATHN-03)

تقييم هل آليات القفل زي CAPTCHA فعّالة في منع محاولات تسجيل دخول آلية بعد محاولات فاشلة متعددة. CAPTCHA ضعيفة أو مُطبَّقة بشكل سيئ ممكن تُتجاوَز، وده بيكشف إزاي آليات القفل الضعيفة ممكن تؤدّي لاختراق حسابات.

أنواع CAPTCHA من الأضعف للأقوى

النوعالقوةالثغرات
Arithmetic-basedضعيفحل حسابي بسيط — يُتجاوَز بـ Brute-force أو خدمات حل CAPTCHA زي 2Captcha
Text-basedأساسيعرضة لبوتات تستخدم تقنية OCR، التشويه البسيط سهل الكسر
Image-basedمتوسطمحتاج نماذج AI أكثر تطورًا، لكن مش منيع
reCAPTCHA v2متوسط-قويمربّع "لست روبوت" + مهام صور أحيانًا
reCAPTCHA v3قوي جدًابيعمل في الخلفية بالكامل، بيقيّم سلوك المستخدم بدون تفاعل
هدف الاختبار

تقييم هل CAPTCHA أو آليات القفل التانية ممكن تُتجاوَز لمواصلة محاولات تسجيل دخول آلية (Brute-force أو Dictionary attack).


07تجاوز مخطط المصادقة (ATHN-04)

تحديد نقاط ضعف في عمليات المصادقة بتسمح للمهاجمين بتجاوز آليات المصادقة بالكامل. الهدف: اكتشاف أخطاء إعداد أو تطبيقات غير آمنة، تحديد مسارات أو Endpoints بديلة توفّر وصول غير مصرَّح به، والتحقق من Endpoints غير محمية.

1Endpoints غير محمية — لوحات أدمن أو ملفات إعداد مكشوفة بدون تسجيل دخول
2بيانات اعتماد افتراضية/مضمَّنة — تُترك في الكود أو ملفات الإعداد بدون تغيير
3ضوابط وصول ضعيفة أو مفقودة — صفحات بدون فحص صلاحيات كافٍ
4التلاعب بالمعاملات (Parameter Manipulation) — تعديل URL Parameters أو الكوكيز أو الـ Headers أو POST Data لخداع التطبيق

08إدارة الجلسات ومعرّفات الجلسة

دورة إنشاء وإدارة الجلسة

  1. إنشاء الجلسة: عند أول وصول (غالبًا عبر تسجيل الدخول)، السيرفر بينشئ جلسة فريدة وبيخزّن بيانات المستخدم بشكل آمن، وبيخصّص Session ID
  2. إدارة الجلسة بالكوكيز: السيرفر بيبعت Session ID للمتصفح في كوكي — المتصفح بيضمّنها تلقائيًا في الطلبات التالية
  3. دور Session ID: الرابط الأساسي بين العميل وبيانات الجلسة على السيرفر — لازم يكون غير قابل للتنبؤ ومخزَّن بأمان

طرق تطبيق Session ID

الطريقةالوصفملاحظة أمنية
Cookie-Basedالأكثر شيوعًا — Session ID في كوكي بيتبعت مع كل طلبيمكن حمايتها بـ HttpOnly/Secure/SameSite
URL-BasedSession ID مُلحَق بالرابط كمعاملغير آمن — يظهر في سجل المتصفح واللوجات
Token-Basedتوكنات زي JWT — تحتوي معلومات مشفَّرة وممكن تكون Statelessمُستخدَم بكثرة في APIs والتطبيقات الحديثة
Header-BasedSession ID في Header مخصَّص — شائع في RESTful APIsأكثر أمانًا شوية لأنه بعيد عن الرابط والكوكيز

اختبارات إدارة الجلسة

الاختبارالوصف
Session Management Schemaالتحقق من تخزين معرّفات الجلسة بأمان ومش سهل تخمينها
Cookie Attributesفحص إعدادات HttpOnly/Secure/SameSite لمنع سرقة الكوكي عبر XSS
Session Fixationتقييم هل المهاجم يقدر يحدّد أو يتنبّأ بـ Session ID قبل تسجيل الدخول
Session Expirationضمان انتهاء الجلسة بعد فترة خمول أو تسجيل خروج
Session Timeoutتقييم هل الجلسات مُعدَّة لإنهاء نفسها بعد فترة معقولة

09الكوكيز ومعاملاتها الأمنية

قطع بيانات صغيرة مخزَّنة على متصفح المستخدم بواسطة المواقع اللي بيزورها — بتحتفظ بمعلومات بين الجلسات زي حالة تسجيل الدخول والتفضيلات.

HttpOnly
منع وصول JavaScript
بيمنع سكريبتات جهة العميل من الوصول للكوكي — حماية من سرقة بيانات الكوكي عبر هجمات XSS.
Secure
نقل عبر HTTPS فقط
الكوكي بتُنقَل بس عبر اتصالات HTTPS — حماية من الاعتراض عبر HTTP غير المشفَّر وهجمات Man-in-the-Middle.
SameSite
تقييد الطلبات العابرة للمواقع
Strict: تُرسَل بس في سياق الموقع نفسه. Lax: مرونة أكتر شوية مع طلبات GET الأساسية. None: تُرسَل في كل السياقات (تتطلّب Secure). بتقلّل خطر CSRF.
Expiration
عمر الكوكي
كوكيز الجلسة بتُحذَف عند إغلاق المتصفح، والكوكيز الدائمة بتفضل لمدة محدَّدة — تقليل مدة الصلاحية بيقلّل نافذة سوء الاستخدام.
example — setting a secure session cookie
POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

username=testuser&password=examplepassword

HTTP/1.1 200 OK
Set-Cookie: session_id=abc123xyz; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=3600
Content-Type: text/html

10اختبار مخطط الجلسة والتلاعب بالكوكيز (SESS-01)

تقييم أمان تصميم وقوة مخطط إدارة الجلسات — فحص إزاي التطبيق بيدير إنشاء وصيانة وإنهاء توكنات الجلسة.

نمط الهجوم النموذجي

  1. جمع الكوكيز: تجميع عدد كافٍ من عيّنات الكوكي
  2. هندسة عكسية للكوكي: تحليل خوارزمية توليد الكوكي
  3. التلاعب بالكوكي: تزوير كوكي صالح لتنفيذ الهجوم — ممكن يحتاج محاولات كتيرة (Cookie Brute-force)

أهداف الاختبار الرئيسية

التقنيةالوصفالثغرة
Predictable Session IDsتحليل عشوائية التوكناتالمهاجم يقدر يخمّن أو يولّد توكنات صالحة
Session Fixationتثبيت Session ID قبل التسجيلاستيلاء على الجلسة بعد مصادقة الضحية
Session Expirationالتحقق من انتهاء الجلسة بعد Timeout وتسجيل الخروججلسات لا تنتهي ممكن تُعاد استخدامها
Session Hijackingإعادة تشغيل كوكي الجلسة من أجهزة/مواقع مختلفةاختطاف لو التوكن مش مرتبط بخصائص المستخدم
Cookie Security Flagsفحص HttpOnly/Secure/SameSiteغيابها يعرّض لـ XSS وCSRF وMitM
Session Token in URLsالتأكد إن التوكنات مش في الرابطتسريب عبر Referrer headers واللوجات والتاريخ

الهندسة العكسية والتلاعب بالكوكي

فحص بنية الكوكي بحثًا عن أنماط قابلة للتنبؤ أو معلومات مُرمَّزة (Base64/URL encoding) ممكن تكشف بيانات حساسة لو مش مشفَّرة فعليًا. مثال شائع: تعديل معامل role=guest إلى role=admin — لو التطبيق مش بيتحقّق من الصلاحيات من جهة السيرفر، ده ممكن يمنح صلاحيات غير مصرَّح بها.


11اختطاف الجلسة وتثبيت الجلسة

بعد المصادقة
Session Hijacking
المهاجم بيسرق توكن جلسة نشط بعد ما المستخدم يسجّل دخوله، وبيقدر ينتحل شخصيته مباشرة.
قبل المصادقة
Session Fixation
المهاجم بيحدّد Session ID مسبقًا قبل ما المستخدم يسجّل دخوله، والضحية بيستخدمه من غير ما يعرف، فيسمح للمهاجم بالوصول بعد المصادقة.

كيف يعمل Session Hijacking

1
إنشاء الجلسة

عند تسجيل الدخول، السيرفر بيولّد Session ID ويخصّصه للمستخدم — غالبًا في كوكي أو معامل URL أو Header.

2
اعتراض Session ID

عبر Sniffing (التقاط ترافيك غير مشفَّر)، Man-in-the-Middle، XSS (حقن سكريبت لسرقة الكوكي)، أو استغلال خوارزميات توليد ضعيفة لتوكنات قابلة للتنبؤ.

3
الاستيلاء على الجلسة

المهاجم بيستخدم Session ID المسروق لانتحال المستخدم الشرعي — السيرفر مش قادر يفرّق بين المهاجم والمستخدم الحقيقي.

4
الاستغلال

المهاجم بيقدر ينفّذ إجراءات كمستخدم شرعي — عرض بيانات حساسة، معاملات غير مصرَّح بها، أو تعديل إعدادات الحساب.

كيف يعمل Session Fixation

1
المهاجم بيحدّد Session ID

بينشئ أو يحصل على Session ID صالح (مثلًا ببدء جلسة مع التطبيق الهدف) أو بيخمّن واحد قابل للتنبؤ، وبيبعته للضحية عبر رابط أو كوكي أو حقن JavaScript.

2
الضحية بيسجّل دخوله بالمعرّف المفروض

الضحية من غير ما يعرف بيستخدم Session ID اللي زرعه المهاجم — التطبيق بيربط المعرّف ده بجلسة الضحية المصادَق عليها.

3
المهاجم بيحصل على الوصول

بما إن المهاجم أصلًا عارف Session ID، بيقدر يستخدمه للوصول لجلسة الضحية بدون الحاجة لبيانات اعتماد الدخول.

أسباب ثغرات Session Fixation


12تزوير الطلبات عبر المواقع (CSRF)

ثغرة أمنية بتخلّي المهاجم يخدع المستخدم عشان ينفّذ إجراءات على تطبيق ويب من غير علمه أو موافقته — الهجوم بيستغل الثقة اللي التطبيق عنده في متصفح المستخدم.

منهجية هجوم CSRF

  1. التطبيق بيثق إن الطلبات القادمة من متصفح المستخدم شرعية — المهاجم بيستغل الثقة دي
  2. معظم التطبيقات بتستخدم كوكيز للمصادقة، وبتتبعت تلقائيًا مع كل طلب
  3. المهاجم بيصنع طلب خبيث (مثلًا تغيير بريد إلكتروني أو كلمة مرور) ويضمّنه في صفحة ويب أو إيميل
  4. المهاجم بيستدرج الضحية لتحميل المحتوى ده وهو مسجّل دخوله على التطبيق الهدف
  5. متصفح الضحية بيبعت الطلب الخبيث تلقائيًا، بما فيه كوكي المصادقة
  6. التطبيق، واثق في الطلب بسبب الكوكي، بينفّذه — وحساب الضحية يتأثّر
التأثير المحتمل

تغييرات غير مصرَّح بها في إعدادات الحساب، تحويلات أموال أو إجراءات نيابة عن المستخدم بدون موافقته، أو إجراءات خبيثة زي تغيير كلمات المرور والبريد الإلكتروني ومعلومات البروفايل.


13مقدمة في المصادقة القائمة على التوكنات

طريقة حديثة للتحقق والتفويض الآمن للمستخدمين أو التطبيقات — بدل الاحتفاظ بحالة الجلسة على السيرفر، التوكنات بتتصدر للعميل وبتُمرَّر ذهابًا وإيابًا لمصادقة الطلبات.

أنواع التوكنات

01
Bearer Tokens
تنسيق بسيط بيمنح وصول عند تقديمه — شائع في APIs. السيرفر بيفترض إن حامل التوكن مُخوَّل. لازم تفضل سرّية ومحدودة المدة لتقليل خطر سوء الاستخدام لو اتسرّبت.
02
JWT
توكن مكتفٍ ذاتيًا (Self-contained) بثلاثة أجزاء: Header وPayload وSignature — محمول وStateless، بيخلّي السيرفر يستغني عن تخزين الجلسة.
03
OAuth Tokens
Access Tokens: صلاحية الوصول للموارد. Refresh Tokens: الحصول على Access Token جديد بدون إعادة مصادقة.

مكان التوكن في الطلب

الموقعالاستخدامملاحظة أمنية
Authorization Headerالأكثر شيوعًا وأمانًا — Authorization: Bearer <token>يبعد التوكن عن الرابط، يمنع تسريبه عبر اللوجات
Query Parametersالتوكن مُلحَق بالرابطخطر — يظهر في التاريخ واللوجات ويُخزَّن Cache
Request Bodyغالبًا في طلبات POSTمناسب لإرسال بيانات، تجنّبه في GET
Cookiesتُضاف تلقائيًا للطلبات لنفس النطاقيحتاج HttpOnly + Secure، وعرضة لـ CSRF بدون حماية إضافية
Custom HeadersHeader مخصَّص (مثلًا X-Auth-Token)أقل قياسية لكن مفيد لأنظمة بمتطلبات أمنية خاصة
أفضل الممارسات

استخدم Authorization Header دايمًا ما أمكن، تجنّب معاملات الرابط، أمّن أي توكن في كوكيز بـ HttpOnly وSecure وSameSite، وشفّر النقل دايمًا بـ HTTPS بغضّ النظر عن مكان التوكن.


14JSON Web Tokens (JWT) بالتفصيل

طريقة مدمجة وآمنة للرابط (URL-safe) ومكتفية ذاتيًا لنقل المعلومات بأمان بين الأطراف — بتُستخدم بكثرة للمصادقة والتفويض وتبادل المعلومات. بتتكوّن من ثلاثة أجزاء مفصولة بنقاط: HEADER.PAYLOAD.SIGNATURE.

example jwt (base64-encoded)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImV4cCI6MTcxNjQ1NDY2MH0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

مكوّنات JWT

ترتيب حرج

الـ Header دايمًا أولًا، بعده الـ Payload، وأخيرًا الـ Signature — التوقيع بيتولّد من تجزئة Header وPayload معًا، وأي تبديل في الترتيب ده بيُبطِل التوكن.

أنواع الـ Claims

Registered
Claims معيارية
iss (المُصدِر)، sub (الموضوع/ID المستخدم)، aud (الجمهور المستهدَف)، exp (وقت الانتهاء)، iat (وقت الإصدار)، nbf (غير صالح قبل).
Public
Claims عامة
مخصَّصة من المطوّر، لازم تكون فريدة لتجنّب التعارض — مثل role، email، permissions.
Private
Claims خاصة
متفَق عليها بين الأطراف المتبادلة للتوكن، غير معيارية — مثل department، cartId.
signature formula — hs256
HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)

دور JWT في المصادقة وإدارة الجلسات

عند تسجيل الدخول الناجح، السيرفر بيولّد JWT يحتوي Claims خاصة بالمستخدم، بيوقّعه بمفتاح سرّي/خاص، وبيبعته للعميل. في الطلبات التالية، العميل بيضمّن الـ JWT في Authorization header، والسيرفر بيتحقّق منه لمصادقة المستخدم — بدون أي تخزين جلسة من جهة السيرفر (Stateless)، وده بيحسّن قابلية التوسّع والمصادقة عبر الأنظمة الموزَّعة.


15ثغرة الخوارزمية None في JWT

بتحدث لما يُوقَّع JWT بخوارزمية none — ده بيسمح للمهاجم بالتلاعب في التوكن وتجاوز آليات التحقق لأن التوقيع إما مفقود أو مُتجاهَل.

أسباب الثغرة

كيف تُستغَل

1
استغلال الـ Header

المهاجم بيصنع JWT بحقل alg مضبوط على none — ده بيخبر السيرفر إنه مش هيتحقّق من التوقيع.

2
إزالة التوقيع

المهاجم بيعدّل التوكن ويشيل التوقيع — جزء التوقيع بعد النقطة الثانية بيفضل فارغ.

3
تجاوز المصادقة

السيرفر بيعتبر التوكن صالح لأنه مش بيتحقّق من التوقيع لما alg يكون none — المهاجم يقدر يعدّل الـ Payload لانتحال أي مستخدم أو تصعيد الصلاحيات.

forged jwt — alg: none
{
  "alg": "none",
  "typ": "JWT"
}

eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJ1c2VyIjoiYWRtaW4ifQ.
أشكال الاستغلال

تصعيد الصلاحيات (تغيير role: "user" إلى role: "admin")، انتحال الهوية (تزوير توكنات لمستخدمين آخرين)، واختطاف الجلسة بالكامل عبر Payload مستخدم شرعي مزوَّر.


16مقدمة في OAuth وهجماته الشائعة

OAuth2 هو المعيار الأساسي للويب للتفويض بين الخدمات — بيُستخدم لتفويض تطبيقات طرف ثالث للوصول لخدمات أو بيانات من مزوّد عندك حساب فيه.

مكوّنات OAuth

أنواع تدفّق OAuth (Flows)

أهم هجمات OAuth الشائعة

الهجومالآلية
Unvalidated Redirect URIعدم التحقق من إن redirect_uri ملك للـ Client → Open Redirect واختطاف حساب عبر سرقة Authorization Code
Weak Authorization Codesأكواد تفويض ضعيفة يمكن تخمينها عند Token Endpoint خصوصًا لو client secret مخترَق أو غير مُتحقَّق منه
Everlasting Authorization Codesأكواد تفويض غير منتهية الصلاحية بتوسّع نافذة استغلال الأكواد الملتقَطة أو المخمَّنة
Codes Not Bound to Clientإمكانية تبديل كود تفويض مُلتقَط/مخمَّن مع Client آخر للحصول على Access Token
Weak Handle-Based Tokensتوكنات وصول/تجديد ضعيفة يمكن تخمينها عند Resource Server أو Token Endpoint
Insecure Token Storageتخزين التوكنات كنص عادي غير مُجزَّأ في قاعدة البيانات
Refresh Token Not Bound to Clientاستبدال Refresh Token صادر لـ Client بتوكن Client آخر لو الربط غير مُتحقَّق منه
example — redirect_uri manipulation
# الرابط الأصلي اللي بيستخدمه الـ Client:
http://gallery:3005/OAuth/authorize?response_type=code&redirect_uri=http%3A%2F%2Fphotoprint%3A3000%2Fcallback&scope=view_gallery&client_id=photoprint

# تعديل قيمة redirect_uri لجهة المهاجم:
http://gallery:3005/OAuth/authorize?response_type=code&redirect_uri=http%3A%2F%2Fattacker%3A1337%2Fcallback&scope=view_gallery&client_id=photoprint
سيناريو هجوم واقعي (Open Bank Project)

معامل redirectUrl كان عرضة لـ Reflected XSS بسبب تنظيف غير كافٍ للمدخلات. المهاجم حقن JavaScript خبيث، أنشأ Iframe خفي لصفحة تسجيل الدخول (بسبب X-Frame-Options: SAMEORIGIN)، واستغلّ تفعيل Autocomplete لسرقة بيانات اعتماد المستخدم عبر مستمع Netcat. السلسلة دمجت XSS مع ضعف X-Frame-Options مع CSRF على وظيفة إنشاء API Key.


17المصادقة الثنائية (2FA) وتجاوزها

إجراء أمني بيتطلّب من المستخدم إثبات هويته بعاملين مستقلين — شيء يعرفه وشيء يملكه — بيقلّل خطر الوصول غير المصرَّح به حتى لو اتسرّبت كلمة المرور.

أنواع 2FA

النوعالإيجابياتالسلبيات
SMS-basedسهل الاستخدام ومنتشرعرضة لـ SIM Swapping والاعتراض والتصيّد
Email-basedمش محتاج جهاز إضافيخطير لو البريد الإلكتروني نفسه مخترَق
TOTPأكثر أمانًا من SMS/Emailمحتاج إعداد وجهاز ثانوي
Authenticator Appsبدون اعتماد على قنوات اتصال خارجيةغير مريح لو الجهاز ضاع أو اتعطّل

تقنيات تجاوز 2FA

هندسة اجتماعية
Phishing / Vishing / SMiShing
صفحات تسجيل دخول مزيّفة، انتحال دعم فني عبر الهاتف، أو رسائل SMS احتيالية — كلها للحصول على OTP مباشرة من الضحية.
عيوب التطبيق
ضعف آليات الاسترجاع والتحقق
استغلال أسئلة الأمان أو أكواد الاسترجاع الضعيفة، Session Fixation قبل مصادقة 2FA، أو تحقق توكن ضعيف يسمح بهجمات Replay أو تلاعب.
اعتراض التوكن
MITM / SIM Swapping / SSL Stripping
اعتراض توكنات 2FA عبر قنوات غير مشفَّرة، نقل رقم هاتف الضحية لشريحة جديدة، أو تخفيض اتصال HTTPS لـ HTTP لاعتراض الـ OTPs.

منهجية اختبار 2FA

  1. جمع المعلومات: تحديد نوع 2FA المستخدَم، فهم مسار التطبيق بالكامل (تسجيل، تفعيل 2FA، استرجاع)، مراجعة إعدادات الأمان (طول التوكن، مدة الصلاحية، Rate Limiting)
  2. اختبار تدفّق المصادقة: التحقق من قوة الـ OTP (قابل للتنبؤ أو قصير؟)، محاولة إعادة استخدام توكن مُعترَض (Token Replay)، فحص نقل التوكنات عبر قنوات مشفَّرة
  3. Rate Limiting وآليات القفل: محاولة Brute-force للـ OTPs بأدوات زي Burp Intruder، تعداد OTPs صالحة عبر فروق الاستجابة
  4. تقنيات متقدّمة: فحص ثغرات OAuth/OpenID اللي ممكن تسمح بتجاوز 2FA، إعادة تشغيل OTPs في أجزاء مختلفة من التطبيق، وفحص هل التحقق من التوكن بيحصل من جهة السيرفر أو العميل

أمان OTP

كلمات مرور مؤقتة أحادية الاستخدام بتُولَّد وتُرسَل لجهاز المستخدم المسجَّل للتحقق من هويته. ميزتها الأساسية: حساسة للوقت وتنتهي بسرعة، مما يصعّب إعادة استخدامها من المهاجمين. TOTP بيولّد أكواد مبنية على مفتاح سرّي مشترك ووقت متزامن، صالحة عادة لـ30 ثانية فقط. Rate Limiting أساسي لمنع هجمات Brute-force على الـ OTPs — تقييد عدد محاولات التحقق خلال فترة زمنية محدَّدة.


--دورة اختبار المصادقة والجلسات الكاملة

اختبار المصادقةUsername / Passwordاختبار الجلساتCookies / HijackingCSRFثقة المتصفحJWT / OAuthتوكنات حديثة2FA Bypassالطبقة الأخيرة
من اختبار المصادقة الأساسي وحتى طبقات الحماية المتقدّمة — الترتيب المنطقي لتغطية الموديول بالكامل

--Cheat Sheet مرجعي

قائمة اختبارات WSTG-ATHN السريعة

فحص سريع لأعلام الكوكي

quick check
# ابحث في Set-Cookie headers عن:
HttpOnly   → غيابه = عرضة لسرقة عبر XSS
Secure     → غيابه = عرضة للاعتراض عبر HTTP
SameSite   → غيابه أو None بدون Secure = عرضة لـ CSRF
Max-Age    → طويل جدًا أو غائب = جلسات لا تنتهي

فحص JWT سريع

quick jwt checks
# جرّب تعديل alg إلى none وإزالة التوقيع
# جرّب تبديل الخوارزمية من RS256 إلى HS256 (Algorithm Confusion)
# افحص الـ exp — هل منتهي الصلاحية بيُرفَض فعليًا؟
# افحص الـ Payload — هل فيه بيانات حساسة غير مشفَّرة؟
# جرّب تعديل role/admin claims وأعد توقيع التوكن بمفاتيح مُخمَّنة أو مكشوفة

قائمة فحص هجمات OAuth

Quick Wins — أسرع المسارات في اختبار المصادقة والجلسات

#التحققالأداة/الطريقةالنتيجة المحتملة
1رسائل خطأ تسجيل الدخول مختلفة لاسم المستخدم/كلمة المرور؟فحص يدوي + Burp RepeaterUsername Enumeration
2فيه Rate Limiting على محاولات الدخول؟Burp IntruderBrute-force ممكن
3Session ID بيتغيّر بعد تسجيل الدخول؟مقارنة الكوكي قبل/بعدSession Fixation
4JWT بدون تحقق صارم من alg؟jwt_tool / تعديل يدويNone Algorithm Bypass
5redirect_uri في OAuth بدون Whitelist صارمة؟تعديل المعامل يدويًاToken Theft / Open Redirect

الخلاصة العامة للموديول

الموديول ده غطّى اختبار المصادقة وإدارة الجلسات بعمق — من المفاهيم الأساسية ومنهجية WSTG-ATHN، مرورًا بالجلسات والكوكيز وCSRF، ووصولًا لتحليل متقدّم لـ JWT وOAuth وتقنيات تجاوز 2FA.

$ cat ./ewptx_module02_summary.txt

الفكرة الجوهرية للموديول: المصادقة وإدارة الجلسات مترابطتان بشكل عميق — ثغرة في أي طرف من السلسلة (كلمة مرور، جلسة، توكن، أو عامل ثانٍ) ممكن تُسقِط الدفاع بالكامل. المختبر المحترف بيفحص السلسلة كلها كوحدة واحدة، مش كل مكوّن بمعزل عن التاني.

Professional Mindset

في أي تقييم: ابدأ دايمًا بفهم نوع آلية المصادقة والجلسة المستخدَمة قبل أي استغلال. افحص رسائل الخطأ بعناية — غالبًا هي مصدر التسريب الأول. لو التطبيق بيستخدم JWT أو OAuth، خصّص وقت كافٍ لفحص بنية التوكن والتحقق من التوقيع قبل الانتقال لأي هجوم متقدّم. ووثّق كل خطوة، حتى الفاشلة.


نهاية نوتس الموديول الثاني — Authentication & Session Management Testing (eWPTXv3)