
SkillSpector v2.10.0
ماسح أمني لمهارات وكلاء الذكاء الاصطناعي. يكتشف الثغرات الأمنية والأنماط الخبيثة والمخاطر الأمنية وحقن الأوامر (prompt injection) وتسريب البيانات ومخاطر سلسلة التوريد في مهارات Claude Code وCodex وMCP قبل تثبيتها.
SkillSpector
ماسح أمني لمهارات وكلاء الذكاء الاصطناعي. اكتشف الثغرات والأنماط الخبيثة والمخاطر الأمنية قبل تثبيت مهارات الوكلاء.
نظرة عامة
مهارات وكلاء الذكاء الاصطناعي (المستخدمة في Claude Code وCodex CLI وGemini CLI وغيرها) تعمل بثقة ضمنية وفحص أدنى. تُظهر الأبحاث أن 26.1% من المهارات تحتوي على ثغرات و5.2% تُظهر نية خبيثة محتملة.
يساعدك SkillSpector في الإجابة على السؤال: "هل هذه المهارة آمنة للتثبيت؟"
SkillSpector جزء من خط أنابيب NVIDIA Verified Skills، الذي يفحص ويقيّم ويوقّع مهارات الوكلاء قبل النشر. المهارات التي تجتاز الفحص تُنشر في كتالوج مهارات NVIDIA.
التوثيق
- فحص مهارات الوكلاء قبل التثبيت — دليل مستضاف: متى تفحص، وكيف تقرأ التقرير، وكيف تتحكم في عمليات التثبيت.
- دليل التطوير — البنية المعمارية، وتخطيط الحزمة، وكيفية توسيع خط أنابيب التحليل.
- امتداد Pi — ثبّت SkillSpector كأداة Pi لفحص المهارات من داخل جلسات الوكلاء.
الميزات
- إدخال متعدد الصيغ: فحص مستودعات Git، وعناوين URL، وملفات zip، والمجلدات، أو الملفات الفردية
- 68 نمط ثغرة عبر 17 فئة: حقن الأوامر، تسريب البيانات، تصعيد الامتيازات، سلسلة التوريد، الوكالة المفرطة، معالجة المخرجات، تسريب موجه النظام، تسميم الذاكرة، إساءة استخدام الأدوات، الوكيل المارق، مقاومة الرفض، إساءة استخدام المشغلات، الكود الخطير (AST)، تتبع التلوث، توقيعات YARA، أقل امتياز لـ MCP، وتسميم أدوات MCP
- تحليل على مرحلتين: تحليل ثابت سريع + تقييم دلالي اختياري عبر LLM
- استعلامات ثغرات حية: يستعلم SC4 عن OSV.dev للحصول على بيانات CVE في الوقت الفعلي مع تراجع تلقائي دون اتصال
- صيغ مخرجات متعددة: تقارير طرفية، وJSON، وMarkdown، وSARIF
- تسجيل المخاطر: درجة من 0-100 مع تسميات الخطورة وتوصيات واضحة
- خط الأساس / قمع النتائج الإيجابية الكاذبة: قبول النتائج المعروفة عبر قاعدة glob أو بصمة خط الأساس بحيث لا تُظهر عمليات إعادة الفحص سوى المشكلات الجديدة (التوثيق)
بدء سريع
التثبيت
إشعار البرمجيات مفتوحة المصدر: سيقوم هذا المشروع بتنزيل وتثبيت مشاريع برمجيات إضافية مفتوحة المصدر تابعة لجهات خارجية. راجع شروط الترخيص لهذه المشاريع مفتوحة المصدر قبل الاستخدام.
أنشئ وفعّل بيئة افتراضية أولاً (جميع أهداف make تفترض أن البيئة الافتراضية نشطة). استخدم uv أو pip؛ يستخدم Makefile uv إذا كان متاحاً، وإلا يستخدم pip.
تثبيت سريع باستخدام uv (واجهة سطر أوامر فقط):```bash uv tool install git+https://github.com/NVIDIA/skillspector.git
Update later: uv tool update skillspector
إذا كنت تخطط لتشغيل `skillspector mcp`، فقم بتثبيت إضافة MCP في وقت التثبيت:```bash
uv tool install 'skillspector[mcp] @ git+https://github.com/NVIDIA/skillspector.git'
من المصدر:```bash
Clone the repository
git clone https://github.com/NVIDIA/skillspector.git cd skillspector
Create and activate virtual environment
uv venv .venv && source .venv/bin/activate
or: python3 -m venv .venv && source .venv/bin/activate
Install for production use
make install
Or install with development dependencies
make install-dev
### Docker (لا يتطلب Python)
شغّل SkillSpector دون تثبيت Python عن طريق بنائه محليًا من [Dockerfile](https://github.com/nvidia/skillspector/blob/HEAD/Dockerfile) المرفق. تعتمد الصورة على صورة Docker الرسمية Python `3.12-slim-bookworm`.
**بناء الصورة:**```bash
make docker-build
# or: docker build -t skillspector .
فحص دليل محلي عن طريق تركيب الدليل الحالي الخاص بك داخل /scan، وهو دليل العمل الخاص بالحاوية:```bash
docker run --rm -v "$PWD:/scan" skillspector scan ./my-skill/ --no-llm
**المسح الضوئي مع تحليل LLM** عن طريق تمرير بيانات الاعتماد مع ملف `.env` محلي:```bash
cat > .env <<'EOF'
SKILLSPECTOR_PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-...
EOF
بعد اكتمال التثبيت، يمكنك التحقق من أن الأداة تعمل بشكل صحيح عن طريق تشغيل الأمر التالي:
toolname --version
يجب أن يعرض هذا الأمر رقم الإصدار الحالي، مما يؤكد نجاح التثبيت. إذا واجهت أي أخطاء، فتأكد من تثبيت جميع المتطلبات الأساسية وأن متغيرات البيئة الخاصة بك مضبوطة بشكل صحيح.
الاستخدام
للبدء في استخدام الأداة، راجع الأوامر المتاحة:
toolname --help
يسرد هذا الأمر جميع الأوامر والخيارات المدعومة. تتضمن الأوامر الشائعة:
scan- إجراء فحص على هدف محددreport- إنشاء تقرير مفصل عن نتائج الفحصupdate- تحديث قواعد البيانات والتوقيعات
مثال على الفحص
إليك مثالاً بسيطاً على كيفية إجراء فحص أساسي:
toolname scan --target example.com --output results.json
سيقوم هذا الأمر بفحص example.com وحفظ النتائج في ملف results.json. يمكنك تحديد خيارات إضافية مثل --verbose للحصول على مخرجات أكثر تفصيلاً أو --threads للتحكم في عدد الخيوط المتزامنة.
التكوين
يمكن تخصيص الأداة من خلال ملف تكوين موجود في ~/.toolname/config.yaml. يتضمن هذا الملف إعدادات مثل:
- مستويات السجل
- مهلات الشبكة
- وكلاء المستخدم المخصصون
- إعدادات الوكيل
قم بتحرير هذا الملف لضبط سلوك الأداة وفقاً لمتطلباتك المحددة.```bash
docker run --rm
-v "$PWD:/scan"
--env-file .env
skillspector scan ./my-skill/
أو مرّر بيانات الاعتماد مباشرةً من بيئة الصدفة الخاصة بك:```bash
docker run --rm \
-v "$PWD:/scan" \
-e SKILLSPECTOR_PROVIDER=anthropic \
-e ANTHROPIC_API_KEY="$ANTHROPIC_API_KEY" \
skillspector scan ./my-skill/
اكتب تقريرًا إلى نظام ملفات المضيف عن طريق الكتابة إلى الدليل المُثبَّت:```bash
docker run --rm
-v "$PWD:/scan"
skillspector scan ./my-skill/ --no-llm --format json --output report.json
**اسم مستعار اختياري** لعمليات الفحص الثابت المتكررة:```bash
alias skillspector-docker='docker run --rm -v "$PWD:/scan" skillspector'
skillspector-docker scan ./my-skill/ --no-llm
الاستخدام الأساسي```bash
Scan a local skill directory
skillspector scan ./my-skill/
Scan a single SKILL.md file
skillspector scan ./SKILL.md
Scan a Git repository
skillspector scan https://github.com/user/my-skill
Scan a zip file
skillspector scan ./my-skill.zip
#### حدود الحجم
يفرض SkillSpector حدّين مستقلين على المدخلات البعيدة والمدخلات المؤرشفة للحد من تأثير التنزيلات الضخمة والقنابل المضغوطة (zip bombs):
- **حد الاستيعاب لكل عملية**: `INGEST_MAX_BYTES` (100 ميجابايت) — يُطبَّق على تنزيلات URL المتدفقة، والحجم الإجمالي غير المضغوط لأرشيفات zip، واستخدام القرص بعد الاستنساخ لمستودعات Git.
- **حد أعضاء zip**: `INGEST_MAX_ZIP_MEMBERS` (10,000) — يحد من عدد الإدخالات في ملف zip واحد.
لاحظ أن حد التحليل البالغ 1 ميجابايت لكل ملف (`MAX_FILE_BYTES`) هو حد منفصل يقع في مرحلة لاحقة: فهو يحد من مقدار ما ستقرأه المحللات الفردية من دليل تم استيعابه بالفعل. أما حدود الاستيعاب المذكورة أعلاه فتحدد مقدار المحتوى الذي يمكن أن يصل إلى القرص في المقام الأول. أي تجاوز لأحد حدّي الاستيعاب يؤدي إلى فشل مغلق مع خطأ `IngestLimitExceededError`.
### صيغ الإخراج```bash
# Terminal output (default) - pretty formatted
skillspector scan ./my-skill/
# JSON output - machine readable
skillspector scan ./my-skill/ --format json --output report.json
# Markdown output - for documentation
skillspector scan ./my-skill/ --format markdown --output report.md
# SARIF output - for CI/CD integration and IDE tooling
skillspector scan ./my-skill/ --format sarif --output report.sarif
الفحص الدفعي
قم بفحص أدلة كاملة من المهارات بالتوازي من contrib/batch_scan/:```bash
python -m contrib.batch_scan.batch_scan ./my-skills/ --no-llm
python -m contrib.batch_scan.batch_scan ./my-skills/ --workers 20 -f json -o report.json
python -m contrib.batch_scan.batch_scan ./tests/fixtures/ -f terminal --workers 20
يدعم اكتشاف اللغات المتعددة (zh/ja/ko) والإخراج الطرفي/JSON/Markdown.
لعمليات فحص LLM ذات التزامن الأعلى، قم بتكوين مفاتيح API متعددة باتباع
[`.env.example`](https://github.com/nvidia/skillspector/blob/HEAD/contrib/batch_scan/.env.example) — يعمل التجمع على تحسين الإنتاجية
والمرونة، بشرط ألا تتشارك المفاتيح في حد معدل على مستوى الحساب.
راجع [دليل المساهمات](https://github.com/nvidia/skillspector/blob/HEAD/contrib/batch_scan/docs/) للحصول على التفاصيل.
> **ملاحظة حول دعم LLM:** يستهدف التكوين الافتراضي DeepSeek باعتباره
> الخيار العام الأرخص. من المتوقع أن يتم
> [إيقاف DeepSeek-Chat](https://api-docs.deepseek.com/)، ولا يمتلك المساهم
> عتادًا لاختباره مقابل النماذج المحلية. تم اختبار الماسح الدفعي في الأصل
> مع نقاط نهاية متوافقة مع OpenAI — حيث تطلب افتقار DeepSeek لدعم
> الإخراج المنظم تصحيحات يدوية لتحليل JSON. إذا كان بإمكانك
> المساهمة في خلفية أكثر شمولًا (Ollama أو vLLM أو مزود مختلف)،
> فإن طلبات السحب (PRs) مرحب بها للغاية.
### قمع النتائج الإيجابية الكاذبة (خط الأساس)
قم بقمع النتائج المعروفة/المقبولة بحيث يعكس مؤشر المخاطر فقط القضايا
غير المُصنّفة وتُظهر عمليات إعادة الفحص فقط النتائج *الجديدة*. راجع
[دليل القمع](https://github.com/nvidia/skillspector/blob/HEAD/docs/SUPPRESSION.md) للمرجع الكامل.```bash
# Accept all current findings into a baseline (run once), then commit it.
skillspector baseline ./my-skill/ -o .skillspector-baseline.yaml
# Scan against the baseline — only NEW findings are reported and scored.
skillspector scan ./my-skill/ --baseline .skillspector-baseline.yaml
# Review what was suppressed (still excluded from the score).
skillspector scan ./my-skill/ --baseline .skillspector-baseline.yaml --show-suppressed
يمكن أن يستخدم خط الأساس أيضًا قواعد glob متسامحة مع الانجراف (حسب معرف القاعدة، أو مسار الملف، أو
الرسالة) — انظر .skillspector-baseline.example.yaml.
خطوط الأساس الدقيقة للبصمات مرتبطة بالأدلة: تغيير المصدر المفحوص أو
إصدار SkillSpector يُبقي النتيجة نشطة حتى تتم مراجعتها مرة أخرى.
عند تخزين خط أساس محدد أو مخرجات خط الأساس داخل دليل
المهارة، يستبعد SkillSpector هذا الملف المحدد من تحليل المحتوى بحيث
لا يمكن لنص القمع الخاص به إنشاء نتائج أو الدخول في بصمات مُعاد توليدها؛
تبقى الملفات الشقيقة ضمن نطاق الفحص العادي.
تحليل LLM
للحصول على أفضل النتائج، قم بتكوين نقطة نهاية LLM متوافقة مع OpenAI لـ
التحليل الدلالي. اختر مزودًا باستخدام SKILLSPECTOR_PROVIDER؛ تأتي المزودات المستضافة مع نماذج افتراضية مدمجة، بينما تعتمد مزودات CLI على النموذج الافتراضي لبيئة التشغيل المحلية ما لم يتم تعيين SKILLSPECTOR_MODEL. يعمل SkillSpector أيضًا مع
خوادم محلية متوافقة مع OpenAI (Ollama، vLLM، llama.cpp) وبوابات
الاستدلال المُدارة.
المزود (SKILLSPECTOR_PROVIDER) | متغير بيئة الاعتماد | نقطة النهاية | النموذج الافتراضي |
|---|---|---|---|
openai | OPENAI_API_KEY (+ اختياري OPENAI_BASE_URL) | api.openai.com (أو أي عنوان URL متوافق مع OpenAI) | gpt-5.4 |
anthropic | ANTHROPIC_API_KEY | api.anthropic.com | claude-opus-4-6 |
anthropic_proxy | ANTHROPIC_PROXY_API_KEY + ANTHROPIC_PROXY_ENDPOINT_URL | أي وكيل raw-predict بنمط Vertex | claude-sonnet-4-6 |
bedrock | AWS_PROFILE (اختياري) + AWS_REGION — SigV4 عبر boto3 | AWS Bedrock Runtime | us.anthropic.claude-sonnet-4-6-20250915-v1:0 |
nv_build | NVIDIA_INFERENCE_KEY | build.nvidia.com | deepseek-ai/deepseek-v4-flash |
claude_cli | (لا شيء — يستخدم مصادقة CLI المحلية) | ثنائي claude المحلي | نموذج Claude المحلي الاحتياطي، أو SKILLSPECTOR_MODEL |
codex_cli | (لا شيء — يستخدم مصادقة CLI المحلية) | ثنائي codex المحلي | نموذج Codex المحلي الاحتياطي، أو SKILLSPECTOR_MODEL |
Stock OpenAI
export SKILLSPECTOR_PROVIDER=openai export OPENAI_API_KEY=sk-... skillspector scan ./my-skill/
Anthropic
export SKILLSPECTOR_PROVIDER=anthropic export ANTHROPIC_API_KEY=sk-ant-... skillspector scan ./my-skill/
Anthropic via Vertex-style proxy (corporate gateways, GCP Vertex AI)
export SKILLSPECTOR_PROVIDER=anthropic_proxy export ANTHROPIC_PROXY_ENDPOINT_URL=https://my-gateway.example.com/models/claude-sonnet-4-6:streamRawPredict export ANTHROPIC_PROXY_API_KEY=your-bearer-token export SKILLSPECTOR_MODEL=claude-sonnet-4-6 skillspector scan ./my-skill/
AWS Bedrock (Claude via SigV4)
export SKILLSPECTOR_PROVIDER=bedrock
Optional: select an AWS named profile. When unset, the standard
boto3 credential chain (env vars, instance metadata, SSO, etc.) resolves.
export AWS_PROFILE=my-profile
export AWS_REGION=us-west-2 # default if unset
Default model: us.anthropic.claude-sonnet-4-6-20250915-v1:0
Override with any Bedrock model ID, cross-region inference-profile
ID, or your own application-inference-profile ARN:
export SKILLSPECTOR_MODEL=us.anthropic.claude-opus-4-6-20250915-v1:0
skillspector scan ./my-skill/
NVIDIA build.nvidia.com
export SKILLSPECTOR_PROVIDER=nv_build export NVIDIA_INFERENCE_KEY=nvapi-... skillspector scan ./my-skill/
Local Claude CLI — no API key; uses your existing claude auth login session
Requires: claude CLI installed and authenticated (claude auth login)
export SKILLSPECTOR_PROVIDER=claude_cli
Uses the local Claude CLI runtime fallback unless SKILLSPECTOR_MODEL is set.
export SKILLSPECTOR_MODEL=claude-sonnet-4-6
skillspector scan ./my-skill/
Local Codex CLI — no API key; uses your existing codex login session
Requires: codex CLI installed and authenticated
export SKILLSPECTOR_PROVIDER=codex_cli skillspector scan ./my-skill/
Local Ollama or any OpenAI-compatible endpoint
export SKILLSPECTOR_PROVIDER=openai export OPENAI_API_KEY=ollama export OPENAI_BASE_URL=http://localhost:11434/v1 export SKILLSPECTOR_MODEL=llama3.1:8b skillspector scan ./my-skill/
Override the provider's default model
export SKILLSPECTOR_MODEL=gpt-5.2 skillspector scan ./my-skill/
Skip LLM analysis (faster, static analysis only)
skillspector scan ./my-skill/ --no-llm
### خادم MCP
شغّل SkillSpector كخادم [Model Context Protocol](https://modelcontextprotocol.io)
بحيث يمكن لأي وكيل يدعم MCP (Claude Code، Codex CLI، Gemini CLI) أو
بيئة تشغيل عن بُعد استدعاء الفحص كأداة و**ربط تثبيت المهارات/إضافات MCP بالنتيجة** — مما يحوّل SkillSpector إلى حاجز حماية وقت التشغيل بدلاً من
خطوة تدقيق خارج النطاق.
يتطلب `skillspector mcp` تثبيت `skillspector[mcp]`.```bash
# Install, or reinstall if you already used the CLI-only path
uv tool install --force 'skillspector[mcp] @ git+https://github.com/NVIDIA/skillspector.git'
# FastMCP stdio transport for local CLI agents
skillspector mcp
# streamable HTTP/SSE transport for remote / A2A callers
skillspector mcp --transport http --host 127.0.0.1 --port 8000
نقل stdio هو مسار FastMCP الحالي لوكلاء CLI المحليين، ولا يزال تعليق التهيئة المُبلَّغ عنه في المشكلة #199 ساريًا هناك.
يُعرّض الخادم أداة واحدة:
scan_skill(target, use_llm=true, output_format="json")— يفحص عنوان Git URL، أو عنوان ملف URL، أو ملف.zip، أو ملف.md، أو دليلًا ويعيد حكمًا منظمًا:risk_score(0-100)، وseverity، وrecommendation، وsafe_to_install، وfindings. كما يُبلّغ عنllm_used/scan_modeبحيث لا يُخلط أبدًا بين درجة منخفضة من فحص ثابت فقط وبين فحص كامل نظيف.
سجّلها مع Claude Code عبر:```bash claude mcp add skillspector -- skillspector mcp
> **الأمان — نموذج الثقة في نقل HTTP**
>
> نقل HTTP يعمل **بدون مصادقة**. أي متصل يمكنه الوصول إلى المنفذ يمكنه استدعاء `scan_skill`. عبر stdio أو `127.0.0.1`، هذه هي نفس حدود الثقة الخاصة بواجهة CLI. إذا قمت بالربط بواجهة قابلة للتوجيه:
>
> - ضع الخادم خلف وكيل عكسي للمصادقة (مثل nginx + mTLS) قبل تعريضه خارجيًا.
> - المسارات المحلية وعناوين `file://` يتم **رفضها تلقائيًا** عبر HTTP لمنع المتصلين غير المصادق عليهم من قراءة ملفات المضيف العشوائية. يتم قبول عناوين Git البعيدة وعناوين `.zip` فقط.
## أنماط الثغرات
يكتشف SkillSpector **68 نمطًا من أنماط الثغرات** عبر 17 فئة:
### حقن الأوامر (5 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| P1 | تجاوز التعليمات | عالية | أوامر لتجاهل قيود الأمان |
| P2 | تعليمات مخفية | عالية | توجيهات خبيثة في التعليقات/النص غير المرئي |
| P3 | أوامر تسريب البيانات | عالية | تعليمات لنقل السياق خارجيًا |
| P4 | التلاعب بالسلوك | متوسطة | تعليمات دقيقة تغيّر قرارات الوكيل |
| P5 | محتوى ضار | حرجة | تعليمات قد تسبب ضررًا جسديًا |
### مكافحة الرفض (3 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| AR1 | قمع الرفض | عالية | تعليمات بعدم الرفض أبدًا أو الامتثال دائمًا (مثل "لا ترفض أبدًا"، "امتثل دائمًا") |
| AR2 | قمع إخلاء المسؤولية | عالية | تعليمات لحذف التحذيرات أو إخلاءات المسؤولية أو التعليقات الأخلاقية (مثل "لا إخلاءات مسؤولية"، "لا توعظ") |
| AR3 | إبطال سياسة الأمان | عالية | صياغة اختراق تلغي الحواجز الوقائية (مثل "لا توجد قيود عليك"، "تجاهل إرشاداتك"، "افعل أي شيء الآن") |
### تسريب البيانات (4 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| E1 | الإرسال الخارجي | متوسطة | إرسال البيانات إلى عناوين URL خارجية |
| E2 | حصاد متغيرات البيئة | عالية | تعداد أو نسخ أو البحث في بيانات البيئة لجمع الأسرار |
| E3 | تعداد نظام الملفات | متوسطة | فحص الدلائل بحثًا عن ملفات حساسة |
| E4 | تسريب السياق | عالية | نقل سياق المحادثة خارجيًا |
### تصعيد الامتيازات (3 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| PE1 | صلاحيات مفرطة | منخفضة | طلب وصول يتجاوز الوظيفة المعلنة |
| PE2 | تنفيذ sudo/root | متوسطة | استدعاء امتيازات نظام مرتفعة |
| PE3 | الوصول إلى بيانات الاعتماد | عالية | قراءة مفاتيح SSH أو الرموز أو كلمات المرور |
### سلسلة التوريد (6 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| SC1 | تبعيات غير مثبتة | منخفضة | لا توجد قيود على إصدارات الحزم |
| SC2 | جلب سكربتات خارجية | عالية | curl \| bash وتنفيذ كود عن بُعد |
| SC3 | كود مشوّش | عالية | تنفيذ مشفّر بـ Base64/hex |
| SC4 | تبعيات معروفة الثغرات | عالية | تبعيات بها CVEs معروفة (بحث مباشر في OSV.dev) |
| SC5 | تبعيات مهجورة | متوسطة | حزم غير مُحدّثة بدون تحديثات أمان |
| SC6 | انتحال الأسماء | عالية | أسماء حزم مشابهة لحزم شائعة |
### الوكالة المفرطة (4 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| EA1 | وصول غير مقيد للأدوات | عالية | وصول كامل للأدوات دون قيود |
| EA2 | اتخاذ قرارات مستقلة | عالية | قرارات عالية التأثير دون تدخل بشري |
| EA3 | توسع النطاق | متوسطة | قدرات تتجاوز الغرض المعلن |
| EA4 | وصول غير محدود للموارد | متوسطة | لا حدود لمعدلات الاستهلاك أو الحصص على الموارد |
### معالجة المخرجات (3 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| OH1 | حقن مخرجات غير مُتحقق منها | عالية | استخدام مخرجات النموذج دون تنظيف |
| OH2 | مخرجات عبر السياقات | متوسطة | تدفق المخرجات عبر حدود الثقة دون تحقق |
| OH3 | مخرجات غير محدودة | متوسطة | لا حدود لحجم المخرجات أو معدل التوليد |
### تسريب موجه النظام (3 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| P6 | تسريب مباشر | عالية | تعليمات تكشف موجهات النظام أو القواعد الداخلية |
| P7 | استخراج غير مباشر | متوسطة | استخراج عبر إعادة الصياغة أو الترجمة أو القنوات الجانبية |
| P8 | تسريب قائم على الأدوات | عالية | تسريب موجهات النظام عبر كتابة الملفات أو طلبات الشبكة |
### تسميم الذاكرة (3 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| MP1 | حقن سياق مستمر | عالية | محتوى مصمم للبقاء عبر التفاعلات |
| MP2 | حشو نافذة السياق | متوسطة | محتوى حشو يزيح قيود الأمان |
| MP3 | التلاعب بالذاكرة | عالية | العبث بذاكرة الوكيل أو الحالة المخزنة |
### إساءة استخدام الأدوات (3 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| TM1 | إساءة استخدام معاملات الأدوات | عالية | معاملات مصممة لسلوك غير مقصود (shell=True، --force) |
| TM2 | إساءة استخدام التسلسل | عالية | سلاسل أدوات تتجاوز فحوصات الأمان الفردية |
| TM3 | إعدادات افتراضية غير آمنة | متوسطة | إعدادات افتراضية متساهلة (TLS معطّل، بدون مصادقة) |
### وكيل مارق (2 نمطان)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| RA1 | التعديل الذاتي | حرجة | تعديل الكود أو الإعدادات الخاصة به أثناء التشغيل |
| RA2 | استمرار الجلسة | عالية | استمرار غير مصرح به عبر مهام cron أو سكربتات بدء التشغيل |
### إساءة استخدام المشغّلات (3 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| TR1 | مشغّل واسع جدًا | متوسطة | أنماط مشغّلات تطابق كلمات شائعة |
| TR2 | مشغّل أوامر ظلية | عالية | مشغّلات تحجب الأوامر المدمجة أو المهارات الأخرى |
| TR3 | مشغّل اصطياد الكلمات المفتاحية | متوسطة | مشغّلات عامة مصممة لتعظيم التنشيط |
### AST السلوكي (9 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| AST1 | استدعاء exec() | حرجة | exec() مباشر يتيح تنفيذ كود عشوائي |
| AST2 | استدعاء eval() | عالية | eval() مباشر لتقييم تعبيرات عشوائية |
| AST3 | استيراد ديناميكي | عالية | \_\_import\_\_() لتحميل وحدات عشوائية أثناء التشغيل |
| AST4 | استدعاء subprocess | عالية | تنفيذ أوامر خارجية عبر subprocess |
| AST5 | os.system / عائلة exec | عالية | أوامر شل عبر وحدة os |
| AST6 | استدعاء compile() | متوسطة | إنشاء كائنات كود من سلاسل نصية |
| AST7 | getattr() ديناميكي | متوسطة | وصول عشوائي للسمات بأسماء غير حرفية |
| AST8 | سلسلة تنفيذ خطيرة | حرجة | exec/eval مع مصدر ديناميكي (شبكة، بيانات مشفّرة) |
| AST9 | حوض getattr() انعكاسي | عالية | exec انعكاسي عبر `getattr(os,'system')` / `getattr(builtins,'exec')` يتجاوز AST1/AST5 |
### تتبع التلوث (5 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| TT1 | تدفق تلوث مباشر | عالية | تدفق البيانات مباشرة من مصدر إلى حوض دون تنظيف |
| TT2 | تدفق تلوث عبر متغيرات | متوسطة | تدفق البيانات من مصدر إلى حوض عبر متغيرات وسيطة |
| TT3 | سلسلة تسريب بيانات الاعتماد | حرجة | تدفق بيانات الاعتماد (متغيرات البيئة، الأسرار) إلى أحواض مخرجات الشبكة |
| TT4 | قراءة ملف إلى تسريب شبكة | عالية | تدفق محتويات الملف إلى أحواض مخرجات الشبكة |
| TT5 | إدخال خارجي إلى تنفيذ كود | حرجة | تدفق إدخال الشبكة أو المستخدم إلى أحواض exec/eval/subprocess |
### توقيعات YARA (4 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| YR1 | تطابق برمجيات خبيثة | حرجة | تطابق قاعدة YARA لتوقيعات برمجيات خبيثة معروفة |
| YR2 | تطابق ويب شل | حرجة | تطابق قاعدة YARA لأنماط ويب شل |
| YR3 | تطابق عامل تعدين العملات | عالية | تطابق قاعدة YARA لمؤشرات تعدين العملات المشفرة |
| YR4 | تطابق أدوات اختراق/استغلال | عالية | تطابق قاعدة YARA لأدوات الاختراق أو كود الاستغلال |
### MCP أقل امتياز (4 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| LP1 | قدرة غير معلنة | عالية | كود يستخدم قدرات غير مدرجة في الصلاحيات المعلنة |
| LP2 | صلاحية wildcard | متوسطة | قائمة الصلاحيات تحتوي على wildcards (\*، all، full، any) |
| LP3 | إعلان صلاحية مفقود | متوسطة | لا يوجد حقل صلاحيات لكن الكود يحتوي على قدرات قابلة للاكتشاف |
| LP4 | صلاحية مبالغ في إعلانها | منخفضة | صلاحية معلنة لكن لا توجد قدرة كود مقابلة |
### تسميم أدوات MCP (4 أنماط)
| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| TP1 | تعليمات مخفية | عالية | توجيهات مخفية في البيانات الوصفية (تعليقات HTML، أحرف بعرض صفري، base64، بيانات URIs) |
| TP2 | خداع Unicode | عالية | Homoglyphs، تجاوزات RTL، معرّفات مختلطة النصوص في بيانات الأدوات الوصفية |
| TP3 | حقن وصف المعاملات | متوسطة | أنماط حقن في تعريفات المعاملات (تجاوزات، رموز نظام، إعدادات افتراضية خبيثة) |
| TP4 | عدم تطابق الوصف والسلوك | متوسطة | وصف الأداة المعلن لا يطابق سلوك الكود الفعلي (مدعوم بـ LLM) |
جميع الأنماط المكتشفة مدرجة في الجداول أعلاه.
## تقييم المخاطر
### حساب النقاط
- **مشكلات حرجة**: +50 نقطة
- **مشكلات عالية**: +25 نقطة
- **مشكلات متوسطة**: +10 نقاط
- **مشكلات منخفضة**: +5 نقاط
- **سكربتات قابلة للتنفيذ**: مضاعف 1.3x
### مستويات الخطورة
| النقاط | الخطورة | التوصية |
|-------|----------|----------------|
| 0-20 | منخفضة | آمن |
| 21-50 | متوسطة | حذر |
| 51-80 | عالية | لا تقم بالتثبيت |
| 81-100 | حرجة | لا تقم بالتثبيت |
## مثال على المخرجات
### مخرجات الطرفية```
SkillSpector Security Report v2.0.0
Skill: suspicious-skill
Source: ./suspicious-skill/
Scanned: 2026-01-29 10:30:00 UTC
Risk Assessment
Metric Value
Score 78/100
Severity HIGH
Recommendation DO NOT INSTALL
Components (3)
File Type Lines Executable
SKILL.md markdown 142 No
scripts/sync.py python 87 Yes
requirements.txt text 3 No
Issues (2)
HIGH: Env Variable Harvesting (E2)
Location: scripts/sync.py:23
Finding: for key, val in os.environ.items():...
Confidence: 94%
Explanation: This code collects environment variables containing
API keys and secrets, then sends them to an external server.
HIGH: External Transmission (E1)
Location: scripts/sync.py:45
Finding: requests.post("https://api.skill.io/env"...
Confidence: 89%
Explanation: Data is being sent to an external server. Combined
with env harvesting above, this indicates credential exfiltration.
التكوين
متغيرات البيئة
| المتغير | الوصف | مطلوب |
|---|---|---|
SKILLSPECTOR_PROVIDER | مزود LLM النشط: openai, anthropic, anthropic_proxy, bedrock, nv_build, claude_cli, codex_cli, أو gemini_cli. يستخدم المزودون المستضافون الإعدادات الافتراضية المضمنة في model_registry.yaml؛ بينما يتراجع claude_cli وcodex_cli إلى النموذج الافتراضي لبيئة تشغيل CLI المحلية ما لم يتم تعيين SKILLSPECTOR_MODEL. الافتراضي هو nv_build. | اختياري |
NVIDIA_INFERENCE_KEY | بيانات الاعتماد لمزود nv_build (build.nvidia.com). | مطلوب لتحليل LLM عندما يكون SKILLSPECTOR_PROVIDER=nv_build |
OPENAI_API_KEY | بيانات الاعتماد لمزود OpenAI (SKILLSPECTOR_PROVIDER=openai). يعمل أيضًا كاحتياطي من المستوى الثاني في تسلسل بيانات الاعتماد عندما لا يُرجع المزود النشط أي بيانات اعتماد. | مطلوب لتحليل LLM عندما يكون SKILLSPECTOR_PROVIDER=openai |
OPENAI_BASE_URL | تجاوز نقطة نهاية OpenAI (مثل التوجيه إلى Ollama). | اختياري |
SKILLSPECTOR_REASONING_EFFORT | إعداد اختياري لجهد الاستدلال يعتمد على المزود والنموذج. يتم اقتطاع القيم غير الفارغة وتمريرها كما هي؛ القيم غير المعينة أو الفارغة تحافظ على السلوك الافتراضي للمزود. | اختياري |
ANTHROPIC_API_KEY | بيانات الاعتماد لمزود Anthropic (SKILLSPECTOR_PROVIDER=anthropic). | مطلوب لتحليل LLM عندما يكون SKILLSPECTOR_PROVIDER=anthropic |
ANTHROPIC_BASE_URL | تجاوز نقطة نهاية Anthropic الأصلية (الافتراضي: https://api.anthropic.com). | اختياري |
ANTHROPIC_PROXY_ENDPOINT_URL | عنوان نقطة النهاية الكامل لمزود وكيل Anthropic (raw-predict بنمط Vertex). | مطلوب عندما يكون SKILLSPECTOR_PROVIDER=anthropic_proxy |
ANTHROPIC_PROXY_API_KEY | رمز الحامل (Bearer token) لمزود وكيل Anthropic. | مطلوب عندما يكون SKILLSPECTOR_PROVIDER=anthropic_proxy |
ANTHROPIC_PROXY_API_VERSION | قيمة anthropic_version المرسلة في نص الطلب (الافتراضي: vertex-2023-10-16). | اختياري |
AWS_PROFILE | ملف تعريف AWS المسمى لمزود Bedrock — يتم المصادقة عبر SigV4 من خلال boto3. عند عدم تعيينه، يتم حل سلسلة بيانات الاعتماد القياسية لـ boto3 (متغيرات البيئة، بيانات تعريف المثيل، SSO، إلخ). | اختياري (يُستخدم عندما يكون SKILLSPECTOR_PROVIDER=bedrock) |
AWS_REGION | منطقة AWS لنقطة نهاية Bedrock Runtime. الافتراضي هو us-west-2. | اختياري (يُستخدم عندما يكون SKILLSPECTOR_PROVIDER=bedrock) |
SKILLSPECTOR_MODEL | تجاوز نموذج المزود النشط. بالنسبة للمزودين المستضافين، يستبدل هذا الافتراضي المضمن من جدول تحليل LLM. بالنسبة لـ claude_cli وcodex_cli، يتم تمريره كـ --model بدلاً من استخدام الاحتياطي المحلي لبيئة تشغيل CLI. | اختياري |
SKILLSPECTOR_MODEL_REGISTRY | تجاوز سجل YAML المضمن لكل مزود (src/skillspector/providers/<provider>/model_registry.yaml) بمسار مخصص. | اختياري |
SKILLSPECTOR_LOG_LEVEL | مستوى التسجيل: DEBUG, INFO, WARNING, ERROR (الافتراضي: WARNING). | اختياري |
مزودو CLI (
claude_cli,codex_cli): لا حاجة لمفتاح API. تتم إدارة المصادقة بالكامل بواسطة جلسة تسجيل الدخول الخاصة بواجهة CLI للوكيل (claude auth login/codex login). لا يقرأ SkillSpector مفاتيح API أو يمررها أبدًا عندما يكون هؤلاء المزودون نشطين. يتم تشغيل العملية الفرعية في بيئة معزولة محصنة: الأدوات معطلة، لا MCP، وضع بيئة معزولة للقراءة فقط (codex)، ويتم تسليم محتوى المهارات غير الموثوق به فقط عبر stdin.
خيارات CLI```bash
skillspector scan --help
Options: -f, --format [terminal|json|markdown|sarif] Output format [default: terminal] -o, --output PATH Output file path --no-llm Skip LLM analysis (static only) --yara-rules-dir PATH Extra YARA rules directory -b, --baseline PATH Suppress findings listed in a baseline --show-suppressed List baseline-suppressed findings -V, --verbose Show detailed progress --help Show this message and exit
Generate a baseline of all current findings (see docs/SUPPRESSION.md)
skillspector baseline [-o FILE] [--no-llm] [--reason TEXT]
## دمج SkillSpector
تم تصميم SkillSpector ليكون مدفوعًا بأدوات أخرى (خطوط CI، بوابات التثبيت، تكاملات المحرر). رمز الخروج ومخرجات JSON الخاصة به هما عقد مستقر.
### رموز الخروج
`skillspector scan` يخرج بالشكل التالي:
| الرمز | المعنى |
|------|---------|
| `0` | اكتمل الفحص، `risk_score` ≤ 50 (التوصية `SAFE` أو `CAUTION`) |
| `1` | اكتمل الفحص، `risk_score` > 50 (التوصية `DO_NOT_INSTALL`) |
| `2` | خطأ (مدخلات غير صالحة، مصدر غير قابل للقراءة، فشل داخلي) |
> رمز الخروج يدمج `SAFE` و `CAUTION` في `0`. للتصرف بشكل مختلف تجاههما (مثل *التحذير* عند `CAUTION` ولكن *الحظر* عند `DO_NOT_INSTALL`)، اقرأ حقل `recommendation` من مخرجات JSON بدلاً من الاعتماد على رمز الخروج.
### مخرجات قابلة للقراءة آليًا
`--format json` ينتج تقرير JSON؛ بدون `--output`/`-o` يُكتب إلى stdout:```bash
skillspector scan ./my-skill/ --format json
الشكل العلوي هو (يوضح هذا المثال فحصًا كاملًا مدعومًا بنموذج لغوي كبير؛ مع --no-llm، تكون metadata.llm_requested بقيمة false):```json
{
"skill": { "name": "...", "source": "...", "scanned_at": "<ISO 8601>" },
"risk_assessment": { "score": 0, "severity": "LOW", "recommendation": "SAFE" },
"components": [ { "path": "...", "type": "...", "lines": 0, "executable": false, "size_bytes": 0 } ],
"issues": [ { "id": "...", "category": "...", "severity": "...", "confidence": 0.0, "location": { "file": "...", "start_line": 0 } } ],
"metadata": {
"has_executable_scripts": false,
"skillspector_version": "...",
"llm_requested": true,
"llm_available": true,
"inference_usage": [
{
"node": "semantic_security_discovery",
"request_kind": "structured_output",
"provider": "nv_inference",
"model": "azure/anthropic/claude-opus-4-6",
"model_source": "provider_response",
"usage_source": "provider_response",
"prompt_tokens": 1000,
"completion_tokens": 100,
"cached_tokens": 400,
"cache_write_tokens": 50,
"total_tokens": 1100
}
]
}
}
- `risk_assessment.severity` ∈ `LOW | MEDIUM | HIGH | CRITICAL`.
- `risk_assessment.recommendation` ∈ `SAFE | CAUTION | DO_NOT_INSTALL`، مُستمد من الخطورة: `LOW → SAFE`، `MEDIUM → CAUTION`، `HIGH`/`CRITICAL → DO_NOT_INSTALL`.
- `metadata.llm_error` يظهر فقط عندما يكون تحليل LLM مطلوبًا ولكنه غير متاح.
- `metadata.inference_usage` يحتوي على سجل واحد مُنقّح لكل استجابة LLM عندما يكشف المزوّد عن عدّادات الرموز. وهو قائمة فارغة عندما يكون الاستخدام غير متاح؛ ولا يقدّر SkillSpector أبدًا الرموز المفقودة. تتضمن إجماليات المطالبة قراءات وكتابات ذاكرة التخزين المؤقت بحيث يمكن لفصل التسعير النهائي تلك الأقسام بأمان. ويميّز `model_source` نموذج المزوّد المُعرَّف بشكل مستقل عن النموذج المطلوب الدقيق المستخدم عندما تكون هوية الاستجابة غائبة أو غامضة. لا يرسل SkillSpector حاليًا عناصر تحكم ذاكرة التخزين المؤقت للمطالبة من Anthropic، لذا لا يمكن لطلبات الفحص الخاصة به تحديد طبقات كتابة ذاكرة التخزين المؤقت المنفصلة لمدة 5 دقائق أو ساعة واحدة؛ يتم تطبيع حقول الاستجابة الخاصة بـ TTL بشكل دفاعي في عدّاد كتابة ذاكرة التخزين المؤقت الإجمالي.
- راجع [Inference usage telemetry](https://github.com/nvidia/skillspector/blob/HEAD/docs/INFERENCE_USAGE.md) للحصول على السجل الكامل للمصدر، ومحاسبة ذاكرة التخزين المؤقت، والخصوصية، والاستيعاب المغلق عند الفشل، وعقد التسعير النهائي.
- يتم تعريف الشكل الكامل لكل مشكلة بواسطة `Finding.to_dict()` في [models.py](https://github.com/nvidia/skillspector/blob/HEAD/src/skillspector/models.py)؛ اعتمد على الحقول أعلاه وعامل أي حقول إضافية كأفضل جهد.
بالنسبة لأدوات CI/IDE، يُصدر `--format sarif` SARIF 2.1.0.
### تعيين البوابة الموصى به
عند استخدام SkillSpector كبوابة تثبيت، قم بتعيين التوصية إلى إجراء:
| `recommendation` | الإجراء المقترح |
|------------------|------------------|
| `SAFE` | السماح |
| `CAUTION` | مطالبة / تحذير المستخدم |
| `DO_NOT_INSTALL` | الحظر |
يحسب SkillSpector نطاق النتيجة والتوصية؛ ومدى صرامة البوابة (مثل ما إذا كان `CAUTION` يحظر في CI) هو قرار سياسة لأداة التكامل.
## التطوير
### الإعداد
تفترض جميع أهداف `make` أن بيئة افتراضية قد تم إنشاؤها وتفعيلها بالفعل. يستخدم Makefile **uv** إذا كان متاحًا، وإلا **pip**.```bash
# Clone, create venv, activate, install dev dependencies
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector
uv venv .venv && source .venv/bin/activate
# or: python3 -m venv .venv && source .venv/bin/activate
make install-dev
# Run tests
make test
# Run tests with coverage
make test-cov
# Run linting
make lint
# Format code
make format
كيف يعمل
يستخدم SkillSpector خط أنابيب كشف على مرحلتين:
المرحلة 1: التحليل الثابت
- مطابقة أنماط سريعة قائمة على التعبيرات النمطية عبر 11 محللاً ثابتاً
- تحليل سلوكي قائم على AST لكشف الاستدعاءات الخطيرة (exec, eval, subprocess، إلخ.)
- استعلامات حية عن الثغرات عبر OSV.dev للـ CVEs المعروفة في التبعيات
- فحص جميع الملفات المؤهلة للتحليل في المهارة
- استدعاء عالٍ (يلتقط معظم المشكلات)
- دقة معتدلة (بعض النتائج الإيجابية الخاطئة)
يتم الاحتفاظ بتوقيع OpenSSF Model Signing صالح على مستوى الجذر (skill.oms.sig) في
جرد المكونات كنوع oms_signature، ولكن يُستبعد من تحليل المحتوى الثابت وLLM.
تحتوي حزم OMS بالضرورة على حقول حمولة وترميز وتوقيع وشهادة طويلة مشفرة بـ base64؛
يمكن أن تُصنّف فحوصات الكود المشفر العامة تلك الحقول بشكل خاطئ كمحتوى تنفيذي مخفي.
يتحقق المُعرّف من بنية OMS DSSE/in-toto الدنيا؛ ولا يتحقق من التوقيع،
أو سلسلة الشهادات، أو إدخال سجل الشفافية، أو هوية الموقّع. تُفحص ملفات التوقيع غير الصالحة أو غير المعروفة بشكل طبيعي.
المرحلة 2: التحليل الدلالي LLM (اختياري)
- يقيّم السياق والنية
- يصفّي النتائج الإيجابية الخاطئة
- يقدم تفسيرات قابلة للقراءة البشرية
- يحسّن الدقة إلى ~87%
يتضمن موجه LLM حمايات ضد كسر الحماية لمنع المهارات الضارة من التلاعب بالتحليل.
استعلامات الثغرات الحية (SC4)
يستخدم SC4 واجهة برمجة تطبيقات OSV.dev للتحقق من التبعيات مقابل قاعدة بيانات الثغرات مفتوحة المصدر الكاملة — التي تغطي عشرات الآلاف من النشرات عبر PyPI وnpm.
- لا يتطلب مفتاح API — OSV.dev مجاني وغير مصادق عليه.
- استعلامات مجمعة — يتم فحص جميع التبعيات في استدعاء HTTP واحد.
- تراجع تلقائي — إذا كان OSV.dev غير قابل للوصول (معزول عن الشبكة/غير متصل)، يتم استخدام قائمة تراجع مدمجة صغيرة.
- التخزين المؤقت — يتم تخزين النتائج مؤقتاً في الذاكرة لمدة ساعة واحدة لتجنب استدعاءات API المتكررة أثناء الجلسة.
تتطلب الأداة وصول HTTPS صادر إلى api.osv.dev للحصول على بيانات الثغرات الحية. عندما لا يكون ذلك متاحاً، تقتصر النتائج على قائمة التراجع الثابتة.
نموذج الثقة وتسريب البيانات
SkillSpector هو دفاع متعمق، وليس صندوق رمل. اعرف ما يفعله وما لا يفعله قبل الاعتماد عليه:
- لا ينفّذ المهارة المفحوصة أبداً. جميع التحليلات ثابتة (regex، Python AST، YARA) بالإضافة إلى تقييم LLM اختياري لمحتوى الملفات — لا يتم تشغيل كود المهارة أبداً.
- يرسل تحليل LLM محتويات الملفات المؤهلة للتحليل إلى المزود المُهيأ. عند تمكين تحليل LLM (الافتراضي)، يتم إرسال محتويات الملفات إلى نقطة نهاية
SKILLSPECTOR_PROVIDERالنشطة. تُستبعد ملفات توقيع OMS المعروفة. استخدم--no-llmلإبقاء المحتويات محلية (تحليل ثابت فقط). - يرسل SC4 أسماء التبعيات إلى OSV.dev. يتحقق فحص سلسلة التوريد من OSV.dev بأسماء وحزم الإصدارات التي تعلنها المهارة، للبحث عن CVEs المعروفة. هذا أساسي للفحص ويعمل حتى مع
--no-llm. يرسل إحداثيات التبعيات (وليس محتويات الملفات)، ولا يتطلب مفتاح API، ويتراجع إلى قائمة مدمجة عندما يكون OSV.dev غير قابل للوصول. - لا يعزل المضيف. يشير SkillSpector إلى الأنماط الخطرة قبل تثبيت المهارة؛ ولا يحتوي أو يعزل مهارة تختار تثبيتها على أي حال.
القيود
- المحتوى غير الإنجليزي: قد يفوت أنماطاً بلغات أخرى
- الهجمات القائمة على الصور: لا يمكنه تحليل النص في الصور
- الكود المشفر/الثنائي: لا يمكنه تحليل المحتوى المترجم أو المشفر
- سلوك وقت التشغيل: تحليل ثابت فقط، بدون تنفيذ ديناميكي
- SC4 دون اتصال: بدون وصول شبكة إلى
api.osv.dev، يستخدم SC4 قائمة تراجع ثابتة صغيرة
الخلفية البحثية
استناداً إلى بحث من "Agent Skills in the Wild: An Empirical Study of Security Vulnerabilities at Scale" (Liu et al., 2026):
- مجموعة البيانات: 42,447 مهارة من الأسواق الرئيسية
- القابلة للاختراق: 26.1% تحتوي على ثغرة واحدة على الأقل
- عالية الخطورة: 5.2% تُظهر نية ضارة محتملة
- النتيجة الرئيسية: المهارات ذات البرامج النصية القابلة للتنفيذ أكثر عرضة للاختراق بمقدار 2.12 مرة
تكامل Python API```python
from skillspector import graph
Invoke the LangGraph workflow
result = graph.invoke({ "input_path": "/path/to/skill", "output_format": "json", # terminal, json, markdown, or sarif "use_llm": True, # False for static-only analysis })
Access results
print(f"Risk Score: {result['risk_score']}/100") print(f"Severity: {result['risk_severity']}") print(f"Recommendation: {result['risk_recommendation']}")
for finding in result["filtered_findings"]: print(f"[{finding['severity']}] {finding['rule_id']}: {finding['message']}")
## الترخيص
رخصة Apache 2.0 - راجع [LICENSE](https://github.com/nvidia/skillspector/blob/HEAD/LICENSE) للحصول على التفاصيل.
## المساهمة
المساهمات مرحب بها! يرجى قراءة إرشادات المساهمة الخاصة بنا وتقديم طلبات السحب.
## الدعم
- **القضايا**: [GitHub Issues](https://github.com/NVIDIA/skillspector/issues)