
قواعد Semgrep التي ترصد أنماط تجاوز المصادقة القائمة على الثقة في الترويسات (فئة CVE-2025-29927). مكمّل لـ bk-security.github.io.
حزمة قواعد Semgrep صغيرة تشير إلى التعليمات البرمجية التي تتخذ قرارات المصادقة أو التفويض أو الثقة استنادًا إلى ترويسات طلبات HTTP يمكن للمهاجم التحكم بها.
المثال النموذجي لهذه الفئة من الثغرات هو CVE-2025-29927: وثِق Next.js بترويسة x-middleware-subrequest لتقرير ما إذا كان الوسيط (middleware) سيُنفَّذ، وأي طلب وارد يوفّر قيمة مصمّمة بعناية كان بإمكانه تخطي الوسيط بالكامل. ويتكرر النمط نفسه عبر الأطر البرمجية والأنظمة البيئية.
تشمل هذه الحزمة قواعد لعائلتين من لغات البرمجة وثلاث فئات فرعية من الخلل. وهي مُعدّة كأداة مساعدة لمراجعة الكود، وليست بوابة تكامل مستمر (CI) مضبوطة بالكامل. تفضّل القواعد الاستدعاء (recall) على الدقة، ومن الأفضل تشغيلها تفاعليًا، على أن يتخذ إنسان القرار النهائي بشأن كل نتيجة.
للحصول على شرح أطول لفئة الثغرات وخيارات التصميم الكامنة خلف هذه الحزمة، راجع bk-security.github.io.
| القاعدة | اللغة | الخطورة | ما تكتشفه |
|---|---|---|---|
nodejs-header-flag-auth-bypass | JS / TS | Warning | قراءات الترويسات التي يوحي اسمها باستخدام بروتوكولي داخلي أو تجاوز للمصادقة (x-internal، x-bypass-auth، x-middleware-subrequest، x-admin-override، x-impersonate، إلخ) |
nodejs-header-as-identity | JS / TS | Warning | قراءات الترويسات التي تُستخدم تقليديًا لحمل هوية المستخدم (x-forwarded-user، x-authenticated-user، x-remote-user، إلخ) |
nodejs-forwarded-for-trust | JS / TS | Info | قراءات x-forwarded-for وx-real-ip وما يشابههما من ترويسات عنوان المصدر التي يُوثق بها عادةً في قرارات أمنية |
python-header-flag-auth-bypass | Python | Warning | نفس نمط متغير Node.js، بما في ذلك الوصول بنمط Django عبر request.META["HTTP_X_*"] |
python-header-as-identity | Python | Warning | نفس نمط متغير Node.js بنكهة Python |
python-forwarded-for-trust | Python | Info | نفس نمط متغير Node.js بنكهة Python |
تثبيت Semgrep:
pip install semgrep
تشغيل الحزمة على هدف ما:
semgrep --config /path/to/auth-header-trust-rules/rules /path/to/target
أو تشغيل قاعدة واحدة:
semgrep --config /path/to/auth-header-trust-rules/rules/nodejs/header-flag-auth-bypass.yaml /path/to/target
التحقق من صحة القواعد مقابل ملفات الاختبار المرفقة:
semgrep --test --config rules/ tests/
المخرجات المتوقعة:
6/6: ✓ All tests passed
تطابق القواعد قائمة منسقة من أسماء الترويسات المعروفة بخطورتها عند الوثوق بها. ستلتقط الحالات الشائعة. ولن تلتقط:
getInternalFlag(req) تقرأ x-some-novel-name ستمرّ عبر القواعد.x-internal-* وx-trust-* وx-bypass-*، لكن الأسماء الجديدة ستتسرب.عند توسيع الحزمة لملاءمة قاعدة برمجية معينة، تكون الإضافات الأعلى قيمةً عادةً هي أنماط الدوال المساعدة الخاصة بالإطار البرمجي. إذا كانت قاعدة برمجية تحتوي على دالة مساعدة isInternalRequest(req)، فإن القاعدة التي تلتقطها هي سطر واحد من YAML.
rules/<lang>/<name>.yaml.tests/<lang>/<name>.<ext> مع أمثلة إيجابية معلمة بـ # ruleid: <rule-id> وأمثلة سلبية معلمة بـ # ok: <rule-id>.semgrep --test --config rules/ tests/. ستُلتقط القاعدة وملف الاختبار الجديدان تلقائيًا؛ ويجب أن تنجح الاختبارات قبل تقديم التغيير.MIT.
Bruce Kang. المصدر البرمجي للمقالة المصاحبة موجود على bk-security.github.io.