flawopen.com/AI Security/langroid-neo4j-cypher-injection-cve-2026-55615
●
CVE-2026-55615 · CVSS v4 9.2[1] · 严重
安全研究 · FlawOpen
Langroid CVE-2026-55615:提示词到 Cypher 注入
Langroid 未验证就将模型生成的 Cypher 传给 Neo4j。请升级到 0.65.5;数据库权限仍是安全边界。[1], [2], [4]
💡 通俗易懂的原理解析 (ELI5)
图书管理员收到普通问题后,把生成的数据库指令直接交给权限很高的职员。即使恶意便条改变了问题,职员仍会执行指令。CVE-2026-55615 允许不可信内容影响 Langroid 发往 Neo4j 的 Cypher。[1]
核心概念与专有名词
Cypher- Neo4j 用于读取和修改图数据的查询语言。其他过程能否调用取决于服务器设置和账户权限。[1]
Prompt injection- 不可信输入会影响模型行为。模型生成的查询必须视为不可信输入。[1]
框架映射
- 本指南所述弱点的 CWE 参考: CWE-74
攻击执行流程分解
步骤 1
步骤 2
步骤 3
数据库权限决定直接影响
读取工具可泄露连接账户能访问的数据;创建工具可在账户权限内修改或删除数据。公告还指出 LOAD CSV 可远程获取数据。主机文件或命令访问取决于启用的过程和数据库授权。[1]
步骤 4
源代码对比:漏洞与安全实现
易受攻击代码遵循公告的调用路径;修复示例概括 0.65.5 的行为,并非逐字补丁。修复在工具边界验证、限制读取并控制危险操作。应将查询检查视为纵深防御,而非授权机制。维护者的修复说明和 Langroid 的 SQL 智能体指南都指出,最小权限 Neo4j 角色才是安全边界;同时隔离智能体进程。 Langroid 文档指出,这些关键词和模式检查可能被绕过;访问控制仍应由 Neo4j 权限强制执行。[1], [3], [4], [6]
存在漏洞的实现
# Neo4jChatAgent 的易受攻击路径(Langroid <= 0.65.4)。
def cypher_retrieval_tool(self, msg: CypherRetrievalTool):
query = msg.cypher_query
return self.read_query(query)
def read_query(self, query: str):
with self.driver.session() as session:
return session.run(query, parameters=None)
加固后的安全修复
# 0.65.5 版本的行为:在 LLM 可访问的工具边界进行验证。
def cypher_retrieval_tool(self, msg: CypherRetrievalTool):
query = msg.cypher_query
rejection = validate_cypher_query(
query, is_write=False,
allow_dangerous=self.config.allow_dangerous_operations,
)
if rejection is not None:
return rejection
return self.read_query(query)
工程与系统安全加固清单
- ✓盘点 Langroid 部署和锁定文件;将受影响环境升级到 0.65.5 或更高版本并重建镜像。[1], [4]
- ✓除非经过评审并记录例外,否则保持
allow_dangerous_operations=False。[1], [4] - ✓为每个智能体创建专用 Neo4j 角色,只授予所需数据、标签、操作和过程权限。[1], [5]
- ✓禁用不需要的 APOC、dbms.security、LOAD CSV 及文件、网络或系统功能,并检查有效授权。[1]
- ✓让读取工具保持只读,重要写操作单独授权。[1], [4]
- ✓测试正常读取成功,并确认无害的策略测试查询会在调用驱动前被拒绝。[3], [4]
- ✓限制智能体主机访问文件、机密和网络。[1]
- ✓检查易受攻击期间数据库日志与智能体跟踪;若凭据可能暴露则轮换。