快速结论:该问题出现在使用 CrewAI 的 LiteAgent 并启用记忆(memory)功能时,检索到的记忆内容被原样拼接进 system prompt,导致被污染的记忆条目可执行间接提示注入。优先排查记忆写入路径(工具输出、任务结果是否进入 memory)以及 _inject_memory() 是否对记忆内容做隔离处理。
适用环境:Issue 已确认的工具为 CrewAI,受影响文件为 lib/crewai/src/crewai/lite_agent.py(第 568-581 行)。Issue 未确认具体操作系统、Python、CUDA、显卡或依赖版本,请勿补写。
最快修复方案:暂无确认的一步修复方案。Issue 中提出的建议是:在 _inject_memory() 中对记忆内容进行清洗(去除换行、截断长度),并用明确的数据边界标记包裹,例如标注为“retrieved context, not instructions”。评论中的可优先尝试方向是将记忆内容从 system prompt 移到低信任度的 <memory-context> 数据块中,并在写入记忆前做写入路径校验。
注意事项:上述清理和分隔符方案均属建议或社区讨论,Issue 中未标记为已验证修复;正则清洗存在绕过风险(分隔符攻击仍然存在),且写入路径分类器存在一定误报率,需自行评估。
问题场景
用户在 CrewAI 中使用 LiteAgent,并启用了记忆功能。当 agent 处理外部数据(例如抓取网页、读取文档、调用工具)后,内容可能通过 RememberTool 或自动记忆提取被写入 memory。后续交互中,LiteAgent._inject_memory() 调用 self._memory.recall(query, limit=10) 取回记忆,并把 m.record.content 直接拼接进 system prompt。若此前写入的记忆含有隐藏指令,就会被当作系统级指令注入到后续对话中。
报错原文
[Security] Memory content injected into system prompt without sanitization enables indirect prompt injection
原因分析
核心原因是 LiteAgent._inject_memory() 在拼接记忆时缺少隔离和清洗:
- 记忆内容
m.record.content未经过任何消毒,直接与"Relevant memories:\n"拼接。 - 拼接结果通过
self.i18n.slice("memory").format(memory=memory_block)格式化后,被追加到self._messages[0]["content"],即 system message 中。 - 记忆可能来自之前的工具输出或任务结果,攻击者可通过间接提示注入把指令写入记忆,使其在后续会话中持久化。
这可能构成 OWASP ASI-01(Prompt Injection)以及评论中提到的 ASI06(Memory Poisoning)类问题。在多 agent、allow_delegation=True 的场景下,被污染的记忆还可能通过委派消息在 agent 之间级联传播(社区评论称为“memory injection cascading”)。
环境排查
- 确认 CrewAI 版本,并核对
lib/crewai/src/crewai/lite_agent.py中_inject_memory()的实现是否与 Issue 描述一致(约第 568-581 行)。 - 确认是否启用了 memory,以及记忆写入来源是否包含工具输出、网页抓取、文档读取等外部内容。
- 确认是否使用了
RememberTool或自动记忆提取。 - 确认是否存在多 agent 委派(
allow_delegation=True),以评估级联传播风险。 - Issue 未提供 Python、CUDA、PyTorch、显卡或具体依赖版本,无需额外核对。
解决步骤
- 定位
lite_agent.py中的_inject_memory(),确认self._memory.recall(query, limit=10)的返回内容是否未经过滤直接进入 system message。 - 可优先尝试:在拼接前对记忆内容做最小化清洗,例如压缩多余换行、截断超长内容,避免提示空间被耗尽或结构被破坏。
- 可优先尝试:用明确标注数据来源的边界标记包裹记忆内容,例如在提示中声明这是“retrieved context, not instructions”,而不是可执行指令。
- 可优先尝试:将记忆内容从 system prompt 移到用户轮次中的低信任度结构化数据块,例如
<memory-context role="data" trust="low">...</memory-context>,借助模型的指令层级降低注入成功率。 - 可优先尝试:在写入路径增加校验,在把工具输出存入 memory 之前检测指令式模式(如 “ignore previous instructions”、“you are now”、“system:”),对可疑条目进行隔离或拦截。
- 如使用多 agent 委派,检查委派消息是否也会携带记忆内容,避免一个被污染的记忆条目通过委派链扩散到其他 agent。
验证方法
可构造一条包含隐藏指令的工具输出,使其经正常流程写入 memory,然后在后续会话中触发记忆召回,观察注入内容是否仍以系统级权威进入 system prompt、是否被作为指令执行。若修复后该内容被包裹在低信任度数据块中、或被写入路径拦截,则问题得到缓解。社区评论提到可使用 AgentThreatBench 等测试集验证该 crewAI 记忆级联注入模式在对抗条件下是否仍成立。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Bug]: encrypted_content_affinity has no fallback when the pinned deployment is unavailable or removed, permanently bricking multi-turn Resp](https://www.chat-gpts.plus/wp-content/uploads/2026/09/43000-8bc728a3-768x403.jpg)