DEV Community

Cover image for كيفية اكتشاف الثغرات الأمنية في مستودعك البرمجي مجانًا
Yusuf Khalidd
Yusuf Khalidd

Posted on Originally published at apidog.com

كيفية اكتشاف الثغرات الأمنية في مستودعك البرمجي مجانًا

كيفية اكتشاف الثغرات الأمنية في مستودعك البرمجي مجانًا

لاكتشاف الثغرات الأمنية في مستودعك البرمجي مجانًا، ادمج ثلاث طبقات: أداة فحص التبعيات (npm audit أو pip-audit أو OSV-Scanner)، وأداة فحص الأسرار والبيانات الحساسة (Gitleaks)، وأداة فحص الشيفرة البرمجية (Semgrep Community Edition). شغّل هذه الأدوات مع كل طلب سحب (pull request). لكن اعلم أن أيًا منها لن يكتشف غياب التحقق من صلاحيات الوصول (authorization)، لذا أضف اختبارًا أثناء التشغيل (runtime test) لتغطية ذلك.

جرّب Apidog اليوم

npm audit --audit-level=high
pip-audit -r requirements.txt
gitleaks git . --no-banner
semgrep scan --config p/default --metrics=off --error
Enter fullscreen mode Exit fullscreen mode

ما الجديد الذي تقدمه ميزة Vercel Security Review

تُعد Vercel Security Review إحدى إمكانيات Vercel Agent، وهي متوفرة في مرحلة تجريبية عامة منذ 2 نوفمبر 2026. تعمل هذه الميزة على فحص كل عملية دفع (push) إلى مستودع GitHub متصل، وتقرأ الفروقات البرمجية (diff) والشيفرة المحيطة بها، وتتتبع كيفية الوصول إلى هذا التغيير، وتعيد التحقق من كل نتيجة قبل الإبلاغ عنها.

المثال الذي طرحته Vercel هو السبب الأساسي وراء كتابة هذا المقال. يتعلق التغيير بنقطة نهاية (endpoint) للفواتير تبحث عن الفاتورة عبر المعرّف (ID) دون التحقق من المؤسسة التابعة لها، مما مكّن أي مستخدم مسجل الدخول من تنزيل فواتير مؤسسة أخرى. هذا خلل في المنطق البرمجي (logic flaw)، وأدوات الفحص المعتمدة على الأنماط تعجز عادةً عن اكتشاف مثل هذه العيوب.

إليك من يمكنه استخدام هذه الميزة:

السؤال الإجابة
الخطط فرق Pro وEnterprise فقط
التكلفة مجانية حتى 10 نوفمبر 2026، ثم تُحتسب وفق أسعار الرموز (token rates) للمزود مضافًا إليها 0.25 دولار لكل مليون رمز
المستودعات مستودعات GitHub المتصلة؛ والمستودعات التي لا تُنشر على Vercel ليست مدعومة بعد
النطاق الفروقات البرمجية (diff) مقارنة بالفرع الأساسي، أو الشيفرة المصدرية كاملة في المراجعة الأولى
النتائج لوحة تحكم الثغرات، وفحص GitHub check، وتعليقات على طلبات السحب (PR) في المستودعات الخاصة والداخلية

توضح وثائق Vercel أيضًا قيود هذه الميزة: فهي تحلل الشيفرة البرمجية وليس التطبيق أثناء تشغيله، ولا تُعد اختبار اختراق (penetration test). إذا كنت لا تستوفي شروط الاستخدام، أو تقرأ هذا المقال بعد انتهاء الفترة المجانية، فإن بقية هذا الدليل لن تكلفك شيئًا.

ما الذي ينبغي أن يغطيه فحص ثغرات المستودع

يتحقق الفحص الشامل لثغرات المستودع من أربعة أمور: الثغرات المعروفة في التبعيات، وبيانات الاعتماد المحفوظة في سجل Git، وأنماط الشيفرة غير الآمنة مثل ثغرات الحقن (injection)، ومنطق التحقق من الصلاحيات (authorization). تتوفر أدوات فحص مجانية وناضجة للأمور الثلاثة الأولى. أما الرابع فيعتمد على دلالة الشيفرة البرمجية وغايتها، لذا يتطلب إجراء اختبار على واجهة برمجة تطبيقات (API) قيد التشغيل.

أربع طبقات متتالية لفحص المستودع: التبعيات والأسرار وأنماط الشيفرة يتوفر لكل منها أدوات فحص مجانية، بينما يتطلب منطق الصلاحيات اختبارًا أثناء التشغيل

يبقى المفتاح المحذوف مسجلاً في سجل Git، لذا احرص على فحص السجل وتغيير (rotate) أي مفاتيح حقيقية. للتحقق من المفاتيح في حركة مرور واجهات البرمجة ومجموعات الاختبار، راجع دليل فحص تسريب مفاتيح API الخاص بنا.

مقارنة بين أدوات فحص الثغرات المجانية

تم التحقق من الأسعار والتراخيص في 5 نوفمبر 2026. لا تتطلب أي من أدوات سطر الأوامر إنشاء حساب أو إدخال بطاقة مصرفية لتشغيل الأوامر الواردة في هذا الدليل.

الأداة ما تكتشفه التكلفة والترخيص نقاط يجب الانتباه لها
npm audit ثغرات تبعيات npm مجانية، تأتي مدمجة مع npm تتطلب وجود ملف lockfile
pip-audit ثغرات تبعيات Python مجانية، ترخيص Apache-2.0 مخصصة لـ Python فقط
OSV-Scanner ثغرات التبعيات عبر بيئات برمجية متعددة مجانية، ترخيص Apache-2.0 تكتشف عددًا أكبر من النتائج، لذا توقع الحاجة لفرزها
Trivy التبعيات، الأسرار، الأخطاء الإعدادية مجانية، ترخيص Apache-2.0 ثبّت الإصدارات (انظر أدناه)
Gitleaks الأسرار في سجل Git مجانية، ترخيص MIT يتطلب استخدامها عبر GitHub Action مفتاح ترخيص مجاني للمؤسسات
Semgrep Community Edition أنماط الشيفرة، وبعض الأسرار مجانية، محرك بترخيص LGPL-2.1 لا يمكنها تتبع تدفق البيانات خارج نطاق دالة واحدة أو ملف واحد
Dependabot alerts ثغرات التبعيات مجانية للمستودعات العامة والخاصة حصرية لـ GitHub فقط
GitHub secret scanning الأسرار مجانية للمستودعات العامة؛ و19 دولارًا شهريًا لكل مساهم نشط للمستودعات الخاصة تتطلب المستودعات الخاصة تفعيل حماية الأسرار (Secret Protection)
CodeQL أنماط الشيفرة مجانية للمستودعات العامة؛ و30 دولارًا شهريًا لكل مساهم نشط للمستودعات الخاصة تتطلب المستودعات الخاصة تفعيل أمان الشيفرة (Code Security)

ملاحظتان بشأن التراخيص: تستخدم قواعد مجتمع Semgrep ترخيص Semgrep Rules License، الذي يسمح بالاستخدام التجاري الداخلي لكنه يمنع إعادة توزيعها أو تقديمها كخدمة. وإذا قررت اعتماد Trivy، فاطّلع على الثغرة CVE-2026-33634، حيث اخترق المهاجمون أجزاءً من منظومة Trivy لفترة وجيزة في مارس 2026. احرص دائمًا على تشغيل إصدار حديث وتثبيت أي إجراء (Action) باستخدام معرف الالتزام (commit SHA).

فحص مستودع ببضعة أوامر: ما توصلنا إليه

أنشأنا واجهة برمجة تطبيقات (API) بسيطة للفواتير باستخدام Express وأضفناها إلى مستودع محلي. واحتوت على أربع تبعيات npm وثلاث تبعيات Python بإصدارات قديمة، ومفتاحين وهميين (أحدهما بنمط Stripe والآخر بنمط AWS)، وثغرة حقن SQL، وثغرة حقن أوامر (command injection)، ومسار يعيد فاتورة أي مؤسسة لأي مستخدم مسجل الدخول.

ثم قمنا بتشغيل كل أداة على نظام macOS في 5 نوفمبر 2026:

npm audit
pip-audit -r requirements.txt --no-deps --disable-pip
osv-scanner scan source -r .
trivy fs --scanners vuln,secret .
gitleaks git . --no-banner
semgrep scan --config p/default --metrics=off
semgrep scan --config p/nodejsscan --metrics=off
Enter fullscreen mode Exit fullscreen mode
الأداة (الإصدار) ما تم اكتشافه ما لم يتم اكتشافه
npm audit (npm 11.12.1) 9 حزم تحتوي على ثغرات: 6 عالية الخطورة، و3 منخفضة الخطورة كل ما لا يمثل حزمة npm
pip-audit 2.10.1 16 تحذيرًا أمنيًا عبر الحزم الثلاث المثبتة الحزم غير المباشرة (transitive)، لأننا مررنا الخيار --no-deps
OSV-Scanner 2.7.0 66 تحذيرًا فريدًا عبر 15 حزمة، بما في ذلك حزم Python غير المباشرة الأسرار وأخطاء الشيفرة البرمجية
Trivy 0.76.1 33 نتيجة متعلقة بالتبعيات والمفتاح الشبيه بنمط Stripe المفتاح الشبيه بنمط AWS
Gitleaks 8.30.1 المفتاح الشبيه بنمط Stripe المفتاح الشبيه بنمط AWS
Semgrep 1.183.0, p/default المفتاح الشبيه بنمط Stripe، وحقن الأوامر، وملاحظة حول غياب طبقة برمجية وسيطة لـ CSRF حقن SQL، والمفتاح الشبيه بنمط AWS
Semgrep 1.183.0, p/nodejsscan حقن SQL، وحقن الأوامر، والمفتاح الشبيه بنمط AWS المفتاح الشبيه بنمط Stripe

تبرز ثلاثة استنتاجات رئيسية:

  • أعداد النتائج لا يمكن مقارنتها مباشرة. فالحزمة والتحذير الأمني والنتيجة المكتشفة وحدات مختلفة، وكل أداة تقرأ بيانات مغايرة. قارن نوعية ما تم اكتشافه لا الأرقام الإجمالية.
  • أداة واحدة لفحص الأسرار لا تكفي. فقد أغفلت كل من Gitleaks وTrivy المفتاح الشبيه بنمط AWS.
  • حزم القواعد تصنع الفارق. أغفلت الحزمة الافتراضية في Semgrep استعلام SQL مبنيًا عبر دمج نصوص عادي. ولم تُظهر حزم p/javascript وp/nodejs وp/owasp-top-ten وp/sql-injection أي نتائج في هذا المستودع، في حين تمكنت حزمة p/nodejsscan من اكتشافه.

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

فحص مستودع GitHub مع كل طلب سحب

تتوفر بيئات التشغيل القياسية المستضافة على GitHub مجانًا للمستودعات العامة. أما في المستودعات الخاصة، فتتضمن باقة GitHub Free رصيدًا شهريًا قدره 12 دولارًا، وهو ما يعادل حوالي 2,000 دقيقة على بيئة تشغيل Linux بنواتين وفق السعر المعلن. يعتمد سير العمل (workflow) هذا على أوامر مباشرة، مما يتيح للمؤسسات تجاوز الحاجة لمفتاح ترخيص Gitleaks Action:

name: repo-scan
on:
  pull_request:
  push:
    branches: [main]
permissions:
  contents: read
jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7 # pin to a commit SHA
        with:
          fetch-depth: 0
      - name: Dependencies (npm)
        run: npm audit --audit-level=high
      - name: Dependencies (Python)
        run: pipx run pip-audit -r requirements.txt
      - name: Secrets
        run: |
          curl -sSL https://github.com/gitleaks/gitleaks/releases/download/v8.30.1/gitleaks_8.30.1_linux_x64.tar.gz | tar xz gitleaks
          ./gitleaks git . --no-banner
      - name: Code patterns
        run: pipx run semgrep scan --config p/default --config p/nodejsscan --metrics=off --error
Enter fullscreen mode Exit fullscreen mode

انتهى تشغيل أدوات الفحص الأربع برمز الخروج 1 على مستودع الاختبار لدينا، وخروج الأداة برمز غير صفري هو ما يؤدي إلى فشل المهمة (job). يمكنك حذف الخطوات التي لا تحتاجها بنيتك البرمجية. ولإجراء اختبارات API ضمن خط الأنابيب نفسه، راجع استخدام Apidog CLI مع GitHub Actions.

احرص أيضًا على تفعيل تنبيهات Dependabot؛ فهي مجانية في جميع الخطط وتعمل دون انتظار تقديم طلب سحب.

الفجوة الأمنية: أخطاء الصلاحيات التي تعجز أدوات الفحص عن كشفها

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

// Every scanner passed this
db.query("SELECT * FROM invoices WHERE id = $1", [req.params.id]);

// The fix: scope the lookup to the caller's organization
db.query("SELECT * FROM invoices WHERE id = $1 AND org_id = $2",
  [req.params.id, req.user.orgId]);
Enter fullscreen mode Exit fullscreen mode

تُعرف هذه الثغرة بـ خلل التحقق من الصلاحيات على مستوى الكائن (Broken Object Level Authorization)، والتي تتصدر قائمة OWASP لأخطر 10 ثغرات أمنية في واجهات برمجة التطبيقات لعام 2023. توصي OWASP بالتحقق من صلاحيات الوصول مع كل طلب يستخدم معرّفًا يقدمه العميل، وبكتابة اختبارات تكشف إخفاقات الصلاحيات قبل النشر.

قد تكون الاستعانة بوكيل برمجي ذكي (coding agent) مفيدة هنا. قمنا بإزالة التعليقات من مستودع الاختبار وطلبنا من Claude Code مراجعته، مرة مع تلميح بخصوص المؤسسات ومرة بدونه. وفي الحالتين نجح في التنبيه إلى الخلل في مسار الفواتير. مع ذلك، فهذا الخيار ليس مجانيًا تمامًا، إذ يستهلك من باقة اشتراك الوكيل، فضلاً عن أن النتائج قد تختلف من تشغيل لآخر.

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

دع وكيلك البرمجي يختبر الصلاحيات باستخدام Apidog CLI

لا تكتب هذا الاختبار يدويًا لكل مسار. دع وكيلك البرمجي يتولى ذلك باستخدام Apidog CLI؛ حيث يقرأ مساراتك، وينشئ اختبارًا لكل مورد محمي، ويزودك بمجموعة اختبارات متكاملة تعمل ضمن التكامل المستمر (CI). وتغطي باقة Apidog Free ما يصل إلى 4 مستخدمين.

npm install -g apidog-cli@latest
apidog auth login --with-token <YOUR_TOKEN>
apidog skill install
Enter fullscreen mode Exit fullscreen mode

ستحتاج إلى بيئة اختبار مهيأة مسبقًا بمؤسستين تجريبيتين ومستخدم واحد في كل منهما. بعد ذلك، وجه لوكيلك موجهًا واحدًا (prompt):

Read the routes in src/. For each route that returns data owned by an
organization, create an Apidog test scenario in project <id>: log in as
the Org A test user, request an Org B resource by ID, and assert the
status is 403 or 404. Add an Org A request for its own resource and
assert 200, so a broken login can't pass. Group the scenarios in a test
suite, run it against the staging environment, and summarize failures.
Enter fullscreen mode Exit fullscreen mode

يتحقق الوكيل من بنية البيانات (payload shape)، وينشئ السيناريوهات، ثم يُشغّل مجموعة الاختبارات:

apidog cli-schema get test-scenario-create
apidog cli-schema validate test-scenario-create --file scenario.json
apidog test-scenario create --project <id> --file scenario.json
apidog test-scenario import-steps <scenarioId> --project <id> --source endpoint --ids <endpointIds>
apidog test-suite create --project <id> --file suite.json
apidog run --test-suite <suiteId> --project <id> -e <envId> -r cli,junit
Enter fullscreen mode Exit fullscreen mode

مخطط تسلسلي: مستخدم تجريبي في المؤسسة A يسجل الدخول، ويحصل على رمز الدخول، ثم يطلب فاتورة تابعة للمؤسسة B؛ وينجح الاختبار إذا كانت الاستجابة 403 أو 404 ويفشل إذا كانت 200

التحقق الإيجابي خطوة بالغة الأهمية؛ فبدونه، قد يعيد عنوان URL الأساسي غير الصحيح الرمز 404 أيضًا، فينجح الاختبار للسبب الخاطئ.

أضف سطر apidog run نفسه إلى سير العمل الموضح أعلاه، وشغّله على بيئة معاينة (preview) أو بيئة تجريبية (staging) تحتوي على مؤسسات تجريبية مهيأة، وتجنب تمامًا استخدام بيانات الإنتاج. يغطي دليل مرجع الأمر apidog run الخيارات والوسائط الأخرى، ويوضح مقال استخدام Apidog CLI في Claude Code خطوات إعداد الوكيل بالتفصيل.

الأسئلة الشائعة

ما هي أفضل طريقة مجانية لاكتشاف الثغرات في مستودع برمجي؟ ادمج بين أداة لفحص التبعيات، وGitleaks، وSemgrep Community Edition، ثم أضف اختبارًا أثناء التشغيل للتحقق من الصلاحيات؛ إذ لم تتمكن أي أداة منفردة من تغطية جميع الثغرات في مستودع الاختبار لدينا.

هل ميزة Vercel Security Review مجانية؟ هي مجانية حتى 10 نوفمبر 2026 فقط، ولفرق Pro وEnterprise حصرًا. بعد ذلك، ستدفع وفق أسعار الرموز للمزود مضافًا إليها 0.25 دولار لكل مليون رمز. كما أن المستودعات التي لا تُنشر على Vercel ليست مدعومة حتى الآن.

هل ميزة فحص الأسرار في GitHub مجانية للمستودعات الخاصة؟ لا؛ ففحص الأسرار وCodeQL مجانيان للمستودعات العامة، لكن المستودعات الخاصة تتطلب الاشتراك في GitHub Secret Protection (19 دولارًا) أو GitHub Code Security (30 دولارًا) شهريًا لكل مساهم نشط. في المقابل، تتوفر تنبيهات Dependabot مجانًا في كلا النوعين.

هل يستطيع Semgrep اكتشاف أخطاء الصلاحيات؟ لم يكتشف الخلل في مسار الفواتير لدينا باستخدام حزم القواعد التي شغّلناها. لا تستطيع النسخة المجانية (Community Edition) تتبع البيانات خارج نطاق دالة واحدة أو ملف واحد، مع أنه يمكنك كتابة قواعد مخصصة للأنماط الخاصة بقاعدتك البرمجية.

هل تغني أدوات الفحص عن اختبار الاختراق؟ لا؛ فالأدوات والاختبارات تغطي الأنماط المعروفة والحالات التي حددتها مسبقًا، بينما يبحث اختبار الاختراق عما لم يخطر ببالك، وتؤكد وثائق Vercel نفسها أن مراجعتها الأمنية لا تُعد بديلاً عن ذلك أيضًا.

Top comments (0)