
ماسح ضوئي لـ IOC لأدوات الترميز الذكية (AI) — يكتشف Mini Shai-Hulud و Gemini CLI RCE و Cursor CVE-2026-26268 و DPRK PromptMink.
ماسح IOC لأدوات الترميز الذكية (AI coding tools) — يكتشف Mini Shai-Hulud و Gemini CLI RCE و Cursor CVE-2026-26268 و DPRK PromptMink.
مجموعة كشف لاختراق المساعدين البرمجيين الذكيين (Claude Code، Gemini CLI، Cursor) والتبعيات التي يسحبونها إلى مستودعاتك. إحدى عشرة فحصًا تشمل حقن الخطافات (hook injection)، إعدادات تنفيذ الأوامر عن بُعد (RCE configs)، التبعيات الخبيثة، الأبواب الخلفية في خطافات git، والتلاعب بسير عمل CI. قائمة المؤشرات (IOC) خارجية — إضافة مؤشرات جديدة لا تتطلب تغييرات في الكود.
مقال مصاحب: عندما يتحول الأداة إلى مهاجم.
scanner/ais.sh)إحدى عشرة فحصًا، لكل منها نص What: (الغرض) وFix: (المعالجة) مطبوع أسفل عنوان المقطع لتكون التقارير واضحة بذاتها. قائمة المؤشرات موجودة في scanner/iocs.txt (مُدارة بالإصدارات؛ يمكن تجاوزها باستخدام IOC_FILE=/path/to/iocs.txt).
الاستخدام:
bash scanner/ais.sh
# أدخل مسار مشروعك عند الطلب
# قائمة مؤشرات مخصصة:
IOC_FILE=./my-iocs.txt bash scanner/ais.sh
# مسار تقرير مخصص (الافتراضي: ./agentic-ioc-scan-YYYYMMDD-HHMMSS.log):
REPORT_FILE=/var/log/agentic-scan.log bash scanner/ais.sh
المخرجات
agentic-ioc-scan-YYYYMMDD-HHMMSS.log افتراضيًا، مع إزالة تنسيق ANSI عبر tee → sed).[CRITICAL] (تصرف فورًا)، [WARNING] (خبيث على الأرجح — تحقق)، [REVIEW] (استخدام مشروع محتمل — تأكد)، [OK] (نظيف).path:line). الأقسام التي تُظهر أرقام الأسطر: §1 خطاف، §2 توقيع Bun، §3 إشارة إبهام، §5 مفتاح preinstall، §7 أحرف شل خاصة في Gemini، §8 إشارة خطاف git في AGENTS.md، §9 محتويات خطاف مشبوهة..git/config المخالف بالإضافة إلى عنوان URL البعيد المطابق، لتتمكن من الانتقال مباشرة إلى الإدخال الذي يجب إزالته.core.hooksPath (§9) تُبلغ عن المسار المطلق لملف .git/config الخاص بالمستودع لتكون إعادة التعيين قابلة للتدقيق.مثال على نتيجة
[CRITICAL] Repo points to known worm exfil name
Repo: /home/dev/projects/myrepo
Config: /home/dev/projects/myrepo/.git/config:9
URL: https://github.com/dhawaldesai/A-Mini-Shai-Hulud-has-Appeared
[CRITICAL] Malicious hook: /home/dev/projects/myrepo/.claude/settings.json:3
[CRITICAL] Suspicious git post-checkout hook: /home/dev/projects/myrepo/.git/hooks/post-checkout:2
تحديث المؤشرات
عدّل ملف scanner/iocs.txt وقم بزيادة رقم إصدار الرأس # version:. التنسيق هو TYPE|VALUE|NOTES. الأنواع المدعومة:
لا يلزم أي تغيير في الكود عند ظهور مؤشرات جديدة — يقرأها الماسح عند بدء التشغيل ويطبع الإصدار المحمل في اللافتة.
التبعيات
مطلوب: bash، find، grep، awk، sed، git. اختياري: jq (مفضل لـ §1 — يتراجع إلى heuristic grep إذا كان غائبًا)، npm (مطلوب لفحص الحزم العالمي في §10؛ يُتخطى القسم بصمت إذا كان غير متاح).
scanner/pkg_version_check.sh)رفيق لماسح المؤشرات. يقرأ ملف CSV يحتوي على أزواج package,version المتأثرة (مثل تغذية Mini Shai-Hulud للمؤشرات في ~/Downloads/Mini Shai-Hulud - Sheet1.csv — 633 زوجًا من حزمة npm/إصدار) ويتحقق مما إذا كانت موجودة في:
package.json و package-lock.json و yarn.lock و pnpm-lock.yaml و node_modules/<pkg>/package.json المثبتة. يتم أيضًا فحص قوائم PyPI (requirements.txt، poetry.lock، Pipfile.lock) عندما يحتوي CSV على أسماء غير محددة النطاق.gh: بحث في الكود عبر أنواع ملفات القفل، ثم التحقق الدقيق من الإصدار عبر API SBOM لقائمة التبعيات (/repos/{owner}/{repo}/dependency-graph/sbom).نموذج الخطورة: تطابق تام pkg@version في ملف قفل أو node_modules/ أو SBOM → [CRITICAL]. محدد نطاق (^1.2.3، ~1.2.3، >=…) قد يشمل الإصدار المتأثر → [REVIEW]. تطابق اسم حزمة دون تأكيد إصدار → [REVIEW]. تتدفق المخرجات إلى الطرفية وإلى ./shai-hulud-pkg-scan-YYYYMMDD-HHMMSS.log (مع إزالة تنسيق ANSI)، مع ملخص تفصيلي للخطورة في النهاية.
الاستخدام:
# تفاعلي — يطلب دليل المشروع
bash scanner/pkg_version_check.sh
# كامل النص البرمجي (تجاوزات عبر متغيرات البيئة)
PROJECT_DIR=/path/to/project \
IOC_CSV="$HOME/Downloads/Mini Shai-Hulud - Sheet1.csv" \
REPORT_FILE=/var/log/pkg-scan.log \
bash scanner/pkg_version_check.sh --skip-node-modules
تنسيق CSV: العمود 1 = اسم الحزمة (الأسماء المحددة النطاق مثل @scope/pkg مدعومة)، العمود 2 = الإصدار المتأثر الدقيق. يتم اكتشاف صف الرأس تلقائيًا وتخطيه. يمكن تجاوز المسار باستخدام IOC_CSV=….
التبعيات: bash، find، grep، awk، sed. اختياري: jq (يحسن دقة تحليل node_modules/<pkg>/package.json)، gh (مطلوب لمرحلة GitHub — يتم تخطي المرحلة مع رسالة واضحة إذا كان غائبًا أو غير مصادق عليه).
القيود المعروفة:
grep وليس تحليلًا كاملاً — قد يؤدي التنسيق المتداخل بعمق أو غير المعتاد إلى نتائج سلبية خاطئة. أعلى قيمة للمتابعة هي تحليل ملف القفل القائم على jq.[REVIEW].claude-code-policy/)طبقة وقائية لـ Claude Code، تكمل طبقة الكشف أعلاه.
allowManagedHooksOnly).claude/settings.jsoncurl و wget و bun من استخدام الأداة الذكيةالتثبيت:
# نسخ الإعدادات المُدارة (لا يمكن تجاوزها بواسطة المشاريع)
cp claude-code-policy/managed-settings.json ~/.claude/managed-settings.json
# نسخ خطاف PreToolUse
mkdir -p ~/.claude/hooks
cp claude-code-policy/hooks/block_shai_hulud.py ~/.claude/hooks/
chmod +x ~/.claude/hooks/block_shai_hulud.py
npm ls -g موصول).pre-receive من جانب الخادم لرفض الإضافات التي تضيف ملفات .claude/settings.json أو .vscode/tasks.json أو .gemini/ من مؤلفين غير مدرجين في قائمة السماح.نرحب بالقضايا (Issues) وطلبات السحب (PRs) — خاصة لتقديم مؤشرات جديدة (أضف إلى scanner/iocs.txt وزد رقم إصدار الرأس)، وجذور فحص إضافية خاصة بالمنصة، وأنماط كشف للأدوات الذكية المجاورة (Continue، Cody، Codex CLI، Aider).
MIT
| § | الفحص | التهديد المُغطى |
|---|
| 1 | حقن خطاف SessionStart في Claude Code في أي settings.json (قائم على jq، نسبة خطأ إيجابي منخفضة) | استمرار Mini Shai-Hulud |
| 2 | تواقيع أداة الإسقاط (dropper) في بيئة تشغيل Bun داخل setup.mjs | مرحلة تثبيت Mini Shai-Hulud |
| 3 | حمولات execution.js المبهمة — الحجم بالإضافة إلى إشارة الإبهام (سطر واحد، base64، eval(atob(، child_process) | سارق بيانات الاعتماد Mini Shai-Hulud |
| 4 | ملفات قفل البرامج الضارة في $TMPDIR (أسماءها مأخوذة من قائمة المؤشرات) | حارس Mini Shai-Hulud |
| 5 | نصوص preinstall في package.json تشير إلى أسماء ملفات أداة الإسقاط | نقطة دخول لدودة سلسلة التوريد العامة |
| 6 | التزامات كتبها ذكاء اصطناعي تلمس .github/workflows/ (مرشح بقائمة السماح للبريد الإلكتروني) | تلاعب بـ CI بهوية وكيل ذكاء اصطناعي مخترق |
| 7 | ملفات إعدادات .gemini/ بأنماط أحرف شل خاصة | تنفيذ أوامر عن بُعد (RCE) في Gemini CLI بدرجة CVSS 10.0 (قبل الإصدار v0.39.1) |
| 8 | إعدادات Cursor في AGENTS.md و.cursor/ تشير إلى خطافات git أو مستودعات عارية | Cursor CVE-2026-26268 |
| 9 | خطافات git post-checkout / post-merge / post-rewrite / pre-commit تحتوي على بدائيات جلب وتنفيذ، بالإضافة إلى core.hooksPath مُعاد توجيهه خارج قائمة السماح الآمنة | CVE-2026-26268 بدائية تنفيذ + اختطاف خطاف عام |
| 10 | حزم node_modules المثبتة عالميًا والمحلية المُقارنة بقائمة المؤشرات | مجموعة Mini Shai-Hulud SAP CAP، DPRK PromptMink، حزم ضارة مستقبلية |
| 11 | عناوين git البعيدة المطابقة لأسماء مستودعات تسريب معروفة للدودة (Shai-Hulud، A Mini Shai-Hulud has Appeared) | إشارة اختراق مؤكدة |
.gitgitdir: …| النوع | المستخدم بواسطة | مثال |
|---|
FILENAME | §5 نمط preinstall | setup.mjs |
LOCKFILE | §4 فحص ملف القفل | tmp.987654321.lock |
NPM | §10 فحص الحزم العالمي والمحلي | @validate-sdk/v2 |
PYPI | §10 (يتم التحقق منه عند إضافة ماسح PyPI) | lightning |
HOOKSTRING | §1 مطابقة محتوى الخطاف (مضمن حاليًا في الكود) | SessionStart |
REPONAME | §11 مطابقة العنوان البعيد git | A Mini Shai-Hulud has Appeared |
EMAILSUBSTRING | محجوز لمطابقة مؤشرات مؤلف الالتزام في المستقبل | — |
CONFIGPATH | قائمة مرجعية لمسارات إعدادات الأدوات الذكية | .claude/settings.json |