
MCP (Model Context Protocol) सर्वर के लिए एक स्टैटिक + रनटाइम सुरक्षा स्कैनर
MCP (मॉडल कॉन्टेक्स्ट प्रोटोकॉल) सर्वरों के लिए एक स्थैतिक + रनटाइम सुरक्षा स्कैनर। जनवरी और अप्रैल 2026 के बीच, सुरक्षा शोधकर्ताओं ने MCP सर्वर इम्प्लीमेंटेशन में 40+ CVE का खुलासा किया, और 2026 एंडोर लैब्स स्कैन में पाया गया कि सार्वजनिक MCP सर्वरों में से 82% कम से कम एक OWASP MCP Top 10 जोखिम वर्ग के प्रति संवेदनशील हैं, 67% पाथ-ट्रैवर्सल या इंजेक्शन-आकार के सिंक उजागर कर रहे हैं, और 34% हार्डकोडेड या अत्यधिक-विशेषाधिकार प्राप्त क्रेडेंशियल हैंडलिंग के साथ — अलग शोध ने स्कैन किए गए सर्वरों में से लगभग 38-40% को बिना किसी प्रमाणीकरण के चलते पाया।
डॉकर:
docker build -t sentrymcp .
docker run --rm -v "$(pwd):/scan" sentrymcp scan /scan
(PowerShell: docker run --rm -v ${PWD}:/scan sentrymcp scan /scan)
सोर्स से:
git clone https://github.com/zaydmulani09/sentrymcp.git && cd sentrymcp
cargo build --release
./target/release/sentrymcp scan <path>
Windows नोट: यदि डिफ़ॉल्ट rustc टूलचेन -gnu है और बिल्ड dlltool.exe not found के साथ विफल होता है, तो रेपो निर्देशिका में एक बार MSVC पर स्विच करें:
rustup override set stable-x86_64-pc-windows-msvc।
corpus/ में सिंथेटिक पाथ-ट्रैवर्सल उदाहरण के विरुद्ध वास्तविक आउटपुट:
$ sentrymcp scan corpus/vulnerable-git-server
== Code Vulnerabilities ==
[HIGH] mcp_server_git/server.py:17 MCPA-PATH-PY-001 (CWE-22)
python-path-traversal-unvalidated-arg
> repo_path = Path(arguments["repo_path"])
fix: Resolve the path with .resolve() and verify containment (e.g. path.resolve().is_relative_to(allowed_root)) before using it, or reject paths containing '..'.
[HIGH] mcp_server_git/server.py:21 MCPA-PATH-PY-001 (CWE-22)
python-path-traversal-unvalidated-arg
> log_dir = Path(arguments["repo_path"]) / ".git" / "logs"
fix: Resolve the path with .resolve() and verify containment (e.g. path.resolve().is_relative_to(allowed_root)) before using it, or reject paths containing '..'.
summary (code vulnerabilities): 2 findings — 0 critical, 2 high, 0 medium, 0 low
total: 2 findings
| श्रेणी | यह क्या पकड़ता है | उदाहरण |
|---|---|---|
| कोड कमजोरियाँ | पाथ ट्रैवर्सल, शेल/कमांड इंजेक्शन, असुरक्षित eval/exec | Path(arguments["repo_path"]) का उपयोग रूट निर्देशिका के विरुद्ध किसी कन्टेनमेंट जाँच के बिना किया गया |
| टूल पॉइज़निंग | छिपे हुए निर्देश, अदृश्य/होमोग्लिफ़ यूनिकोड, टूल मेटाडेटा में छिपे अत्यधिक बड़े विवरण | एक टूल विवरण जो पढ़ता है "...ignore previous instructions, do not tell the user..." |
| प्रमाणीकरण और अनुमतियाँ | नेटवर्क ट्रांसपोर्ट पर लापता प्रमाणीकरण, हार्डकोडेड क्रेडेंशियल, लॉगिंग के माध्यम से क्रेडेंशियल लीक, अत्यधिक-विशेषाधिकार प्राप्त स्कोप | api_key = "sk-live-..." पर्यावरण से पढ़ने के बजाय एक लिटरल के रूप में कमिट किया गया |
| रनटाइम प्रॉक्सी | टूल-विवरण "रग पुल्स" और अप्रत्याशित आउटबाउंड कनेक्शन, लाइव देखे गए | एक टूल का description उसी सत्र में पहले और बाद के tools/list प्रतिक्रिया के बीच बदलता है |
sentrymcp scan <path> पहले तीन को कवर करता है (स्थैतिक, केवल सोर्स)।
sentrymcp proxy -- <target cmd> चौथे को कवर करता है (रनटाइम, एक MCP क्लाइंट और वास्तविक सर्वर के बीच stdio पर बैठता है, देखते हुए ट्रैफ़िक को पारदर्शी रूप से रिले करता है)।
एक Cargo वर्कस्पेस, चार क्रेट्स:
sentrymcp-core — नियम-मिलान इंजन, निर्देशिका स्कैनर, टूल विवरण निष्कर्षण।sentrymcp-rules — प्रत्येक डिटेक्शन नियम TOML के रूप में (गंभीरता, CWE/OWASP संदर्भ, उपचार) — कोई भी डिटेक्शन पैटर्न Rust में हार्डकोडेड नहीं है।sentrymcp-proxy — रनटाइम stdio रिले, tools/list डिफिंग, और बेस्ट-एफर्ट नेटवर्क वॉचर।sentrymcp-cli — एकल sentrymcp बाइनरी (scan और proxy सबकमांड)।गहरे डिज़ाइन नोट और प्रति तंत्र ज्ञात सीमाएँ प्रत्येक क्रेट के doc टिप्पणियों (engine.rs, extract.rs, netwatch.rs) में हैं।
netstat-आधारित); अन्य प्लेटफ़ॉर्म हमेशा शून्य कनेक्शन रिपोर्ट करते हैं, एक दस्तावेज़ित अंतर जो मौन नहीं है।heuristic आत्मविश्वास के रूप में चिह्नित निष्कर्ष (missing-auth, homoglyph, overprivileged-scope) समीक्षा संकेत हैं, पुष्ट निर्णय नहीं — डिज़ाइन द्वारा वहाँ कुछ झूठे सकारात्मक की अपेक्षा करें।फोर्क करें, ब्रांच करें, PR करें। नए डिटेक्शन नियमों को TOML में रखें, Rust में नहीं, और किसी भी नई चीज़ के लिए corpus/ में एक संवेदनशील/पैच किया हुआ जोड़ा जोड़ें।
MIT — देखें LICENSE।