
مدقق تبعيات بدون بناء يفحص 10 أنظمة بيئية دون اتصال، ويبلّغ عن ثغرات CVE مرتبة حسب CISA KEV وEPSS، والحزم منتهية الصلاحية، والتراخيص، والمفاتيح المضمّنة، والملفات الثنائية مع تصدير SBOM وSARIF.
Formidable Auditor's Dependency Checker
AKA Fuckin' Autonomous Dependency Checker
يقوم fad-checker بتدقيق Maven · Gradle · npm · Yarn · pnpm · Composer · PyPI · NuGet · Go · Ruby، وJavaScript المُضمَّن، والملفات الثنائية الأصلية المُودَعة، والمواد التشفيرية (الشهادات والمفاتيح الخاصة/العامة) في أي شجرة مصدرية؛ متعدد الوحدات، monorepo، متعدد اللغات؛ ويُنتج تقرير HTML + Word قائمًا بذاته (CVE مُرتَّبة حسب الأولوية بواسطة EPSS + CISA KEV، EOL، مهمَل، قديم، التراخيص) بالإضافة إلى تصديرات CycloneDX SBOM / CSAF VEX / SARIF / JSON. لا أدوات بناء، لا Docker، لا حاجة للشبكة؛ يقرأ ملفات القفل والبيانات الوصفية مباشرة من القرص.

mvn/gradle/npm install/pip/dotnet restore/go build، ولا node_modules/. يُحَل مخطط Maven بالطريقة التي يحلّه بها Maven. → كيف--offline، مُختبرة بالانحدار وقابلة للتكرار تحت . على Maven تستعيد من نتيجة OSV-Scanner بدون أي واجهة شبكة على الإطلاق، مقابل 45 / 40 / 37 للأخرى. → · 📖 الاستخدام وكل المفاتيح · البنية · المقارنة مع الأدوات الأخرى · مصادر البيانات
ما تفعله للتدقيق ولا تفعله الأخرى. نفس مجموعة الأعمدة وانضباط المصادر كما في
docs/COMPARISON.md — ⚠️ تعني جزئي وتوضح كيف، والخلايا مُفترض أن تكون
قابلة للتحقق.
¹ لا mvn/go/npm/pip/dotnet — تُحلَّل البيانات الوصفية من القرص، لا شيء مُثبَّت أو مُنفَّذ. 105 × pom.xml في تمريرة واحدة: 790 زوجًا مقابل 657 لـ OSV-Scanner، 133 خاصة بـ fad، الإصدارات مُوسَّطة لكل وحدة لا مُسطَّحة.
² 657 من 657 من نتيجة Maven عبر الإنترنت لـ OSV-Scanner، تحت unshare -rn — بلا واجهة شبكة. مُختبرة بـ tripwire؛ فقط الإحداثيات العامة تغادر الحاجز.
³ الفصل 0 يُسمّي كل إحداثية أجاب عنها كل سجل مُهيَّأ بـ 404 — Maven، npm، PyPI، NuGet، Composer، Go وRubyGems — مع البيانات الوصفية التي تُصرّح بها. السجل الذي انتهت مهلته أو أخطأ لا يُحتسب أبدًا: الإجابة غير القاطعة ستتهم العميل بشحن حزم داخلية لأن وكيله كان متذبذبًا. ثم -e <regex> يستبعدها.
⁴ -t <dir>: POMs مُوحَّدة بالإضافة إلى كل ملف قفل غير Maven مُنسَخ، مع تجريد الإحداثيات الخاصة. قابل للأرشفة، وقابل للفحص بأي شيء — بما في ذلك --snyk.
⁵ endoflife.date، مقسَّم مباشر مقابل عابر لتعرف أي تبعية يجب ترقيتها، بالإضافة إلى المهمَل / المهجور / المسحوب والقديم. Trivy يغطي توزيعات OS فقط؛ صحة الحزم في Snyk عبر الويب فقط.
⁶ جرد وأحكام: انتهاء الصلاحية، RSA<2048، MD5/SHA1، موقَّعة ذاتيًا؛ مفاتيح خاصة مقابل عامة؛ JKS/PKCS#12. محلل دون اتصال. قاعدة أسرار Trivy تجد الملف، لا العيب.
⁷ مُحدَّدة بواسطة hash عبر deps.dev + CIRCL → يجب أن تكون مُصرَّحة / الاسم≠checksum / غير معروفة / خبيثة. أنماط Syft تُسمّي إصدارًا، لا هوية.
⁸ الفصل 0 يُشير إلى ما لم يستطع هذا الفحص الوصول إليه (ملفات قفل مفقودة، إصدارات BOM فقط، Yarn Berry، وقت تشغيل PHP غير قابل للتحديد)؛ الفصل 6.3 يذكر ما لا يُقيّمه الأداة أبدًا. في مكان آخر، الأول سطر سجل لا يراه التدقيق أبدًا، والثاني غير مكتوب.
⁹ بيان المصدر: الأداة، وقت التشغيل، الوضع، تكوين التشغيل وحداثة الذاكرة المؤقتة لكل 13 مصدرًا. Grype وDependency-Check يحملان تاريخ مصدر واحد، لا التشغيل.
¹⁰ الفصول 0→6 مع ملخص تنفيذي ووصفات إصلاح، HTML قائم بذاته بالإضافة إلى توأم Word .doc. لا أحد من الآخرين يُصدر Word.
¹¹ أربعة مخططات SVG مضمَّنة — CWE حسب أسوأ خطورة، التبعيات العابرة القابلة للاستغلال لكل تبعية جذرية، أكثر وحداتك عرضة للاستغلال (مباشرة مقابل عابرة في مشروع أحادي الوحدة)، نطاقات أولوية الإصلاح — تُرسَم في .doc أيضًا، مع نسخ بنقرة واحدة كـ PNG (أو جدول كـ HTML غني) يُلصق في Word منسَّقًا. كل CVE يحتفظ بمتجه CVSS، CWE، المراجع، تكوين CPE ومسار via خلف تفصيل، بدون أي أصول خارجية.
¹² --baseline يضيف فصل Δ (جديد / مُصلَح / دون تغيير)؛ --fail-on-new يبوّب على النتائج الجديدة فقط. Snyk يتتبع هذا على منصته، لا كفرق محلي.
حيث تخسر — الحاويات/حزم OS، طلبات السحب للإصلاح التلقائي، وتغطية CVE مقابل تغذية Snyk المُنسَّقة
→ docs/COMPARISON.md ·
الفجوة، مقيسة.
ليس هدفًا عن قصد: قابلية الوصول. النتيجة هي إصدار قابل للاستغلال على مخطط التبعيات، والتقرير يقول ذلك بالضبط (فصل 6.3) بدلًا من التخمين في مسارات الاستدعاء. تقرير ما إذا كان الكود القابل للاستغلال قابلاً للوصول في هذا التطبيق هو قرار المدقق، يُتخذ بسياق التطبيق الذي لا يملكه أي ماسح.
[!WARNING] fad-checker جديد وقد لا يزال يحتوي على أخطاء (نادرة). تعامل مع مخرجاته كتمريرة أولى قوية، تحقق مرتين من أي شيء حرج، ويرجى الإبلاغ عن المشكلات؛ تُصلَح بسرعة.
npm install -g fad-checker fad-checker -s ./my-project # → ./fad-checker-report/cve-report.html
مفتاح [NVD API](https://nvd.nist.gov/developers/request-an-api-key) مجاني (فوري) يمنح إثراءً أسرع بـ 10×: `fad-checker --set-nvd-key YOUR_KEY`. بعض التشغيلات الشائعة؛ القائمة الكاملة عبر `fad-checker --help` أو [docs/USAGE.md](https://github.com/9pings/fad-checker/blob/main/docs/USAGE.md):```bash
fad-checker -s ./proj -e "^com\.acme\." # exclude private libs (coord regex)
fad-checker -s ./proj -t ../clean -e "^com\.acme\." # extract only: normalised descriptors, private modules flagged
fad-checker -s ./proj -t ../clean -e "^com\.acme\." -a snyk # same extraction + scan + merge Snyk
fad-checker -s ./proj --offline # fully offline (zero network, needs a warmed cache)
fad-checker -s ./proj -a osv-db,typosquat # offline-complete OSV + typosquat
fad-checker -s ./proj -a licenses --fail-on high # license chapter + CI gate
fad-checker -s ./proj --report-json --baseline last.json --fail-on-new # differential audit: fail CI on NEW findings
fad-checker diff last.json this.json # standalone diff of two findings JSONs
ما الذي يفعله -t <dir> فعليًا. إنها خطوة استخراج، وليست محوّلًا لـ Snyk. تكتب شجرة
موازية من واصفات التبعيات المُوحَّدة: كل pom.xml مُختزَل إلى العُقد ذات الصلة بالتبعيات
(الإحداثيات، properties، dependencyManagement، dependencies،
modules)، مع إعادة ربط آباء الـ reactor بـ relativePath الحقيقي داخل الشجرة، وحل ${…} في
الإحداثيات — بالإضافة إلى عكس كل ملف قفل/بيان غير خاص بـ Maven عند المسار النسبي نفسه
(package-lock/yarn.lock/pnpm-lock، composer.lock، poetry/Pipfile//،
/، /، ، والملفات المرافقة مثل
أو ). أثناء الاتصال بالإنترنت، تقوم أيضًا وتُبلّغ عن تلك غير الموجودة هناك — أي
— والتي يقوم بعد ذلك بإزالتها من ملفات POM المُعاد كتابتها. ثم
: لا تمريرة CVE/EOL ولا تقرير ما لم تمرّر أيضًا ، أو ،
أو أو . ما تحصل عليه هو جرد تبعيات مُنقّى وبدون بناء يمكنك
أرشفته كدليل تدقيق، أو تسليمه لعميل أو لمراجعة قانونية، أو توجيه أي ماسح نحوه — Snyk عبر
كونه أحدها.
[!IMPORTANT]
--offlineيقرأ الذاكرة المؤقتة، ولا يستبدلها. على ذاكرة مؤقتة باردة لا يوجد شيء للمطابقة معه، لذا فإن أول تشغيل دون اتصال يُبلّغ بشكل مشروع عن 0 CVE / 0 EOL / 0 قديم؛ هذه ذاكرة مؤقتة فارغة، وليست مشروعًا نظيفًا. سخّنها مرة واحدة (تشغيل عادي عبر الإنترنت على أي مشروع، أو--import-cache)، ثم يُعيد--offlineمجموعة النتائج الكاملة دون أي استدعاءات شبكة. تحصل الأجهزة المعزولة شبكيًا على ذاكرتها المؤقتة عبر--export-cache/--import-cache.
يوجد ملف تنفيذي واحد مكتفٍ بذاته (بدون Node)، وتثبيت من المصدر وإكمال الصدفة في → docs/USAGE.md.
يُنظَّم التقرير في فصول جذرية (كل منها يجمع فصولًا فرعية ذات صلة):
يفتح تقرير HTML في أي متصفح، ويحتوي على كل التفاصيل (متجهات CVSS، المراجع، الأوصاف الكاملة، تهيئات CPE، مسارات الوصول للتبعيات العابرة) ويُرفق نسخة .doc متوافقة مع Word. كل مطابقة تحمل أولوية مركّبة (مُستغَلّة في KEV > احتمالية EPSS > خطورة CVSS)، ويمكن للتشغيل أيضًا إصدار CycloneDX 1.6 SBOM (--report-sbom، مع الثغرات مضمّنة) وCSAF 2.0 VEX (--report-csaf) للأدوات اللاحقة.

لا توجد أداة تجد كل شيء. يتقدّم fad-checker عند 87% من اتحاد مكوّن من 908 زوجًا، و131 زوجًا عادت من Snyk وليس منه. وبعد التحكيم واحدًا واحدًا مقابل OSV، لا شيء منها خطأ في الاستدعاء:
ثلثاها يناقضان السجل العام، لذا فإن الإبلاغ عنها يعني شحن إيجابيات كاذبة. CVE-2023-6481 هو المثال النظيف: مُدَّعى على [email protected]، وهو يربط
logback-core عند [1.2.12, 1.2.13) — قطعة أثرية خاطئة، وإصدار نُشر قبل وجود العيب.
النطاق. جميع الـ 131 هي من Snyk: OSV-Scanner وTrivy وGrype+Syft لم يُسهم أي منها بـ 0 نتائج لم يجدها أحد غيرها. وجميعها على هدف Maven — خارج Maven يكون الرسم البياني في ملف القفل، ويقرأ كل ماسح المدخل نفسه، ويقيس المعيار مجموعات نتائج متطابقة على npm وRubyGems وComposer.
ولهذا السبب يوجد --snyk. يأخذ fad-checker مخرجات snyk test كـمدخل ويدمجها، فتحصل على
الاتحاد بدلًا من الانحياز لطرف. إنه خيار تغطية، وليس تصحيحًا.
المنهجية والتحذيرات والأحكام لكل زوج → docs/BENCHMARK.md؛ أعد الإنتاج
بـ scripts/adjudicate-gap.js.
ضمان عدم إرسال أي بيانات. تحت
--offline، لا يُجري fad-checker أي استدعاءات شبكة على الإطلاق؛ فهو يقرأ فقط ذاكرات~/.fad-checker/المُسخَّنة ولا ينقل أبدًا تبعية أو مسارًا أو نتيجة خارج الجهاز. وهو مُختبَر ضد الانحدار (test/offline-guarantee.test.js، وهو جالب أسلاك مفخّخة يرمي استثناءً إذا لُمس) و قابل لإعادة الإنتاج من المدقق:unshare -rn node fad-checker.js -s ./proj --offline …يشغّله في نطاق بلا واجهة شبكة ويُنتج نتائج متطابقة بايت ببايت. وخلافًا لماسحات OSS السائدة، يحلّ fad أيضًا الرسم البياني العابر لـ Maven دون اتصال؛ لذا على مشروع متعدد الوحدات معزول شبكيًا يجد CVEs العابرة التي لا يستطيعون إيجادها.
عندما يكون النظام المُدقَّق دون اتصال / سريًا (وهو أمر نموذجي في تدقيق منظَّم أو معزول شبكيًا) فإنه لا يستطيع الوصول إلى OSV / NVD / Maven Central / npm. قسّم العمل عبر الأجهزة مع إبقاء صفر معلومات بيئية خارج الحصن الآمن: الواصف المجهول يحمل فقط إحداثيات حزم عامة؛ لا مسارات نظام ملفات، ولا عناوين URL للسجلات، ولا أسماء مضيفين/مستخدمين؛ والتقرير التفصيلي يُنتَج مرة أخرى على الجهاز غير المتصل.
يعتمد النقل على خاصية في ذاكرات fad-checker المؤقتة: فهي مُفهرسة بـالإحداثي أو معرّف الثغرة، وليس بالمسار أبدًا، لذا فهي مستقلة عن الجهاز. خطوة الاتصال بالإنترنت فقط تُسخّن الذاكرات المؤقتة؛ وخطوة عدم الاتصال تُعيد تشغيل الفحص وتحصل على إصابات الذاكرة المؤقتة.```bash
fad-checker -s ./proj -e "^(client|internal)." --export-anonymized deps.json
fad-checker --import-anonymized deps.json # scans coordinates → OSV/NVD/CVE/registry/EOL + retire signatures fad-checker --export-cache fad-cache.tar.gz # bundle the warmed ~/.fad-checker/
fad-checker --import-cache fad-cache.tar.gz # merged into the enclave's own cache fad-checker -s ./proj --offline # re-collect locally (real paths) + cache hits
ما يحتويه الوصف (`fad-deps/1`) مقابل ما يُسقطه:
| المُحتفظ به (اللازم للفحص) | المُسقَط (البيئة) |
| --- | --- |
| ecosystem, ecosystemType | manifest paths / pom paths |
| namespace, name | resolved registry URLs |
| version, versions | integrity hashes |
| scope, isDev | parent chains, lockfile type |
تقرير المرحلة المتصلة خالٍ من المسارات بذاته؛ نتائج JavaScript المُضمَّنة (retire.js) تُنتَج **دون اتصال في المرحلة 3**، لأن retire يحتاج ملفات `.js` الفعلية؛ قاعدة توقيعاته تُهيَّأ عبر الاتصال (المرحلة 2) وتُحمَل عبر `--export-cache`. التحكم الكامل دون اتصال/بالتخزين المؤقت ← [`docs/USAGE.md`](https://github.com/9pings/fad-checker/blob/main/docs/USAGE.md).
## المستندات
- [`docs/USAGE.md`](https://github.com/9pings/fad-checker/blob/main/docs/USAGE.md)؛ كل خيار وسير عمل: التحكم دون اتصال/بالتخزين المؤقت، السجلات الخاصة، ملفات الإعداد، الوصفات، حواجز الأمان.
- [`docs/ARCHITECTURE.md`](https://github.com/9pings/fad-checker/blob/main/docs/ARCHITECTURE.md)؛ البنية الداخلية: برامج الترميز، الجمع، المطابقة، خط أنابيب التقارير.
- [`docs/COMPARISON.md`](https://github.com/9pings/fad-checker/blob/main/docs/COMPARISON.md)؛ مقابل OSV-Scanner / Trivy / Grype / OWASP DC / Snyk، وكيف يبقى بلا حاجة إلى البناء.
- [`docs/BENCHMARK.md`](https://github.com/9pings/fad-checker/blob/main/docs/BENCHMARK.md) — معيار استدعاء قابل لإعادة الإنتاج في بيئة معزولة مقابل OSV-Scanner على مشروع عام من 105 وحدات.
- [`docs/DATA-SOURCES.md`](https://github.com/9pings/fad-checker/blob/main/docs/DATA-SOURCES.md)؛ مجموعات البيانات العامة التي يستخدمها fad-checker + تراخيصها.
- [`docs/SPEC-audit-pro.md`](https://github.com/9pings/fad-checker/blob/main/docs/SPEC-audit-pro.md)؛ ميزات درجة التدقيق (المصدر، التدقيق التفاضلي، المنهجية/السلامة) ولماذا بُني كل منها بهذه الطريقة.
- [`CHANGELOG.md`](https://github.com/9pings/fad-checker/blob/main/CHANGELOG.md) · [`CLAUDE.md`](https://github.com/9pings/fad-checker/blob/main/CLAUDE.md)؛ سجل الإصدارات · توجيه على مستوى الكود للمساهمين.
## المساهمة
أكثر مساهمة مفيدة لفاحص ناشئ هي **إخباره أين يخطئ**: شغّله على مشروع حقيقي وقدّم [تقرير إيجابية كاذبة / سلبية كاذبة](https://github.com/9pings/fad-checker/issues/new?template=false_positive.yml)
مع الإحداثي ومقتطف الـ manifest الذي أنتجه. إعداد التطوير، القواعد الأساسية، ونقطة
توسيع برنامج الترميز ← [`CONTRIBUTING.md`](https://github.com/9pings/fad-checker/blob/main/CONTRIBUTING.md). الثغرات في fad-checker
نفسه ← [`SECURITY.md`](https://github.com/9pings/fad-checker/blob/main/SECURITY.md) (يُرجى الإبلاغ بشكل خاص).
**بخصوص المساعدة بالذكاء الاصطناعي:** قاعدة الكود هذه مكتوبة باستخدام مكثّف لـ Claude Code؛ [`CLAUDE.md`](https://github.com/9pings/fad-checker/blob/main/CLAUDE.md)
في جذر المستودع هو بالضبط ما يبدو عليه. المعيار المطلوب هو ما يمكنك التحقق منه
بنفسك: **847 اختبارًا** (`npm test`)، ضمان انعدام الشبكة مفروض باختبار فخّي و
قابل لإعادة الإنتاج تحت `unshare -rn`، وأرقام التغطية مقيسة مقابل خط أساس Snyk بدلًا
من الادعاء. `fad-checker` نفسه لا يستخدم **أي LLM في وقت التشغيل**؛ النتائج تأتي من قواعد
بيانات الثغرات العامة ومحلّلات حتمية، ولا يُولَّد أي نص تقرير. البيان الكامل،
بما في ذلك حيث أمسك المراجعة فعلًا بنتيجة سيئة →
[`AI_POLICY.md`](https://github.com/9pings/fad-checker/blob/main/AI_POLICY.md). حيث لا يفي الكود بذلك المعيار، فهذا تقرير خطأ أريده.
## الترخيص
MIT؛ انظر [`LICENSE`](https://github.com/9pings/fad-checker/blob/main/LICENSE).
unshare -rn--typosquat).SHA256SUMS؛ التدقيقات التفاضلية تُقارن مع تشغيل سابق (--baseline) ويمكن لـ CI أن يبوّب على النتائج الجديدة فقط.--help يتسع لشاشة واحدة؛ الذيل الطويل من المفاتيح يُطوى في أربع رايات — -d eol,nvd تُطفئ الأشياء، -a licenses,snyk تُشغّل ما هو مُطفأ افتراضيًا، -r html,json تختار المخرجات، -o تحدد المكان. المفاتيح الفردية لا تزال تعمل و--help-all يسردها.--lang fr).doc عند --report-doc)، CycloneDX 1.6 SBOM، CSAF 2.0 VEX، SARIF 2.1.0، JSON؛ البوابة بـ --fail-on، الفرز بـ --ignore/--vex. سجلات خاصة لكل نظام بيئي.| ما يحتاج المدقق فعليًا إلى فعله | fad | OSV | Trivy | Grype+Syft | OWASP DC | Snyk |
|---|
| تدقيق monorepo متعدد اللغات بـ 100 وحدة في أمر واحد، بدون أي toolchain مُثبَّت ¹ | ✅ 105 وحدة | ⚠️ reactor متخطّى | ⚠️ يحتاج ~/.m2 | ⚠️ اختياري | ⚠️ بناء Java | ⚠️ بناء mvn |
| الفحص دون اتصال / معزول هوائيًا دون إسقاط التبعيات العابرة ² | ✅ 657/657 | ❌ | ⚠️ ~/.m2 | ⚠️ اختياري | ⚠️ مرآة | ❌ |
| تحديد التبعيات الخاصة/الداخلية عبر مشروع كبير ³ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| استخراج واصفات التبعيات المُنقّاة إلى دليل خارجي ⁴ | ✅ -t | ❌ | ❌ | ❌ | ❌ | ❌ |
| الإبلاغ عن أطر العمل والتبعيات EOL / المهمَلة، بما في ذلك العابرة ⁵ | ✅ | ⚠️ المهمَل فقط | ⚠️ توزيعات OS فقط | ❌ | ❌ | ⚠️ واجهة الويب فقط |
| الإبلاغ عن المفاتيح والشهادات المُودَعة ⁶ | ✅ | ❌ | ⚠️ قاعدة المفاتيح | ❌ | ❌ | ❌ |
رصد الملفات الثنائية المُودَعة (.dll، .exe، …) والتحقق منها مقابل checksums الخاصة بها ⁷ | ✅ | ❌ | ⚠️ بعضها | ⚠️ أنماط | ❌ | ❌ |
| سرد بوضوح ما لم يُفحص — قبل أن يسأل العميل ⁸ | ✅ فصل 0 + 6.3 | ⚠️ سجل | ⚠️ سجل | ⚠️ سجل | ⚠️ سجل | ⚠️ سجل |
| الإجابة عن "مقابل أي بيانات؟" بعد ستة أشهر ⁹ | ✅ | ❌ | ❌ | ⚠️ تاريخ DB | ⚠️ تاريخ NVD | ❌ |
| إرسال تقرير، لا تفريغ JSON ¹⁰ | ✅ HTML + .doc | ⚠️ قائمة HTML | ⚠️ قالب | ❌ | ⚠️ قائمة HTML | ⚠️ snyk-to-html |
| مخططات، تفصيل لكل CVE ونسخة Word قابلة للّصق ¹¹ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| إنتاج تقارير دلتا تُظهر فقط ما تغيّر ¹² | ✅ --baseline | ❌ | ❌ | ❌ | ❌ | ⚠️ سحابي |
uvpdm*.csprojpackages.lock.jsongo.modgo.sumGemfile.lockDirectory.Packages.propsnuget.config-e <regex>--snyk--report-<type>--fail-on*--baseline--snyk| الفصل | المصدر | ما يلتقطه |
|---|
| 0. التحذيرات (أعلى) | استدلالات محلية | ملفات قفل مفقودة، إصدارات Maven غير محلولة (مُدارة بـ BOM)، مكتبات خاصة غير موجودة على Maven Central |
Δ. التغييرات منذ خط الأساس (أعلى، مع --baseline) | فرق مقابل JSON سابق | نتائج جديدة / مُصلَحة / غير متغيرة لكل فئة + قائمة CVEs الإنتاج الجديدة؛ لعمليات التدقيق المتكررة وبوابة CI عبر --fail-on-new |
| 1. CVE (X مباشر، Y غير مباشر، Z تطوير) | CVEProject + OSV.dev + NVD + CPE | 1.1 الإنتاج؛ CVE عام / GHSA في تبعيات الإنتاج، لكل نظام بيئي، لكل بيان، مُرتَّب حسب الأولوية بواسطة CISA KEV + EPSS + CVSS · 1.2 ثغرات JS المُضمَّنة (retire.js) · 1.3 التطوير (test/provided، dev/optional/peer) · 1.4 الإيجابيات الكاذبة المحتملة (مُرشَّحة بـ CPE) |
| 2. مكوّنات غير مُدارة / بلا إصدار | deps.dev + CIRCL (بالبصمة)، retire.js، X.509 مدمج | 2.1 ملفات تنفيذية مُضمَّنة؛ CVEs في مكتبات مُشحونة داخل .jar/.war/.ear مُودَعة (fat-jars، shaded uber-jars) · 2.2 ملفات تنفيذية أصلية (.dll/.exe/.so/.dylib) مُحدَّدة بالتجزئة، مُعلَّمة كـ يجب أن تكون مُدارة / الاسم≠البصمة / غير معروفة / خبيثة · 2.3 جرد JavaScript المُضمَّن (jQuery، Bootstrap، …) ضعيف أو لا · 2.4 الشهادات والمواد المفتاحية؛ شهادات مُودَعة (انتهاء الصلاحية / مفتاح ضعيف / توقيع ضعيف / موقّعة ذاتيًا)، مفاتيح خاصة مقابل عامة (PEM/OpenSSH/PuTTY/PGP/SSH) ومخازن المفاتيح، كلها مُحلَّلة دون اتصال |
| 3. الصيانة / دورة الحياة (X EOL، Y مهجور، Z قديم) | endoflife.date · مُنتقاة + علامات السجل · Maven Central / npm / Packagist / PyPI / NuGet | 3.1 نهاية العمر للأطر (+ نطاق "خارج الدعم النشط" مع --eol-support؛ Symfony/Laravel مُجمَّعة كصف واحد لكل إطار؛ وقت تشغيل PHP عندما يُثبته قيد Composer)، مقسّمة إلى مباشر (مُعلَن / موروث من POM الأب — قم بترقيتها) مقابل عابر (قم بترقية التبعية التي تجلبها) · 3.2 مهجور / مُهمَل / متروك / مسحوب · 3.3 قديم (إصدار أحدث متاح، مع تواريخ الإصدار؛ التبعيات المباشرة فقط) |
4. التراخيص (اختياري: --licenses) | بيانات وصفية للسجل + POMs الخاصة بـ Maven → سياسة SPDX | يُوحَّد ترخيص كل تبعية إلى SPDX ويُصنَّف؛ copyleft (GPL/AGPL/LGPL/MPL)، والمملوكة وغير المعروفة مُعلَّمة للمراجعة |
| 5. توصيات الإصلاح | محسوبة | وصفات التثبيت لكل نظام بيئي: Maven <dependencyManagement>، Gradle constraints { }، npm overrides، yarn resolutions، composer require، pip install، dotnet add package |
| 6. سياق الفحص والقيود | بيان المصدر + المشي | 6.1 الواصفات المفحوصة (كل بيان مُحلَّل) · 6.2 المجلدات المتجاهَلة (المسارات المُشذَّبة + القاعدة) · 6.3 المنهجية ومصادر البيانات والقيود (حداثة مصدر البيانات، إعداد التشغيل، بيان صريح لـ ما لا يقيّمه fad-checker) |
| مخاطر سلسلة التوريد (شاملة) | OSV MAL-… + استدلال الاسم | الحزم الخبيثة المعروفة (تحجب دائمًا بوابة CI، عند أي مستوى --fail-on) والانتحال المشتبه به (--typosquat: اسم npm/PyPI بفارق تعديل واحد عن حزمة شائعة؛ lodahs↔lodash) |
| الحكم |
|---|
| 57 | قطعة أثرية خاطئة — الإشعار يربط إحداثيًا مختلفًا |
| 31 | خارج النطاق — الإصدار خارج كل نطاق متأثر مُعلَن |
| 23 | غير موجود في OSV — 19 معرّف SNYK-* مملوك، و4 لا يحملها إلا NVD |
| 19 | لا ارتباط بـ Maven — الإشعار لا يربط أي حزمة Maven على الإطلاق |
| 1 | مُبلَّغ عنه بالفعل، تحت الاسم المستعار CVE |
| 0 | إغفال مؤكَّد |