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




دعم اللغات: بايثون جاهزة تمامًا للإنتاج (طبقات taint وAST وroute وruntime). جافا وجافاسكريبت تملكان تحليل مخطط استدعاءات فعّالًا لكنهما تجريبيتان. 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 |
إشعار أمني — قبل البدء، انسخ
.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 يُفشل البناءات عند وجود نتائج حرجة مؤكدةAuthorization: Bearer <API_KEY>)GET /scan/{id}/export/pdfprovider: none؛ وOllama مدعوم للاستخدام دون اتصالهدف المسح: multi-tier-dvpa — تطبيق Python/Django ضعيف عن قصد، يحتوي على 72 ثغرة CVE خام موزعة على 11 حزمة.
أُخرجت 46% من النتائج من قائمة «أصلِح كل شيء» غير المميَّزة إلى قائمة إجراءات مرتّبة حسب الأولوية. وفي خدمة الإنتاج النموذجية (حيث لا تُستدعى كثير من التبعيات غير المباشرة أبدًا)، ترتفع هذه النسبة إلى 70–90%.
المنهجية الكاملة وتفاصيل سلسلة الأدلة والتفصيل على مستوى الحزم: docs/benchmark.md
scan.yml الكاملtrivy في PATH (التثبيت)jq (مستخدم في أمثلة البدء السريع — التثبيت)اختياري (تُتخطى جميعها بأناقة عند غيابها):
semgrep — pip install semgreptainter — pip install tainter (تحليل تدفق التلوث؛ راجع دليل التطوير)Apache 2.0 — راجع LICENSE.
| مسار الكود مُثبت عبر AST/taint — أولوية عالية |
UNCERTAIN | إشارة ضعيفة فقط — حقّق |
NOT_REACHABLE | لا يوجد دليل — استبعِد من قائمة التنبيهات |
| الطبقة | النتيجة |
|---|
| ثغرات CVE الخام (Trivy) | 72 |
| النتائج المصنّفة (VulnReach) | 90 |
| DYNAMICALLY_REACHABLE — أصلِح الآن | 49 |
| STATICALLY_REACHABLE — أصلِح في هذا السبرنت | 23 |
| UNCERTAIN — حقّق | 18 |
| NOT_REACHABLE — استبعِد | 0 |
| بوابة خط CI | BLOCKED |