mcpField
M
memory-poisoning-scanner

memory-poisoning-scanner

本地服务
github.com/GuardBee安全2今天更新

关于 memory-poisoning-scanner

memory-poisoning-scanner 是扫描 Agent 源代码的 MCP 服务和命令行工具,用于发现不可信输入可能写入持久记忆、之后又进入可信提示词或消息的代码模式。它面向审查 Agent 代码的开发者,使用启发式规则识别风险形态,不会证明攻击链成立。

主要功能

  1. 01检测将原始输入写入持久记忆的模式
  2. 02检查记忆检索结果是否进入可信角色消息或提示词
  3. 03支持以 SARIF 格式输出,便于 CI 扫描
  4. 04支持通过 `guardbee.yml` 配置

适用场景

  1. 01审查写入长期记忆的 Agent 代码
  2. 02查找被插入系统提示词的检索结果
  3. 03在 CI 中加入记忆投毒模式检查

MCP 相关

向 MCP 客户端提供 `scan_text`、`scan_file`、`scan_directory` 和 `list_patterns`,用于代码扫描。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"guardbee-memory-poisoning-scanner": {
"command": "npx",
"args": [
"-y",
"@guardbee/mcp-memory-poisoning-scanner"
]
}
}
}
启动命令npx -y @guardbee/mcp-memory-poisoning-scanner

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@guardbee/mcp-memory-poisoning-scanner0.3.1

工具

4

收录的工具列表 · 更新于 今天

参数类型必填说明
labelstring否在发现结果中显示的可选标签(例如文件名)
contentstring是要扫描的代码内容

详细介绍

@guardbee/mcp-memory-poisoning-scanner

🇬🇧 English | 🇹🇷 Türkçe | 🇨🇳 中文 | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇧🇷 Português | 🇪🇸 Español | 🇩🇪 Deutsch

npm version npm downloads License: MIT

一个 MCP(Model Context Protocol)服务,用于扫描 Agent 代码中的记忆投毒——将不可信输入写入 Agent 的持久化、跨会话记忆中,之后再被检索出来,并作为可信上下文反馈给模型,甚至可能发生在完全不相关的未来会话中。

prompt-injection-scanner 会捕获模型一次性读取的内容(文档、抓取的网页)中潜藏的注入载荷。本软件包捕获的是结构上截然不同的问题:让注入载荷成为模型视为自身长期知识一部分的代码模式——这就像反射型 XSS 与存储型 XSS 之间的差别,只不过这里的目标是 Agent 的记忆,而不是浏览器的 DOM。

默认情况下,遥测功能处于关闭状态。设置 GUARDBEE_TELEMETRY=1 后,它会发送服务、工具、成功状态、耗时以及文件路径等较短的参数值;较长的字符串以及 content、token 或 password 等字段会被替换为占位符。参见 @guardbee/mcp-telemetry。

Claude ──► memory-poisoning-scanner ──► Your agent's source
              │
              ├─ memory-write     (untrusted input persisted into archival/core memory or a vector KB)
              └─ memory-readback  (recalled memory fed into a system/assistant-role message or prompt)

为什么普通对话记忆不在检测范围内

使用 ConversationBufferMemory 保存原始聊天轮次,或简单地调用 chatHistory.push({role: "user", content: userInput}),都完全正常——这只是对话历史,并非漏洞。本软件包有意不会对此发出告警。

它针对的是范围更窄、风险更高的情况:写入持久化记忆,并使其在当前对话结束后仍然留存——例如 MemGPT 风格的归档记忆(在未来不相关的会话中也会被检索),以及核心记忆(按设计在每一轮都重新注入系统提示词);或者将向量存储用作长期知识库,而非每轮对话的 RAG 上下文。如果不可信输入未经清理就进入其中,它影响的就不只是当前交流——它会成为 Agent 认定为事实的一部分,持续影响任何人,直到有人恰好发现为止。

风险的另一半与此相对应:记忆或向量检索结果直接流入 system / assistant 角色消息或提示词模板时,被投毒的记忆就会“兑现”为模型服从的指令,而不再只是模型读取的数据。


功能

  • 5 种记忆写入模式:MemGPT archival_memory_insert/core_memory_append/core_memory_replace 接收原始输入,向量存储 add_texts/add_documents/upsert 接收原始输入,以及用于自定义命名的长期记忆/知识库存储的通用兜底模式
  • 3 种记忆回读模式:归档/向量检索结果流入系统/助手角色消息,或直接插入提示词模板
  • SARIF 2.1.0 输出 — CI/CD 集成(GitHub Code Scanning 等)
  • 支持通过 guardbee.yml 配置文件进行配置
  • 17 项单元测试 — 每种模式均包含一个正向场景和一个负向(误报)场景,并明确检查普通对话缓冲区的使用不会产生任何发现。通过真实植入漏洞的测试夹具进行了端到端验证(同时捕获了写入和回读),并对整个 guardbee-mcp monorepo 进行了验证(386 个文件,生产代码中零误报)

快速开始

Claude Desktop / MCP 客户端
{
  "mcpServers": {
    "guardbee-memory-poisoning-scanner": {
      "command": "npx",
      "args": ["-y", "@guardbee/mcp-memory-poisoning-scanner"]
    }
  }
}
CLI(CI/CD)
npx @guardbee/mcp-memory-poisoning-scanner scan ./src --fail-on=high --format=sarif > results.sarif

MCP 工具

工具描述
scan_text扫描代码片段
scan_file扫描单个文件
scan_directory递归扫描目录
list_patterns按类别列出所有支持的模式

检测到的模式

类别模式严重性
memory-writearchival_memory_insert_raw_input严重
memory-writecore_memory_write_raw_input(追加/替换)严重
memory-writevector_store_add_raw_input高
memory-writegeneric_named_memory_write_raw_input中
memory-readbackarchival_memory_feeds_trusted_role严重
memory-readbackvector_retrieval_feeds_trusted_role高
memory-readbackmemory_retrieval_feeds_prompt_template高

配置(guardbee.yml)

memory-poisoning-scanner:
  fail-on: high       # any | critical | high | medium | none
  max-files: 5000
  exclude:
    - ".test.ts"

限制(有意设计)

  • 基于启发式,而非污点跟踪。 写入和回读检查各自只查看一个有限位置,并不验证从某次特定写入到之后某次特定读取的数据流路径。发现表示代码中存在这种风险模式,而非数学上确认的利用链。
  • 模式覆盖基于 MemGPT 术语和通用 JS 命名。 使用完全不同的函数/变量名称构建的自定义长期记忆系统不会被识别,除非它恰好符合通用模式(采用 *memory*/*knowledge_base* 命名,或使用 vectorstore 风格的 API)。
  • 此工具查找的是可导致记忆投毒的代码模式,而不是运行时实际遭到投毒的记忆存储 — 如果你能直接检查记忆内容,请搭配 prompt-injection-scanner(用于扫描实际存储的内容)。

开发

npm run build
npm test             # 17 unit tests

许可证

MIT — GuardBee

反馈

有问题、想法或发现误报?请在 GitHub Discussions 中发起讨论,或提交问题。如果 GuardBee 对你有帮助,在代码库上点个 ⭐ 可以帮助其他人发现它。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。