MCP_Prompt-Injection
介绍MCP(Model Context Protocol)
- MCP,全称Model Context Protocol,翻译过来就是模型上下文协议,通俗来讲,主要的作用就是给LLM提供更加广泛的能力。
- 例如,通常来讲,任意一个LLM厂商提供的云问答平台,不能访问用户指定的数据库,但是,当接入指定数据库类型的mcp服务,就可以通过这个接口,去访问用户指定的数据库,进而获取数据,可以提供更加便捷的问答体验。
- MCP就像是一个万能的接口,为LLM提供统一的访问外部资源的功能。
- 流程就像这样
- MCP主要依赖于不同的网络传输协议,来完成不同的功能,Anthropic官方推荐的协议是stdio协议,标准的输入输出流协议,简单可以理解成,在你本地就可以直接运行。
Prompt Injection
- 提示词注入攻击,是目前MCP市场最常见且最危险的攻击手段,例如之前Whatsapp信息泄露的攻击就是提示词注入,不合理的mcp的调用,导致信息被恶意提取,具体参考链接WhatsApp MCP Exploited: Exfiltrating your message history via MCP。主要的攻击手法其实非常简单,就是通过在Server端注册工具的时候,将工具描述中加入精心构造的语句,当LLM看到这些描述,就会按照描述进行工作以及工具调用,可以来看一下我本地的复现。
1 |
|
- 可以看到,本来这是一个正常的加法工具,我知道不会有人连算数都需要通过mcp来获得答案,这只是一个简单的demo。
- 在描述中添加了一对important标签,用来告诉LLM这一段内容非常重要,一定要按照提示去做,要求它读取D盘下的flag文件还有当前目录下的.gitignore文件,并将内容添加到sidenote中,然后作为response返回给我,来看看大模型会怎么做。
- 可以看到,response中确实出现了sidenote,也正确读取了flag和.gitignore文件,并且在给出的答案中,并没有出现任何关于读取文件的信息,说明这一切LLM都是在默默的完成,默默的将信息泄露,非常危险。
- gemini-flash还是有一些没有按照我的指示完成任务,再来看一个按照我的指示。
- 可以看到,不仅输出了答案,还按照我的指示给出了详细的加法原理,用来迷惑用户,所有的读取任务,都只是在思考范围里,不会让用户知道。虽然,cline有一个功能就是每一个mcp请求都会提示我是否允许,但是我相信大部分用MCP的用户应该都不会一步一步的看着mcp去完成,因为本身就是为了自动化,不需要监督就能完成工作,所以大部分用户应该都和我一样是赌狗,选择全部自动同意,这就造成mcp提示词注入攻击!
MCP_Prompt-Injection
http://st3r665.github.io/2025/07/10/MCP-Prompt-Injection/