
ماسح CLI بدون تبعيات لتسوية سلسلة التوريد في npm/PyPI. يكتشف الحزم المخترقة في ملفات lockfiles ومؤشرات الاختراق (IOCs) على مستوى النظام من هجمات مثل Mini Shai-Hulud (CVE-2026-45321).
ماسح CLI بدون تبعيات لاختراقات سلسلة التوريد لـ npm و PyPI.
في 11 مايو 2026، اخترقت دودة سلسلة توريد ذاتية الانتشار تُسمى Mini Shai-Hulud (CVE-2026-45321, GHSA-g7cv-rxg3-hmpx) نظام npm البيئي. نُسبت إلى TeamPCP (المعروف أيضًا باسم DeadCatx3, PCPcat, ShellForce, CipherForce)؛ اختطفت البرمجية الخبيثة رموز OIDC الخاصة بـ GitHub Actions لنشر حزم ضارة مع إثبات أصالة صالح من المستوى 3 لـ SLSA Build. سرقت بيانات الاعتماد من خطوط أنابيب CI/CD ومزودي الخدمات السحابية ومحافظ العملات المشفرة، وقامت بتثبيت خطافات استمرارية في Claude Code و VS Code. احتوى المفتاح المُعطَّل المدمج على تهديد بمسح دليل المستخدم المنزلي إذا تم إبطال رموز npm.
شملت الحزم المتأثرة حزم توجيه TanStack وحزم البداية، وSDKs لـ Mistral AI، وعميل OpenSearch، وأدوات UiPath، وعشرات غيرها. نظرًا لأن هجمات سلسلة التوريد تتحرك بسرعة، تحتاج المؤسسات إلى ماسح خفيف وموثوق يمكن تشغيله في أي مكان دون إضافة تبعيات جديدة إلى سطح الهجوم الخاص بها.
package-lock.json, pnpm-lock.yaml, yarn.lock, bun.lock, bun.lockb, poetry.lock, Pipfile.lock, و requirements.txtfs, path, child_process, os). لا يزيد الماسح من مخاطر سلسلة التوريد الخاصة بك0 = نظيف، 1 = نتائج، 2 = خطأ)src/db.ts؛ قم بتحديث الملف وأعد التشغيللا حاجة للتثبيت. قم بتشغيله مباشرة باستخدام أداة تشغيل الحزم التي تختارها:
# npx
npx @digi4care/shai-scan
# bunx
bunx @digi4care/shai-scan
# pnpm dlx
pnpm dlx @digi4care/shai-scan
التثبيت العام (اختياري):
npm install -g @digi4care/shai-scan
# or
pnpm add -g @digi4care/shai-scan
من المصدر:
git clone https://github.com/digi4care/shai-scan.git
cd shai-scan
pnpm install
bun run src/cli.ts --help # Bun (موصى به للتطوير)
# أو أنشئ وشغل باستخدام Node.js:
pnpm run build && node dist/cli.js --help
npx @digi4care/shai-scan
npx @digi4care/shai-scan ~/projects/my-app
npx @digi4care/shai-scan --json .
npx @digi4care/shai-scan --sarif --sarif-file results.sarif .
#!/bin/bash
npx @digi4care/shai-scan --severity high . || {
code=$?
if [ "$code" -eq 1 ]; then
echo "تم اكتشاف نتائج سلسلة توريد"
exit 1
elif [ "$code" -eq 2 ]; then
echo "خطأ في الماسح"
exit 2
fi
}
name: Supply Chain Scan
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: pnpm install --frozen-lockfile
- run: npx @digi4care/shai-scan --severity high .
name: Supply Chain Scan SARIF
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: '0 6 * * 1'
jobs:
scan:
runs-on: ubuntu-latest
permissions:
security-events: write
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: pnpm install --frozen-lockfile
- run: npx @digi4care/shai-scan --sarif --sarif-file results.sarif .
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
| التنسيق | العلم | الوصف |
|---|---|---|
| نصي | (افتراضي) | جدول قابل للقراءة للنتائج مع مستوى الخطورة واسم الحزمة والإصدار وتفاصيل الحملة |
مثال على مقتطف JSON:
[
{
"package": "@tanstack/react-router",
"version": "1.169.5",
"ecosystem": "npm",
"severity": "critical",
"campaign": "mini-shai-hulud-wave4",
"cve": "CVE-2026-45321",
"reference": "https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx"
}
]
| الكود | المعنى |
|---|---|
| 0 | لم يتم اكتشاف حزم مخترقة أو مؤشرات اختراق |
| 1 | تم اكتشاف نتيجة واحدة أو أكثر |
| 2 | خطأ في وقت التشغيل (مسار غير صالح، ملف قفل غير قابل للقراءة، إلخ) |
عند اكتشاف هجوم جديد على سلسلة التوريد، قم بتحديث src/db.ts:
CompromisedVersion[] تحتوي على الحزم والإصدارات المتأثرةCampaign جديد إلى مصفوفة CAMPAIGNS، بما في ذلك معرفات CVE/GHSA، مستوى الخطورة، الوصف، روابط مرجعية، ومؤشرات IOCbuildLookup() تلقائيًا بإعادة بناء خريطة البحث في التشغيل التاليلا حاجة لخطوة إعادة بناء عند استخدام Bun. التغييرات في src/db.ts تصبح سارية فورًا مع bun run src/cli.ts. بالنسبة لحزمة npm، قم بتشغيل pnpm run build بعد التحرير.
بدون تبعيات وقت التشغيل: يستخدم الماسح فقط وحدات Node.js/Bun المدمجة. لا يقوم بتنزيل أو تنفيذ كود من طرف ثالث في وقت التشغيل، مما يلغي خطر أن يصبح الماسح نفسه ناقل اختراق.
pnpm كمدير حزم: يستخدم pnpm ملفات قفل صارمة، ولا ينفذ نصوص دورة الحياة افتراضيًا، ويدعم التخزين القابل للعنونة بالمحتوى. هذه الخصائص تقلل من سطح الهجوم مقارنة بمديري الحزم الآخرين.
إعدادات .npmrc الموصى بها: للحصول على أقصى حماية عند تثبيت الحزم، أضف ما يلي إلى ملف .npmrc الخاص بمشروعك أو العالمي:
ignore-scripts=true
engine-strict=true
لا اتصالات شبكية: لا يقوم shai-scan بإجراء اتصال بالإنترنت، أو تنزيل تواقيع، أو يتطلب مفتاح API. جميع بيانات الحملة مشحونة مع الحزمة.
الحزم والإصدارات التالية معروفة بأنها مخترقة في CVE-2026-45321 (Mini Shai-Hulud Wave 4). هذه مجموعة فرعية تمثيلية؛ القائمة الكاملة محفوظة في src/db.ts.
MIT. انظر LICENSE للتفاصيل.
shai-scan هو أداة مساعدة للكشف، وليس بديلاً عن عمليات التدقيق الأمني الشاملة، أو مراجعة التبعيات، أو منصات استخبارات التهديدات. يحدد الإصدارات المخترقة المعروفة بناءً على قاعدة البيانات المشحونة؛ قد لا يتم اكتشاف هجمات سلسلة التوريد الجديدة أو غير المعروفة حتى تتم إضافة حملة. دائماً مارس الدفاع في العمق: دقق في التبعيات، ثبّت الإصدارات، تحقق من الأصالة، وراقب خطوط أنابيب CI/CD.
| JSON | --json | مصفوفة JSON منظمة من النتائج، مناسبة للإدخال في أنظمة SIEM أو لوحات المعلومات المخصصة |
| SARIF | --sarif | تنسيق SARIF 2.1.0 من OASIS للرفع إلى GitHub Code Scanning أو GitLab Secure أو مستهلكي SARIF آخرين |
| الحزمة | النظام البيئي | الإصدارات المخترقة |
|---|
@tanstack/react-router | npm | 1.169.5, 1.169.8 |
@tanstack/vue-router | npm | 1.169.5, 1.169.8 |
@tanstack/solid-router | npm | 1.169.5, 1.169.8 |
@tanstack/router-core | npm | 1.169.5, 1.169.8 |
@tanstack/react-start | npm | 1.167.68, 1.167.71 |
@mistralai/mistralai | npm | 2.2.2, 2.2.3, 2.2.4 |
@mistralai/mistralai-azure | npm | 1.7.2, 1.7.3 |
mistralai | pypi | 2.4.6 |
@opensearch-project/opensearch | npm | 3.5.3, 3.6.2, 3.7.0, 3.8.0 |
@uipath/robot | npm | 1.3.4 |
@squawk/airways | npm | 0.4.2, 0.4.3, 0.4.5 |
@draftauth/core | npm | 0.13.1, 0.13.2 |
@tallyui/core | npm | 0.2.1, 0.2.2, 0.2.3 |
safe-action | npm | 0.8.3, 0.8.4 |
cmux-agent-mcp | npm | 0.1.3 - 0.1.8 |
nextmove-mcp | npm | 0.1.3, 0.1.4, 0.1.5, 0.1.7 |
ts-dna | npm | 3.0.1, 3.0.2, 3.0.4 |
cross-stitch | npm | 1.1.3, 1.1.4, 1.1.6 |
git-git-git | npm | 1.0.8 - 1.0.12 |
git-branch-selector | npm | 1.3.3 - 1.3.7 |
agentwork-cli | npm | 0.1.4, 0.1.5 |
wot-api | npm | 0.8.1, 0.8.2, 0.8.4 |
ml-toolkit-ts | npm | 1.0.4, 1.0.5 |
@beproduct/nestjs-auth | npm | 0.1.2 - 0.1.19 |
@dirigible-ai/sdk | npm | 0.6.2, 0.6.3 |
@taskflow-corp/cli | npm | 0.1.24 - 0.1.29 |
@tolka/cli | npm | 1.0.2, 1.0.3, 1.0.4, 1.0.6 |
@supersurkhet/cli | npm | 0.0.2 - 0.0.7 |
guardrails-ai | pypi | 0.10.1 |