
SkillSpector v2.11.1
AI एजेंट स्किल्स के लिए सुरक्षा स्कैनर। इन्हें इंस्टॉल करने से पहले Claude Code, Codex और MCP स्किल्स में कमजोरियाँ, दुर्भावनापूर्ण पैटर्न, सुरक्षा जोखिम, प्रॉम्प्ट इंजेक्शन, डेटा एक्सफिल्ट्रेशन और सप्लाई-चेन जोखिम का पता लगाएँ।
SkillSpector
AI एजेंट स्किल्स के लिए सुरक्षा स्कैनर। एजेंट स्किल्स इंस्टॉल करने से पहले कमजोरियों, दुर्भावनापूर्ण पैटर्न और सुरक्षा जोखिमों का पता लगाएं।
अवलोकन
AI एजेंट स्किल्स (जिनका उपयोग Claude Code, Codex CLI, Gemini CLI आदि करते हैं) अंतर्निहित विश्वास और न्यूनतम जांच के साथ निष्पादित होती हैं। शोध से पता चलता है कि 26.1% स्किल्स में कमजोरियां होती हैं और 5.2% में संभावित दुर्भावनापूर्ण इरादा होता है।
SkillSpector आपको इस प्रश्न का उत्तर देने में मदद करता है: "क्या यह स्किल इंस्टॉल करना सुरक्षित है?"
SkillSpector NVIDIA Verified Skills पाइपलाइन का हिस्सा है, जो प्रकाशन से पहले एजेंट स्किल्स को स्कैन, मूल्यांकन और साइन करती है। पास होने वाली स्किल्स NVIDIA स्किल्स कैटलॉग में प्रकाशित की जाती हैं।
दस्तावेज़ीकरण
- इंस्टॉलेशन से पहले एजेंट स्किल्स स्कैन करें — होस्टेड गाइड: कब स्कैन करें, रिपोर्ट कैसे पढ़ें, और इंस्टॉल को कैसे गेट करें।
- विकास गाइड — आर्किटेक्चर, पैकेज लेआउट, और एनालाइज़र पाइपलाइन का विस्तार कैसे करें।
- विश्लेषण संसाधन सीमाएं — फेल-क्लोज़्ड बंडल, पार्सर, नेस्टेड-आर्टिफैक्ट, लेजर और फाइंडिंग सीमाएं।
- Pi एक्सटेंशन — एजेंट सत्रों के अंदर से स्किल्स स्कैन करने के लिए SkillSpector को Pi टूल के रूप में इंस्टॉल करें।
विशेषताएं
- मल्टी-फॉर्मेट इनपुट: Git रिपॉजिटरी, URL, zip फाइलें, निर्देशिकाएं या एकल फाइलें स्कैन करें
- 17 श्रेणियों में 71 कमजोरी पैटर्न: प्रॉम्प्ट इंजेक्शन, डेटा एक्सफिल्ट्रेशन, प्रिविलेज एस्केलेशन, सप्लाई चेन, अत्यधिक एजेंसी, आउटपुट हैंडलिंग, सिस्टम प्रॉम्प्ट लीकेज, मेमोरी पॉइज़निंग, टूल दुरुपयोग, रॉग एजेंट, एंटी-रिफ्यूज़ल, ट्रिगर दुरुपयोग, खतरनाक कोड (AST), टेंट ट्रैकिंग, YARA सिग्नेचर, MCP न्यूनतम विशेषाधिकार, और MCP टूल पॉइज़निंग
- दो-चरणीय विश्लेषण: तेज़ स्टैटिक विश्लेषण + वैकल्पिक LLM सिमेंटिक मूल्यांकन
- लाइव कमजोरी लुकअप: SC4 वास्तविक समय CVE डेटा के लिए OSV.dev से क्वेरी करता है, स्वचालित ऑफ़लाइन फॉलबैक के साथ
- कई आउटपुट फॉर्मेट: टर्मिनल, JSON, Markdown और SARIF रिपोर्ट
- जोखिम स्कोरिंग: गंभीरता लेबल और स्पष्ट अनुशंसाओं के साथ 0-100 स्कोर
- बेसलाइन / फॉल्स-पॉज़िटिव दमन: ग्लोब-रूल या फिंगरप्रिंट बेसलाइन के माध्यम से ज्ञात फाइंडिंग्स स्वीकार करें ताकि पुनः-स्कैन केवल नई समस्याएं दिखाएं (दस्तावेज़)
त्वरित प्रारंभ
इंस्टॉलेशन
ओपन-सोर्स सॉफ्टवेयर सूचना: यह प्रोजेक्ट अतिरिक्त तृतीय-पक्ष ओपन सोर्स सॉफ्टवेयर प्रोजेक्ट्स डाउनलोड और इंस्टॉल करेगा। उपयोग से पहले इन ओपन सोर्स प्रोजेक्ट्स के लाइसेंस शर्तों की समीक्षा करें।
पहले एक वर्चुअल एनवायरनमेंट बनाएं और सक्रिय करें (सभी 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'
स्रोत से:```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/main/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
मैं देख रहा हूँ कि आपने इनपुट प्रदान नहीं किया है। कृपया वह Markdown सामग्री भेजें जिसे आप अनुवाद करना चाहते हैं, और मैं इसे हिंदी में अनुवाद कर दूंगा।```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 बमों के प्रभाव को सीमित किया जा सके:
- **प्रति-इन्जेस्ट सीमा**: `INGEST_MAX_BYTES` (100 MiB) — स्ट्रीम किए गए URL डाउनलोड, zip संग्रहों का कुल असम्पीडित आकार, और Git रिपॉजिटरी के क्लोन-पश्चात डिस्क उपयोग पर लागू होती है।
- **Zip सदस्य सीमा**: `INGEST_MAX_ZIP_MEMBERS` (10,000) — एकल zip में प्रविष्टियों की संख्या को सीमित करती है।
ध्यान दें कि प्रति-फ़ाइल 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 स्कैन के लिए, [`contrib/batch_scan/.env.example`](https://github.com/nvidia/skillspector/blob/main/contrib/batch_scan/.env.example) के अनुसार कई API कुंजियाँ कॉन्फ़िगर करें — यह पूल थ्रूपुट और लचीलापन बढ़ाता है, बशर्ते कुंजियाँ खाता-स्तरीय दर सीमा साझा न करें।
विवरण के लिए [contrib गाइड](https://github.com/nvidia/skillspector/blob/main/contrib/batch_scan/docs) देखें।
> **LLM समर्थन पर नोट:** डिफ़ॉल्ट कॉन्फ़िगरेशन DeepSeek को सबसे सस्ते सार्वजनिक विकल्प के रूप में लक्षित करता है। DeepSeek-Chat के [बंद होने की उम्मीद है](https://api-docs.deepseek.com/), और योगदानकर्ता के पास स्थानीय मॉडलों के विरुद्ध परीक्षण करने के लिए हार्डवेयर नहीं है। बैच स्कैनर का मूल रूप से OpenAI-संगत एंडपॉइंट्स के साथ परीक्षण किया गया था — DeepSeek के संरचित-आउटपुट समर्थन की कमी के कारण मैन्युअल JSON-पार्सिंग पैच की आवश्यकता पड़ी। यदि आप अधिक सार्वभौमिक बैकएंड (Ollama, vLLM, या कोई अन्य प्रदाता) में योगदान कर सकते हैं, तो PR का स्वागत है।
### गलत सकारात्मक परिणामों को दबाना (बेसलाइन)
ज्ञात/स्वीकृत निष्कर्षों को दबाएँ ताकि जोखिम स्कोर केवल अन-ट्राइज्ड समस्याओं को प्रतिबिंबित करे और पुनः-स्कैन केवल *नए* निष्कर्षों को सतह पर लाएँ। पूर्ण संदर्भ के लिए [सप्रेशन गाइड](https://github.com/nvidia/skillspector/blob/main/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) | क्रेडेंशियल env var | एंडपॉइंट | डिफ़ॉल्ट मॉडल |
|---|---|---|---|
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 — boto3 के माध्यम से SigV4 | 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 transport FastMCP का वर्तमान मार्ग है स्थानीय CLI एजेंटों के लिए, और issue #199 में रिपोर्ट किया गया initialize hang अभी भी वहाँ लागू होता है।
सर्वर एक एकल टूल प्रदान करता है:
scan_skill(target, use_llm=true, output_format="json")— एक Git URL, file URL,.zip,.mdफ़ाइल, या directory को स्कैन करता है और एक संरचित verdict लौटाता है:risk_score(0-100),severity,recommendation,safe_to_install, औरfindings। यहllm_used/scan_modeभी रिपोर्ट करता है ताकि static-only स्कैन से कम स्कोर को कभी भी पूर्ण स्कैन समझने की गलती न हो।
इसे Claude Code के साथ इस प्रकार पंजीकृत करें:```bash claude mcp add skillspector -- skillspector mcp
> **सुरक्षा — HTTP ट्रांसपोर्ट ट्रस्ट मॉडल**
>
> HTTP ट्रांसपोर्ट **बिना प्रमाणीकरण के** भेजा जाता है। कोई भी कॉलर जो
> पोर्ट तक पहुँच सकता है, `scan_skill` को आमंत्रित कर सकता है। stdio या `127.0.0.1` पर यह
> CLI के समान ट्रस्ट सीमा है। यदि आप किसी रूटेबल इंटरफ़ेस से बाइंड करते हैं:
>
> - सर्वर को बाहरी रूप से एक्सपोज़ करने से पहले एक प्रमाणीकरण रिवर्स प्रॉक्सी (जैसे nginx + mTLS)
> के पीछे रखें।
> - स्थानीय पथ और `file://` URL **स्वचालित रूप से अस्वीकार** किए जाते हैं HTTP पर, ताकि
> अनप्रमाणित कॉलर मनमाने होस्ट फ़ाइलें न पढ़ सकें। केवल
> दूरस्थ Git और `.zip` URL स्वीकार किए जाते हैं।
## भेद्यता पैटर्न
SkillSpector 17 श्रेणियों में **71 भेद्यता पैटर्न** का पता लगाता है:
### प्रॉम्प्ट इंजेक्शन (6 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| P1 | निर्देश ओवरराइड | HIGH | सुरक्षा बाधाओं को अनदेखा करने के निर्देश |
| P2 | छिपे निर्देश | HIGH | टिप्पणियों/अदृश्य टेक्स्ट में दुर्भावनापूर्ण निर्देश |
| P3 | डेटा निष्कासन कमांड | HIGH | संदर्भ को बाहरी रूप से प्रसारित करने के निर्देश |
| P4 | व्यवहार हेरफेर | MEDIUM | एजेंट के निर्णयों को बदलने वाले सूक्ष्म निर्देश |
| P5 | हानिकारक सामग्री | CRITICAL | ऐसे निर्देश जो शारीरिक हानि पहुँचा सकते हैं |
| P9 | व्हाइटस्पेस पैडिंग | MEDIUM | दृश्य क्षेत्र के नीचे/बगल में निर्देश छिपाने वाली बड़ी व्हाइटस्पेस पैडिंग |
### अस्वीकृति-विरोधी (3 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| AR1 | अस्वीकृति दमन | HIGH | कभी मना न करने या हमेशा अनुपालन करने के निर्देश (जैसे "कभी मना न करें", "हमेशा अनुपालन करें") |
| AR2 | अस्वीकरण दमन | HIGH | चेतावनियाँ, अस्वीकरण, या नैतिक टिप्पणी छोड़ने के निर्देश (जैसे "कोई अस्वीकरण नहीं", "नैतिकता न पढ़ें") |
| AR3 | सुरक्षा नीति निरस्तीकरण | HIGH | गार्डरेल को निरस्त करने वाला जेलब्रेक फ्रेमिंग (जैसे "आप पर कोई प्रतिबंध नहीं है", "अपने दिशानिर्देश अनदेखा करें", "अभी कुछ भी करें") |
### डेटा निष्कासन (4 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| E1 | बाहरी प्रसारण | MEDIUM | बाहरी URL पर डेटा भेजना |
| E2 | एनवी वेरिएबल संग्रह | HIGH | रहस्य एकत्र करने के लिए पर्यावरण डेटा की गणना, प्रतिलिपि, या खोज |
| E3 | फ़ाइल सिस्टम गणना | MEDIUM | संवेदनशील फ़ाइलों के लिए निर्देशिकाओं की स्कैनिंग |
| E4 | संदर्भ रिसाव | HIGH | बाहरी रूप से वार्तालाप संदर्भ प्रसारित करना |
### विशेषाधिकार वृद्धि (3 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| PE1 | अत्यधिक अनुमतियाँ | LOW | बताई गई कार्यक्षमता से परे पहुँच का अनुरोध |
| PE2 | Sudo/Root निष्पादन | MEDIUM | उन्नत सिस्टम विशेषाधिकारों का आह्वान |
| PE3 | क्रेडेंशियल पहुँच | HIGH | SSH कुंजियाँ, टोकन, पासवर्ड पढ़ना |
### आपूर्ति श्रृंखला (9+ पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| SC1 | अनपिन की गई निर्भरताएँ | LOW | पैकेजों पर कोई संस्करण बाधाएँ नहीं |
| SC2 | बाहरी स्क्रिप्ट लाना | HIGH | curl \| bash और दूरस्थ कोड निष्पादन |
| SC3 | अस्पष्ट कोड | HIGH | Base64/hex एन्कोडेड निष्पादन |
| SC4 | ज्ञात कमजोर निर्भरताएँ | HIGH | ज्ञात CVE वाली निर्भरताएँ (लाइव OSV.dev लुकअप) |
| SC5 | परित्यक्त निर्भरताएँ | MEDIUM | सुरक्षा अपडेट के बिना अनुरक्षित पैकेज |
| SC6 | टाइपोस्क्वाटिंग | HIGH | लोकप्रिय पैकेजों के समान पैकेज नाम |
| SC8 | शिप की गई Python बाइटकोड | HIGH | `__pycache__` / `.pyc` मौजूद (डिस्कवरी छोड़ती है; दुर्भावनापूर्ण बाइटकोड बायपास) |
| SC9 | छिपा हुआ निष्पादन योग्य आर्टिफैक्ट | HIGH | दस्तावेज़ कंटेनर या छिपे/छद्म आर्टिफैक्ट में नेस्टेड निष्पादन योग्य |
### अत्यधिक एजेंसी (5 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| EA1 | अप्रतिबंधित टूल पहुँच | HIGH | बिना बाधाओं के अप्रतिबंधित टूल पहुँच |
| EA2 | स्वायत्त निर्णय लेना | HIGH | मानव-इन-द-लूप के बिना उच्च-प्रभाव वाले निर्णय |
| EA3 | स्कोप क्रीप | MEDIUM | बताए गए उद्देश्य से परे विस्तारित क्षमताएँ |
| EA4 | असीमित संसाधन पहुँच | MEDIUM | संसाधन खपत पर कोई दर सीमा या कोटा नहीं |
| EA5 | बाहरी मॉडल या प्रदाता चयन | MEDIUM/HIGH | मॉडल/प्रदाता पिन या कोडिंग-CLI शेल-आउट जो बिलिंग खाते बदल सकते हैं |
### आउटपुट हैंडलिंग (3 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| OH1 | अमान्य आउटपुट इंजेक्शन | HIGH | बिना सैनिटाइज़ेशन के उपयोग किया गया मॉडल आउटपुट |
| OH2 | क्रॉस-संदर्भ आउटपुट | MEDIUM | बिना सत्यापन के ट्रस्ट सीमाओं के पार प्रवाहित आउटपुट |
| OH3 | असीमित आउटपुट | MEDIUM | आउटपुट आकार या जनरेशन दर पर कोई सीमा नहीं |
### सिस्टम प्रॉम्प्ट रिसाव (3 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| P6 | प्रत्यक्ष रिसाव | HIGH | सिस्टम प्रॉम्प्ट या आंतरिक नियमों को उजागर करने वाले निर्देश |
| P7 | अप्रत्यक्ष निष्कर्षण | MEDIUM | पुनर्लेखन, अनुवाद, या साइड-चैनलों के माध्यम से निष्कर्षण |
| P8 | टूल-आधारित निष्कासन | HIGH | फ़ाइल लेखन या नेटवर्क अनुरोधों के माध्यम से सिस्टम प्रॉम्प्ट का निष्कासन |
### मेमोरी विषाक्तता (3 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| MP1 | स्थायी संदर्भ इंजेक्शन | HIGH | इंटरैक्शन के पार बने रहने के लिए डिज़ाइन की गई सामग्री |
| MP2 | संदर्भ विंडो भरना | MEDIUM | सुरक्षा बाधाओं को विस्थापित करने वाली फिलर सामग्री |
| MP3 | मेमोरी हेरफेर | HIGH | एजेंट मेमोरी या संग्रहीत स्थिति के साथ छेड़छाड़ |
### टूल दुरुपयोग (3 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| TM1 | टूल पैरामीटर दुरुपयोग | HIGH | अनपेक्षित व्यवहार के लिए तैयार पैरामीटर (shell=True, --force) |
| TM2 | चेनिंग दुरुपयोग | HIGH | व्यक्तिगत सुरक्षा जाँचों को बायपास करने वाली टूल श्रृंखलाएँ |
| TM3 | असुरक्षित डिफ़ॉल्ट | MEDIUM | अत्यधिक अनुमेय डिफ़ॉल्ट (अक्षम TLS, कोई प्रमाणीकरण नहीं) |
### दुष्ट एजेंट (2 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| RA1 | स्व-संशोधन | CRITICAL | रनटाइम पर अपने कोड या कॉन्फ़िगरेशन को संशोधित करना |
| RA2 | सत्र दृढ़ता | HIGH | क्रॉन जॉब या स्टार्टअप स्क्रिप्ट के माध्यम से अनधिकृत दृढ़ता |
### ट्रिगर दुरुपयोग (3 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| TR1 | अत्यधिक व्यापक ट्रिगर | MEDIUM | सामान्य शब्दों से मेल खाने वाले ट्रिगर पैटर्न |
| TR2 | छाया कमांड ट्रिगर | HIGH | बिल्ट-इन कमांड या अन्य स्किल्स को छाया देने वाले ट्रिगर |
| TR3 | कीवर्ड बेटिंग ट्रिगर | MEDIUM | सक्रियण को अधिकतम करने के लिए डिज़ाइन किए गए सामान्य ट्रिगर |
### व्यवहारिक AST (9 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| AST1 | exec() कॉल | CRITICAL | मनमाना कोड निष्पादन सक्षम करने वाला प्रत्यक्ष exec() |
| AST2 | eval() कॉल | HIGH | मनमाने एक्सप्रेशन का मूल्यांकन करने वाला प्रत्यक्ष eval() |
| AST3 | डायनामिक इम्पोर्ट | HIGH | रनटाइम पर मनमाने मॉड्यूल लोड करने वाला \_\_import\_\_() |
| AST4 | subprocess कॉल | HIGH | subprocess के माध्यम से बाहरी कमांड निष्पादन |
| AST5 | os.system / exec-परिवार | HIGH | os मॉड्यूल के माध्यम से शेल कमांड |
| AST6 | compile() कॉल | MEDIUM | स्ट्रिंग्स से कोड ऑब्जेक्ट निर्माण |
| AST7 | डायनामिक getattr() | MEDIUM | गैर-शाब्दिक नामों के साथ मनमाना विशेषता पहुँच |
| AST8 | खतरनाक निष्पादन श्रृंखला | CRITICAL | डायनामिक स्रोत (नेटवर्क, एन्कोडेड डेटा) के साथ संयुक्त exec/eval |
| AST9 | रिफ्लेक्टिव getattr() सिंक | HIGH | `getattr(os,'system')` / `getattr(builtins,'exec')` के माध्यम से रिफ्लेक्टिव exec जो AST1/AST5 को बायपास करता है |
### टेंट ट्रैकिंग (5 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| TT1 | प्रत्यक्ष टेंट प्रवाह | HIGH | डेटा बिना सैनिटाइज़ेशन के स्रोत से सिंक तक सीधे प्रवाहित होता है |
| TT2 | वेरिएबल-मध्यस्थ टेंट प्रवाह | MEDIUM | डेटा मध्यवर्ती वेरिएबल्स के माध्यम से स्रोत से सिंक तक प्रवाहित होता है |
| TT3 | क्रेडेंशियल निष्कासन श्रृंखला | CRITICAL | क्रेडेंशियल (एनवी वेरिएबल्स, रहस्य) नेटवर्क आउटपुट सिंक तक प्रवाहित होते हैं |
| TT4 | नेटवर्क निष्कासन के लिए फ़ाइल पठन | HIGH | फ़ाइल सामग्री नेटवर्क आउटपुट सिंक तक प्रवाहित होती है |
| TT5 | कोड निष्पादन के लिए बाहरी इनपुट | CRITICAL | नेटवर्क या उपयोगकर्ता इनपुट exec/eval/subprocess सिंक तक प्रवाहित होता है |
### YARA सिग्नेचर (4 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| YR1 | मैलवेयर मैच | CRITICAL | ज्ञात मैलवेयर सिग्नेचर के लिए YARA नियम मैच |
| YR2 | वेबशेल मैच | CRITICAL | वेबशेल पैटर्न के लिए YARA नियम मैच |
| YR3 | क्रिप्टोमाइनर मैच | HIGH | क्रिप्टो माइनिंग संकेतकों के लिए YARA नियम मैच |
| YR4 | हैक टूल / एक्सप्लॉइट मैच | HIGH | हैक टूल या एक्सप्लॉइट कोड के लिए YARA नियम मैच |
### MCP न्यूनतम विशेषाधिकार (4 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| LP1 | अघोषित क्षमता | HIGH | कोड घोषित अनुमतियों में सूचीबद्ध नहीं की गई क्षमताओं का उपयोग करता है |
| LP2 | वाइल्डकार्ड अनुमति | MEDIUM | अनुमति सूची में वाइल्डकार्ड (\*, all, full, any) शामिल हैं |
| LP3 | लापता अनुमति घोषणा | MEDIUM | कोई अनुमति फ़ील्ड नहीं लेकिन कोड में पता लगाने योग्य क्षमताएँ हैं |
| LP4 | अत्यधिक घोषित अनुमति | LOW | अनुमति घोषित लेकिन कोई संगत कोड क्षमता नहीं मिली |
### MCP टूल विषाक्तता (4 पैटर्न)
| ID | पैटर्न | गंभीरता | विवरण |
|----|---------|----------|-------------|
| TP1 | छिपे निर्देश | HIGH | मेटाडेटा में छिपे निर्देश (HTML टिप्पणियाँ, शून्य-चौड़ाई वर्ण, base64, डेटा URI) |
| TP2 | यूनिकोड धोखा | HIGH | टूल मेटाडेटा में होमोग्लिफ़, RTL ओवरराइड, मिश्रित-स्क्रिप्ट पहचानकर्ता |
| TP3 | पैरामीटर विवरण इंजेक्शन | MEDIUM | पैरामीटर परिभाषाओं में इंजेक्शन पैटर्न (ओवरराइड, सिस्टम टोकन, दुर्भावनापूर्ण डिफ़ॉल्ट) |
| TP4 | विवरण-व्यवहार बेमेल | MEDIUM | घोषित टूल विवरण वास्तविक कोड व्यवहार से मेल नहीं खाता (LLM-संचालित) |
सभी पता लगाए गए पैटर्न ऊपर दी गई तालिकाओं में सूचीबद्ध हैं।
## जोखिम स्कोरिंग
### स्कोर गणना
- **CRITICAL मुद्दे**: +50 अंक
- **HIGH मुद्दे**: +25 अंक
- **MEDIUM मुद्दे**: +10 अंक
- **LOW मुद्दे**: +5 अंक
- **निष्पादन योग्य स्क्रिप्ट**: 1.3x गुणक
### गंभीरता स्तर
| स्कोर | गंभीरता | अनुशंसा |
|-------|----------|----------------|
| 0-20 | LOW | SAFE |
| 21-50 | MEDIUM | CAUTION |
| 51-80 | HIGH | DO NOT INSTALL |
| 81-100 | CRITICAL | DO NOT INSTALL |
## उदाहरण आउटपुट
### टर्मिनल आउटपुट```
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)। यह क्रेडेंशियल वॉटरफॉल में टियर-2 फ़ॉलबैक के रूप में भी कार्य करता है जब सक्रिय प्रदाता कोई क्रेडेंशियल नहीं लौटाता। | LLM विश्लेषण के लिए आवश्यक जब SKILLSPECTOR_PROVIDER=openai |
OPENAI_BASE_URL | OpenAI एंडपॉइंट को ओवरराइड करें (जैसे Ollama की ओर इंगित करें)। | वैकल्पिक |
SKILLSPECTOR_REASONING_EFFORT | वैकल्पिक प्रदाता- और मॉडल-निर्भर रीज़निंग-एफ़र्ट सेटिंग। गैर-रिक्त मान ट्रिम किए जाते हैं और अपरिवर्तित पास किए जाते हैं; अनसेट या रिक्त प्रदाता-डिफ़ॉल्ट व्यवहार को संरक्षित करता है। | वैकल्पिक |
SKILLSPECTOR_OUTPUT_LANGUAGE | मानव-पठनीय LLM निष्कर्ष पाठ जैसे संदेश, स्पष्टीकरण और उपचार के लिए छोटा, एक-पंक्ति भाषा लेबल (अक्षर, संख्याएँ, स्थान, _, या -; अधिकतम 64 वर्ण)। नियम ID, गंभीरता मान, पथ, कोड और अन्य मशीन-पठनीय मान अपरिवर्तित रहते हैं। अनसेट, रिक्त, या अमान्य मान डिफ़ॉल्ट आउटपुट भाषा को संरक्षित करते हैं। | वैकल्पिक |
SKILLSPECTOR_TEMPERATURE | होस्टेड प्रदाताओं के लिए 0 से 1 तक वैकल्पिक सैंपलिंग तापमान। अनसेट या रिक्त प्रदाता डिफ़ॉल्ट को संरक्षित करता है। कम मान रन-टू-रन भिन्नता को कम कर सकते हैं लेकिन समान आउटपुट की गारंटी नहीं देते। | वैकल्पिक |
SKILLSPECTOR_SEED | OpenAI-संगत और Azure OpenAI प्रदाताओं के लिए वैकल्पिक पूर्णांक सैंपलिंग सीड। अन्य होस्टेड प्रदाता और CLI प्रदाता इसे प्राप्त नहीं करते। प्रदाता समर्थन मॉडल-निर्भर रहता है। | वैकल्पिक |
ANTHROPIC_API_KEY | Anthropic प्रदाता के लिए क्रेडेंशियल (SKILLSPECTOR_PROVIDER=anthropic)। | LLM विश्लेषण के लिए आवश्यक जब SKILLSPECTOR_PROVIDER=anthropic |
ANTHROPIC_BASE_URL | मूल Anthropic एंडपॉइंट को ओवरराइड करें (डिफ़ॉल्ट: https://api.anthropic.com)। | वैकल्पिक |
ANTHROPIC_PROXY_ENDPOINT_URL | Anthropic प्रॉक्सी प्रदाता के लिए पूर्ण एंडपॉइंट URL (Vertex-शैली raw-predict)। | आवश्यक जब SKILLSPECTOR_PROVIDER=anthropic_proxy |
ANTHROPIC_PROXY_API_KEY | Anthropic प्रॉक्सी प्रदाता के लिए Bearer टोकन। | आवश्यक जब SKILLSPECTOR_PROVIDER=anthropic_proxy |
ANTHROPIC_PROXY_API_VERSION | अनुरोध बॉडी में भेजा गया anthropic_version मान (डिफ़ॉल्ट: vertex-2023-10-16)। | वैकल्पिक |
AWS_PROFILE | Bedrock प्रदाता के लिए नामित AWS प्रोफ़ाइल — boto3 के माध्यम से SigV4 से प्रमाणित होता है। अनसेट होने पर, मानक boto3 क्रेडेंशियल श्रृंखला (env vars, instance metadata, 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 पाइपलाइन, इंस्टॉल गेट्स, एडिटर इंटीग्रेशन) द्वारा संचालित करने के लिए बनाया गया है। इसका exit code और JSON आउटपुट एक स्थिर अनुबंध (contract) है।
### Exit codes
`skillspector scan` निम्नलिखित के साथ बाहर निकलता है:
| Code | अर्थ |
|------|---------|
| `0` | स्कैन पूर्ण, `risk_score` ≤ 50 (अनुशंसा `SAFE` या `CAUTION`) |
| `1` | स्कैन पूर्ण, `risk_score` > 50 (अनुशंसा `DO_NOT_INSTALL`) |
| `2` | त्रुटि (गलत इनपुट, अपठनीय स्रोत, आंतरिक विफलता) |
> Exit code `SAFE` और `CAUTION` को `0` में समेट देता है। उन पर अलग-अलग कार्रवाई करने के लिए (जैसे `CAUTION` पर *चेतावनी* दें लेकिन `DO_NOT_INSTALL` पर *ब्लॉक* करें), exit code पर भरोसा करने के बजाय JSON आउटपुट से `recommendation` फ़ील्ड पढ़ें।
### मशीन-पठनीय आउटपुट
`--format json` एक JSON रिपोर्ट उत्पन्न करता है; बिना `--output`/`-o` के इसे stdout पर लिखा जाता है:```bash
skillspector scan ./my-skill/ --format json
The top-level shape is (this example shows a full LLM-backed scan; with --no-llm, metadata.llm_requested is 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/main/docs/INFERENCE_USAGE.md) देखें।
- प्रति-मुद्दे का पूर्ण आकार [models.py](https://github.com/nvidia/skillspector/blob/main/src/skillspector/models.py) में `Finding.to_dict()` द्वारा परिभाषित किया गया है; ऊपर दिए गए फ़ील्ड पर भरोसा करें और किसी भी अतिरिक्त फ़ील्ड को सर्वोत्तम-प्रयास के रूप में मानें।
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-आधारित पैटर्न मिलान
- खतरनाक कॉल (exec, eval, subprocess, आदि) का पता लगाने वाला AST-आधारित व्यवहार विश्लेषण
- निर्भरताओं में ज्ञात CVE के लिए OSV.dev के माध्यम से लाइव भेद्यता खोज
- स्किल में सभी विश्लेषक-योग्य फ़ाइलों की स्कैनिंग
- उच्च रिकॉल (अधिकांश समस्याओं को पकड़ता है)
- मध्यम परिशुद्धता (कुछ गलत सकारात्मक)
एक मान्य, रूट-स्तरीय OpenSSF मॉडल साइनिंग हस्ताक्षर (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 अप्राप्य है (एयर-गैप्ड/ऑफ़लाइन), तो एक छोटी अंतर्निहित फ़ॉलबैक सूची का उपयोग किया जाता है।
- कैशिंग — सत्र के दौरान अनावश्यक API कॉल से बचने के लिए परिणाम 1 घंटे के लिए मेमोरी में कैश किए जाते हैं।
लाइव भेद्यता डेटा के लिए टूल को api.osv.dev तक आउटबाउंड HTTPS एक्सेस की आवश्यकता होती है। जब वह उपलब्ध नहीं होता है, तो निष्कर्ष स्थैतिक फ़ॉलबैक सूची तक सीमित होते हैं।
विश्वास मॉडल और डेटा बहिर्गमन
SkillSpector गहराई में रक्षा है, सैंडबॉक्स नहीं। इस पर भरोसा करने से पहले जानें कि यह क्या करता है और क्या नहीं करता:
- यह स्कैन की गई स्किल को कभी निष्पादित नहीं करता। सभी विश्लेषण स्थैतिक (regex, Python AST, YARA) हैं साथ ही फ़ाइल सामग्री का वैकल्पिक LLM मूल्यांकन — स्किल का कोड कभी नहीं चलाया जाता।
- LLM विश्लेषण विश्लेषक-योग्य फ़ाइल सामग्री को कॉन्फ़िगर किए गए प्रदाता को भेजता है। जब LLM विश्लेषण सक्षम होता है (डिफ़ॉल्ट), फ़ाइल सामग्री सक्रिय
SKILLSPECTOR_PROVIDERएंडपॉइंट को भेजी जाती है। मान्यता प्राप्त OMS हस्ताक्षर फ़ाइलें बाहर रखी जाती हैं। सामग्री को स्थानीय रखने के लिए--no-llmका उपयोग करें (केवल स्थैतिक विश्लेषण)। - SC4 निर्भरता नाम OSV.dev को भेजता है। आपूर्ति-श्रृंखला जाँच ज्ञात CVE खोजने के लिए स्किल द्वारा घोषित पैकेज नामों और संस्करणों के साथ OSV.dev पर क्वेरी करती है। यह जाँच के लिए मौलिक है और
--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/main/LICENSE) देखें।
## योगदान
योगदान का स्वागत है! कृपया हमारे योगदान दिशानिर्देश पढ़ें और पुल रिक्वेस्ट सबमिट करें।
## सहायता
- **समस्याएँ**: [GitHub Issues](https://github.com/NVIDIA/skillspector/issues)