
SCA مدرِك لوقت التشغيل — يُثبت أيّ ثغرات CVE يمكن الوصول إليها فعليًا، وليس فقط تلك المثبّتة.
SCA مدرك لوقت التشغيل — يثبت أي من ثغرات CVE يمكن الوصول إليها فعليًا، وليس فقط المثبّتة.
أصبح VulnReach الآن مشروع OWASP رسميًا. 🎉




دعم اللغات: Python جاهزة بالكامل للإنتاج (taint، AST، route، runtime). Java وJavaScript لديهما تحليل رسم بياني للاستدعاءات فعّال وهما تجريبيان. Go وC# وPHP على خارطة الطريق. راجع ROADMAP.md للتفاصيل.
يبني VulnReach على مخرجات SCA القياسية بإضافة سياق قابلية الوصول — مُثبتًا من خلال التحليل الساكن، وتتبع التلوث، والتغطية الحية لوقت التشغيل أي من ثغرات CVE المكتشفة يمكن الوصول إليها فعليًا في تطبيقك.
POST /scan/{id}/cancel يوقف الفحوصات الجاريةsummary + مجموعات مصنّفة على GET /scan/{id}VULNREACH_ALLOW_DOCKER_DAEMON=truedocker-socket-proxy مقيّدًاPOST /findings/{id}/next-steps تنتج إرشادات معالجة موجهة للمحلل (إجراءات فورية، فحوصات تحقق، مسارات ترقية، مراقبة) لنتيجة حتمية. كسول / عند الطلب: الفحوصات لا تستدعي LLM أبدًا، وإخفاقات LLM تتدهور بلطف. الحكم الحتمي للقراءة فقط. راجع docs/api.md.scan.runtime.ebpf (يركز على Linux، موافقة صريحة)راجع:
تُصنّف كل ثغرة CVE عبر سلسلة أدلة من خمس طبقات:
1. SCA (Trivy) → is the package installed and vulnerable?
2. Taint analysis (tainter) → does user input flow to the vulnerable sink?
3. AST analysis → is the vulnerable function in your call graph?
4. Route exposure → is the call path reachable from an HTTP endpoint?
5. Runtime coverage → was the vulnerable code actually executed?
النتيجة هي قائمة نتائج مرتبة حسب الأولوية بأربع فئات:
| الفئة | المعنى |
|---|---|
DYNAMICALLY_REACHABLE | تغطية وقت التشغيل أكدت التنفيذ — أصلح فورًا |
STATICALLY_REACHABLE | مسار الكود مُثبت عبر AST/taint — أولوية عالية |
UNCERTAIN | إشارة ضعيفة فقط — حقّق |
NOT_REACHABLE | لا دليل — استبعد من قائمة التنبيهات |
إشعار أمني — قبل البدء، انسخ
.env.exampleإلى.env.localواستبدل كل قيمةCHANGE_MEبسر عشوائي قوي.
لا تعرض VulnReach على شبكة عامة دون تعيين بيانات اعتماد حقيقية وتكوينCORS_ORIGINS.
git clone https://github.com/ihrishikesh0896/vulnreach.git
cd vulnreach
# 1. Create your local config
cp .env.example .env.local
# 2. Fill in every CHANGE_ME — generate secrets with: openssl rand -hex 32
$EDITOR .env.local
# 3. Start the stack
docker compose up --build
# Optional: enable dynamic runtime scans (Docker daemon access via restricted socket proxy)
# docker compose -f docker-compose.yml -f docker-compose.runtime.yml up --build
خيارات المصادقة:
POST /loginSettings -> API Keys، ثم استخدمه كـ Authorization: Bearer <API_KEY># Get a token (replace with the credentials you set in .env.local)
TOKEN=$(curl -s -X POST http://localhost:8000/login \
-H "Content-Type: application/json" \
-d '{"username":"<your-admin-user>","password":"<your-admin-password>"}' | jq -r .access_token)
# Start scan from a GitHub repo
curl -X POST http://localhost:8000/scan \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"repo_url":"https://github.com/yourorg/yourapp"}'
# Poll for results
curl http://localhost:8000/scan/<scan_id> \
-H "Authorization: Bearer $TOKEN" | jq .summary
coverage.pypolicy.block_if يفشل عمليات البناء عند النتائج الحرجة المؤكدة؛ شغّل وبوّب عبر curl — راجع docs/ci-cd-gating.mdAuthorization: Bearer <API_KEY>)GET /scan/{id}/export/pdfprovider: none؛ Ollama مدعوم للاستخدام دون اتصالهدف الفحص: multi-tier-dvpa — تطبيق Python/Django ضعيف عمدًا مع 72 ثغرة CVE خام عبر 11 حزمة.
| الطبقة | النتيجة |
|---|---|
| ثغرات CVE الخام (Trivy) | 72 |
| النتائج المصنّفة (VulnReach) | 90 |
| DYNAMICALLY_REACHABLE — أصلح الآن | 49 |
| STATICALLY_REACHABLE — أصلح في هذه الدورة | 23 |
| UNCERTAIN — حقّق | 18 |
| NOT_REACHABLE — استبعد | 0 |
| بوابة خط أنابيب CI | محظور |
تم نقل 46% من النتائج خارج قائمة "أصلح كل شيء" غير المتمايزة إلى قائمة إجراءات مرتبة حسب الأولوية. في خدمة إنتاجية نموذجية (حيث لا يتم استدعاء العديد من التبعيات العابرة أبدًا)، يرتفع هذا الرقم إلى 70–90%.
المنهجية الكاملة، تفاصيل سلسلة الأدلة، والتفصيل على مستوى الحزمة: docs/benchmark.md