التغطية

ما الذي يغطيه yof وما الذي لا يغطيه

فئة بعد فئة: ما الذي يبحث عنه yof في كودك، وما الذي يختبره «الاختبار المؤتمت» على تطبيق يعمل، وما الذي لا يفعله أي منهما.

كيف تقرأ الجدول

  • في الكود: أنماط تبحث عنها القواعد في ملفات المستودع المرتبط. القاعدة تجد نمطًا ولا تشغّل الكود، لذا تحتاج أغلب هذه النتائج إلى تحقق.
  • على التطبيق الحي: اختبارات على تطبيق يعمل. «الاختبار المؤتمت» قيد التطوير وليس معروضًا للبيع، لذا لا شيء يحمل هذه العلامة متاح للعملاء بعد.
  • غير مغطّى: ما لا يفعله أي منهما. التقرير لا يوحي أبدًا بأن هذه الأمور فُحصت.
الفئةفي الكودعلى التطبيق الحيغير مغطّى
حقن SQL
  • نص SQL يُبنى من بيانات الطلب
  • النص المرسل إلى تطبيقك يُنفَّذ كجزء من استعلام قاعدة البيانات قيد التطوير
المدخلات التي تمر عبر دالة أخرى أو ملف آخر، والحقن المخزَّن (من الدرجة الثانية)، والأخطاء داخل ORM.
حقن NoSQL
  • فلتر قاعدة البيانات يأخذ قيمة مباشرة من الطلب
  • النص المرسل إلى تطبيقك يُنفَّذ كجزء من استعلام قاعدة البيانات قيد التطوير
لغات الاستعلام في قواعد بيانات المستندات الأخرى، واللغات غير JavaScript و TypeScript.
حقن الأوامر
  • أمر shell يُبنى من بيانات الطلب
  • النص المرسل إلى تطبيقك يُنفَّذ كأمر نظام قيد التطوير
المعاملات المحقونة في برنامج يُستدعى من دون shell، واللغات الأخرى.
حقن القوالب
  • بيانات الطلب تُستخدم كقالب
  • النص المرسل إلى تطبيقك يُشغَّل بواسطة محرك القوالب قيد التطوير
القوالب المقروءة من قاعدة بيانات، ومحركات القوالب التي تعمل في المتصفح.
تنفيذ كود من البيانات
  • بيانات الطلب تُنفَّذ ككود
لا يوجد اختبار حيالتنفيذ عبر كائن معزول (sandbox)، واللغات الأخرى.
البرمجة عبر المواقع (XSS)
  • بيانات الطلب تُكتب في الصفحة كـ HTML
  • النص المرسل إلى تطبيقك يعود كترميز حي في الصفحة قيد التطوير
تجاوزات الثقة في Angular و Vue، وإعدادات autoescape في قوالب الخادم، والسكربتات المخزَّنة، والإثبات في متصفح حقيقي.
إعادة توجيه مفتوحة
  • إعادة التوجيه تذهب حيث يقول الطلب
  • موقعك يحوّل الزوار إلى أي عنوان في الرابط متاح اليوم في yof attack
قوائم السماح الموجودة والتي يمكن تجاوزها.
تزوير الطلبات من جهة الخادم (SSRF)
  • الخادم يجلب عنوانًا مأخوذًا من الطلب
  • يجلب خادمك أي عنوان يسمّيه الطلب قيد التطوير
DNS rebinding، وإعادة التوجيه التي تقود إلى الداخل، وإمكانية الوصول إلى بيانات السحابة الوصفية.
تزوير الطلبات عبر المواقع (CSRF)
  • تسجيل دخول بالكوكي دون فحص CSRF في الكود
  • كوكي تسجيل الدخول يُضبط دون httpOnly أو sameSite
  • ملف تعريف الارتباط لتسجيل الدخول ينقصه علم حماية متاح اليوم في yof attack
  • يستطيع موقع آخر أن يجعل مستخدمًا مسجّلًا يغيّر بياناته قيد التطوير
الأطر غير تطبيقات نمط Express، والفحص الذي يجريه وسيط (proxy)، وهل تحمي إعدادات المتصفح الافتراضية المسار.
تحميل كائنات غير مأمون
  • بيانات الطلب تُحمَّل ككائن
  • يمرّر تطبيقك جسم الطلب إلى قارئ كائنات غير آمن قيد التطوير
Java ObjectInputStream و .NET BinaryFormatter وكيانات XML الخارجية.
تشفير ضعيف
  • كلمة مرور أو رمز يُجزَّأ بتجزئة سريعة أو مكسورة
  • رمز أو كود يُولَّد بدالة عشوائية يمكن توقعها
  • مفتاح تشفير مكتوب في الكود
  • التشفير يستخدم وضع ECB
  • التحقق من الشهادات معطَّل
  • رمز تسجيل الدخول يُقبل دون التحقق من توقيعه
  • يقبل تطبيقك رمز تسجيل دخول لم يتحقق منه قيد التطوير
  • المعرّفات أو رموز تسجيل الدخول سهلة التخمين قيد التطوير
أطوال المفاتيح وإصدارات البروتوكولات وشهادات الخدمة العاملة، والتشفير المخصص، والقنوات الجانبية.
كلمات مرور في الكود والإعدادات
  • كلمة مرور مكتوبة في كودك أو إعداداتك
  • اسم مستخدم وكلمة مرور افتراضيان مكتوبان في الكود
  • عنوان في كودك يحمل كلمة المرور بداخله
لا يوجد اختبار حيسجل git للملفات المحذوفة، وهل ما زالت كلمة المرور التي وُجدت تعمل، والكلمة العادية الواحدة من دون رقم أو رمز.
رفع الملفات
  • الرفع يحتفظ باسم الملف أو نوعه كما أرسله الزائر
  • مجلد الرفع يُقدَّم كصفحات ويب
  • يُقدَّم الملف المرفوع كصفحة يشغّلها المتصفح قيد التطوير
ما تفعله خدمة التخزين أو CDN بالملف، والبرمجيات الخبيثة في الملف المرفوع، وحدود الحجم.
Dockerfile
  • سر مكتوب في ملف Dockerfile لديك
  • ملف Dockerfile لديك يشغّل تنزيلًا دون فحصه
  • الصورة الأساسية تجاوزت نهاية عمرها
  • حاويتك تشغّل التطبيق بصلاحيات root
  • الصورة الأساسية لحاويتك بلا إصدار ثابت
  • صورة الحاوية لديك تتضمن خادم SSH
  • الصورة الأساسية مثبَّتة بوسم لا بـ digest
  • ملف Dockerfile لديك يثبّت حزمًا بلا إصدارات ثابتة
لا يوجد اختبار حيالصور المبنية وحزم نظام التشغيل داخلها لا تُفحص. نهاية الدعم معروفة لست صور أساسية رسمية فقط.
docker-compose
  • خدمة في compose تعمل بصلاحيات المضيف
  • خدمة في compose تستطيع التحكم في Docker نفسه
  • سر مكتوب في ملف compose لديك
لا يوجد اختبار حيالحاويات العاملة، وملفات env غير الموجودة في المستودع.
ملفات Kubernetes
  • حاوية Kubernetes تعمل بوضع privileged
  • حِمل في Kubernetes يصل إلى عقدته
  • سر مكتوب في ملف manifest لـ Kubernetes
  • حاوية Kubernetes قد تعمل بصلاحيات root
  • حاوية Kubernetes قد تحصل على صلاحيات أعلى
  • حاوية Kubernetes بلا حدود للموارد
  • صورة في Kubernetes بلا إصدار ثابت
لا يوجد اختبار حيالعنقود العامل، وقوالب Helm غير المولَّدة، و RBAC، وسياسات الشبكة والقبول، والملفات التي فيها مراسي YAML.
Terraform
  • قاعدة جدار ناري تفتح منفذ إدارة للإنترنت كله
  • حاوية تخزين جُعلت عامة في Terraform
  • تخزين أو قاعدة بيانات تُنشأ دون تشفير
  • قاعدة بيانات يمكن الوصول إليها من الإنترنت في Terraform
  • كلمة مرور أو مفتاح مكتوب في ملفات Terraform لديك
لا يوجد اختبار حيالحساب السحابي نفسه: ما نُشر قد يختلف عن الملفات. القيم القادمة من متغيرات أو وحدات أو دوال، والمزوّدون الآخرون وأنواع الموارد الأخرى.

خارج كل الصفوف

  • صور الحاويات المبنية وحزم نظام التشغيل التي بداخلها لا تُفحص.
  • هذه القواعد تقرأ الملفات. لا تنظر إلى النظام العامل: العنقود وحساب السحابة وسلوك التطبيق أثناء عمله.
  • بيانات الطلب تُتابَع داخل دالة واحدة أو معالج واحد فقط. القيمة التي تمر أولًا بدالة أخرى أو ملف آخر لا تُتابَع.
  • اللغات: قواعد الصياغة تقرأ JavaScript و TypeScript. للغة Python الأشكال البسيطة والدقيقة. وللغات PHP و Ruby و Go و Java و Kotlin و C# بضعة أشكال من سطر واحد. اللغات الأخرى لا تقرؤها هذه القواعد.

لا تغطيه الفحوص الآلية أبدًا

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

هذا ليس اختبار اختراق.

كيف يفحص yof

ما الذي يغطيه yof وما الذي لا يغطيه، فئة بعد فئة