
فرز إمكانية الوصول لفحوصات الثغرات. يغذّي نتائج الماسح إلى وكيل LLM يقرأ شيفرتك المصدرية ويحدد أي CVEs قابلة للوصول فعليًا.
أمر واحد يحدد ما إذا كانت الثغرة الأمنية المُبلَّغ عنها قابلة للوصول فعليًا في شجرة مصدرية معينة.
أدخل إليه وصف CVE، أو تقرير فحص ثغرات كاملًا، فيُجري تحليل قابلية وصول مدفوعًا بنموذج لغوي كبير (LLM) على شفرتك، ثم يكتب أحكامًا مُهيكلة، وتقارير markdown، وملفات SARIF يقرأها فحص الشيفرة في GitHub.
للحفاظ على التكلفة منخفضة، لا يقرأ الوكيل مستودعك داخل سياق النموذج. بل يعمل عبر مجموعة أدوات بدلًا من ذلك: ast-grep للتنقل البنيوي في الشيفرة، وعمليات بحث OSV.dev وعرض الصفحات لجلب الاستشارة الأمنية وإصلاح الالتزام (commit)؛ وجلب التبعيات لإحضار نسخة upstream مثبّتة إلى بيئة العزل (sandbox) عندما يكون المكوّن المتأثر مبنيًا بدلًا من كونه مُضمَّنًا (vendored).
يعمل الإجراء (action) على GitHub Copilot عبر GITHUB_TOKEN المدمج في سير العمل.
امنح copilot-requests: write ولن تحتاج إلى ترتيب أي شيء آخر.
تُحتسب تكلفة استخدام OWASP Xpsd على المؤسسة إلى جانب بقية إنفاقك على Copilot.
permissions:
contents: read
security-events: write
copilot-requests: write # the built-in token authenticates Copilot
إذا كنت تفضّل إحضار نموذجك الخاص، فإن provider-type وapi-key يحوّلان التشغيل إلى Anthropic أو OpenAI أو Azure دون تغيير أي شيء آخر.
name: reachability
on:
workflow_dispatch:
schedule:
- cron: "0 6 * * 1"
permissions:
contents: read
security-events: write
copilot-requests: write
jobs:
reachability:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: anchore/sbom-action@v0
with: {format: cyclonedx-json, output-file: sbom.cdx.json, upload-artifact: false}
- uses: anchore/scan-action@v6
with: {sbom: sbom.cdx.json, output-format: json, output-file: scan.json, fail-build: false}
- uses: byteray-ai/xpsd@v1
id: xpsd
with:
scan-file: scan.json
model: gpt-5.3-codex
min-severity: high
max-findings: "10" # cap the analyzed findings, highest severity first
# min-cvss: "7.0" # numeric floor instead of the severity band
# is-remote: "true" # only findings shown to be network-reachable (AV:N)
# is-exploited: "true" # only findings CVSS-BT lists as exploited
# max-cycles: "30" # tool-call budget per finding
# max-tokens: "150000" # token budget per finding; first ceiling hit wins
# fail-on: reachable # fail the step when something is reachable
- uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: ${{ steps.xpsd.outputs.sarif-file }}
category: xpsd-reachability
استبدل الماسح الضوئي بأي ماسح تستخدمه بالفعل. يكتشف OWASP Xpsd تنسيق التقرير تلقائيًا:
| المنتج | التنسيق |
|---|---|
| Grype | grype -o json، أو SARIF |
| Trivy | trivy -f json، أو SARIF |
| OSV-Scanner | --format json |
| Snyk | snyk test --json، مفرد أو --all-projects |
| أي منتج SARIF | SARIF 2.1.0 |
| الحكم | التنبيه | الخطورة |
|---|---|---|
| قابل للوصول (ثقة متوسطة/عالية) | error | من CVSS |
| قابل للوصول (ثقة منخفضة)، غير مؤكد، فشل التحليل | warning، يحتاج مراجعة يدوية | من CVSS |
| غير قابل للوصول | note، معلوماتي | مخفّض إلى low |
يُسجَّل الاكتشاف المستبعد بدرجة low بدلًا من الاحتفاظ بتقييم CVSS الخاص به، لأن الدرجة تصف الثغرة وليس الخطر الذي تشكله على شفرتك. فالثغرة الحرجة التي لا يمكن الوصول إليها من أي مكان هي ما يطمس الثغرة التي يمكن الوصول إليها. تبقى الدرجة الحقيقية في التنبيه، إلى جانب التبرير والأدلة.
يحمل كل تنبيه مبررات النموذج، ومسار الاستدعاء من نقطة الدخول إلى الاستخدام المعرّض للخطر، وروابط الأدلة إلى أسطر المصدر المعنية. تعمل عمليات إعادة التشغيل على تحديث التنبيهات نفسها في مكانها، وتُغلق الاكتشافات التي تختفي من عملية رفع لاحقة تلقائيًا.
التكلفة لكل اكتشاف، جلسة وكيل واحدة لكل منها، لذا فإن التصفية هي طريقتك لإبقاء التشغيل صغيرًا: min-severity وmin-cvss وmax-findings وonly تحدد ما يجب النظر إليه، بينما يُبقي is-remote الاكتشافات التي ثبت أنها قابلة للوصول عبر الشبكة فقط (CVSS AV:N) ويُبقي is-exploited تلك التي تُدرجها مجموعة بيانات CVSS-BT كمستغَلّة فقط. يحتاج كلاهما إلى دليل إيجابي، لذا يُسقَط أي اكتشاف لا يمكنهما تأكيده. يحوّل fail-on حكمًا قابلًا للوصول إلى خطوة فاشلة عندما تريد تقييد البناء.
تعتمد قابلية الوصول أيضًا على حقائق ليست في الشفرة، مثل ما يُجمَّع فعليًا أو ما يُعرَّض للشبكة. يمرر مُدخل guidance تلك الحقائق كحقيقة أساسية للتحليل.
تقارير الأخطاء وطلبات السحب مرحّب بها؛ راجع CONTRIBUTING.md. أبلغ عن الثغرات بشكل خاص كما هو موضح في SECURITY.md، الذي يوثّق أيضًا نموذج التهديد والقيود المعروفة.
Apache License 2.0، راجع LICENSE. حقوق النشر 2026 ByteRay Ltd.