كل فحص أمان يُجريه Fendix، مع منطق الاكتشاف، ومستوى الخطورة الافتراضي، وما إذا كان يتطلب فحصًا نشطًا.
ماسح HTTP — يرسل طلبات حقيقية إلى واجهة برمجة التطبيقات الخاصة بك.
| الفحص | ما الذي يكتشفه | الخطورة | نشط |
|---|---|---|---|
| ترويسات الأمان | غياب HSTS وCSP وX-Content-Type-Options وX-Frame-Options، والكشف عن إصدار الخادم | MEDIUM - INFO | - |
| CORS | أصول بأحرف بدل (Wildcard) مع بيانات اعتماد، وأصول منعكسة، وطرق متساهلة | CRITICAL - LOW | - |
| المصادقة | غياب المصادقة، وقبول JWT مشوّه، وقبول JWT منتهي الصلاحية، وتجاوز alg:none | CRITICAL | - |
| تسريب البيانات | كلمات المرور/الأسرار/الرموز في الاستجابات، وتتبّعات الأخطاء (stack traces)، وعناوين IP الداخلية، والمعرّفات المتسلسلة، إضافةً إلى (v0.11+) ملفات الإعداد المكشوفة في المسارات المعروفة — .env و.git/HEAD و.htaccess و.npmrc و.aws/credentials وغيرها — تُصنَّف حرجة (CRITICAL) مع CWE-538 عند تقديم استجابة 2xx | CRITICAL - INFO | - |
| تحديد المعدّل | لم يُكتشف أي تحديد للمعدّل على نقاط النهاية | MEDIUM | - |
| أعلام الكوكيز | كوكيز تفتقر إلى سمات Secure / HttpOnly / SameSite (CWE-1004/614/1275) | MEDIUM - LOW | - |
| IDOR | تعطّل التحكم في الوصول — مستخدم يصل إلى موارد مستخدم آخر | HIGH | - |
| حقن SQL | اختبارات مبنية على الوقت العمياء، ومبنية على الأخطاء، واختبارات منطقية (MySQL وPostgres وMSSQL وSQLite وOracle)؛ مع ملاحظات الإثبات (in=query|header|body) | HIGH | --enable-active |
| حقن الأوامر | اكتشاف عبر echo canary — حمولة آمنة وغير مُتلِفة | CRITICAL | --enable-active |
| حقن الترويسات | حقن CRLF في ترويسات الاستجابة عبر اختبار %0d%0a Set-Cookie | HIGH | --enable-active |
| إعادة التوجيه المفتوحة | هدف إعادة توجيه يتحكم فيه المستخدم يرسل المتصفح إلى موقع خارجي (CWE-601) | MEDIUM | --enable-active |
| XSS المنعكس | حمولة تنعكس دون تهريب في الاستجابة، فتُنفَّذ داخل المتصفح (CWE-79) | HIGH | --enable-active |
| SSRF | تزوير طلب من جانب الخادم ضمن النطاق (in-band) — يجلب الخادم عنوان URL يوفّره المهاجم، ويُؤكَّد في الاستجابة (CWE-918) | CRITICAL | --enable-active |
| حقن ترويسة Host | ترويسة Host / X-Forwarded-Host مسمومة تنعكس في الروابط أو عمليات إعادة التوجيه أو مفاتيح الذاكرة المؤقتة (CWE-644/601) | MEDIUM | --enable-active |
| استبطان GraphQL | ترك استبطان المخطط مفعّلًا، مما يكشف رسم الأنواع الكامل (CWE-200) | LOW | --enable-active |
| التلاعب بطرق HTTP | قبول طرق HTTP غير آمنة أو تجاوزية (مثل PUT/DELETE/TRACE وX-HTTP-Method-Override) (CWE-650/693/285) | MEDIUM | --enable-active |
التحليل الساكن — يحلّل الشيفرة المصدرية دون إجراء طلبات شبكية.
| الفحص | ما الذي يكتشفه |
|---|---|
| الأسرار | مفاتيح AWS/GitHub/npm/Stripe/OpenAI، وكتل JSON الخاصة بحسابات خدمة GCP، ومفاتيح GCP API (AIza…)، وSlack (xoxa/b/p/r/s)، وAnthropic، وتسريبات NAME=value في .env، ورموز الحامل (bearer tokens) — إضافةً إلى تراكبات Semgrep |
| قواعد Semgrep | حزمة مجمّعة من 24 قاعدة (v0.14+؛ كانت 9 في v0.9). المصادقة: غياب مزخرفات Flask/Django/FastAPI؛ الحقن: SQL خام في Django، وSSTI عبر render_template_string في Flask، وsubprocess(shell=True)، وpickle.loads، وyaml.load غير الآمن؛ الأسرار: GCP SA JSON، ومفتاح AWS، وSlack webhook، ومفتاح PEM؛ التعمية: MD5/SHA1 لكلمات المرور، وشيفرات DES/3DES/RC4، واستخدام وحدة random لتوليد الرموز |
| Textscan (Go/JS/IaC) | محرك SAST موحّد بالتعبيرات النمطية (v0.12+). Go: حقن SQL عبر الدمج، واستدعاء الصدفة بـ exec.Command، وMD5/SHA1 لكلمات المرور، ومفتاح AWS مكتوب صراحةً. JS/TS: eval/innerHTML/document.write بقيمة غير حرفية، وchild_process.exec، وrequire بمسار متغيّر، ومفتاح AWS مكتوب صراحةً. IaC: تعليمة FROM في Dockerfile تفتقر إلى إسقاط الامتيازات، وADD مقابل COPY، وتثبيت :latest؛ Kubernetes: privileged/hostNetwork/allowPrivilegeEscalation/runAsUser=0 |
| محلّل المواصفات | غياب مخططات الأمان في مواصفة OpenAPI، ومفاتيح API في معاملات الاستعلام، ونقاط نهاية غير مُصادَق عليها، واستخدام HTTP بدل HTTPS، ومخططات مصادقة ضعيفة |
| تحليل AST | تحليل AST لـ Python/JS: تحميل pickle/yaml غير الآمن، وSSRF، وعمليات إعادة التوجيه المفتوحة، والوثوق بترويسات مصادقة يتحكم فيها العميل، وتجزئة كلمات المرور الضعيفة، وقيم subprocess/eval/HTML/SQL الحرفية — إضافةً إلى XSS قابل للوصول عبر Markup/mark_safe/render_template_string (v0.8)، وحقن أوامر قابل للوصول عبر os.system/subprocess(shell=True)/os.popen (v0.8)، واجتياز مسارات قابل للوصول عبر open/Path/send_file/send_from_directory (v0.11). يحتوي المحرك على 7 أصناف من المصارف (sinks) ضمن سلاسل التلوّث القابلة للوصول — حُسبت SQLi وSSRF وإعادة التوجيه المفتوحة وXSS واجتياز المسارات وحقن الأوامر بوصفها ثلاثة مصارف صدفة متمايزة. تحمل النتائج القابلة للوصول سلسلة تلوّث (taint_chain) تُثبت تدفّق البيانات داخل الدالة من مصدر الطلب إلى المصرف. يوسّع Proven Path v1 (v0.16) ذلك ليشمل Django/Flask/FastAPI: استخراج جدول المسارات يربط مسار HTTP بمعالجه بحيث تمتدّ السلسلة عبر المسار ← المعالج ← المصدر ← المصرف عبر الملفات، ويُصدَّر بصيغة SARIF عبر codeFlows/threadFlows (يعرض GitHub التتبّع خطوة بخطوة بشكل مضمّن)، وتحمل كل نتيجة وسم مصدر (source_tier) للتأكيد على المنشأ (native_go / tree_sitter_sidecar / semgrep_shim) |
| الاعتماديات | ثغرات CVE معروفة في وحدات Go (داخل العملية عبر golang.org/x/vuln — بنفس قابلية الوصول عبر رسم الاستدعاء التي يوفّرها أداة govulncheck الأصلية)، وPyPI (OSV.dev /v1/query لكل تثبيت ==، مع ذاكرة مؤقتة محلية لمدة 24 ساعة)، وnpm (OSV.dev مقابل package-lock.json بإصداريه v2/v3، مع دعم الحزم النطاقية، وذاكرة مؤقتة 24 ساعة) — جميعها ماسحات أصلية داخل العملية (لا تتطلب اعتماديات ثنائية). اعتبارًا من v0.16، يُحلَّل poetry.lock وPipfile.lock بوصفهما الإغلاق المحلول الكامل، فتُلتقط ثغرات Python العابرة لا التثبيتات المباشرة في requirements.txt فحسب. اعتبارًا من v0.9 لم تعد توزيعة Python المضمّنة مرفقة؛ ويصبح مسار deps.py القديم في Python اختياريًا عبر --python-engine. عطّل الماسحات الأصلية باستخدام --no-native-deps |
كيف تُعيَّن مستويات خطورة Fendix إلى مستويات SARIF 2.1.0 للتكامل مع CI/CD.
| خطورة Fendix | مستوى SARIF |
|---|---|
| CRITICAL | error |
| HIGH | error |
| MEDIUM | warning |
| LOW | note |
| INFO | note |