جلسة الغربان كائن متسلسل base64 لـ JSON يفككه الخادم ويعيد بناءه ويثق بحقوله ومنها الدور فإذا فككت الكائن وغيرت الدور إلى admin ثم أعدت ترميزه صدقك الخادم
صفحة جلسة تعرض كائن الجلسة المتسلسل وزر يفتح الجلسة الخادم يفك الكائن ويثق بحقل الدور ولا توقيع ولا تحقق
لماذا نجح الحل
الخادم أعاد بناء الكائن من بيانات المستخدم ووثق بحقوله دون أي تحقق سلامة البيانات المتسلسلة من المستخدم غير موثوقة الحل توقيعها أو حفظ الجلسة في الخادم ومعرف عشوائي فقط عند العميل
السبب الجذري
إعادة بناء كائن من بيانات المستخدم والثقة بحقوله دون تحقق الجذر الثقة في بيانات متسلسلة من العميل
كيف يصلح الكود
لا تثق بكائن متسلسل من العميل احفظ الجلسة في الخادم أو وقعها
الكود المصاب
const session = deserialize(base64Decode(cookie)); // role trusted as-is
if (session.role === 'admin') grantAdmin();
الكود الآمن
// Keep the session on the server; the cookie is only a random id.
const session = sessionStore.get(cookieId);
if (session?.role === 'admin') grantAdmin();
الأثر في الواقع
الثقة في الكائن المتسلسل تسمح بترقية الدور وانتحال المستخدمين وفي لغات أخرى تنفيذ شيفرة
كيف يكتشفها المدافعون
المدافع يوقع الحالة أو يحفظها في الخادم ويرصد كائنات جلسة بحقول دور غير متوقعة