技术说明
Spring AI对Anthropic的Skills API的支持在写入文件到磁盘前,将LLM生成的文件名直接传递给Path.resolve而没有进行清理。恶意用户如果能够影响LLM的输出(例如,通过精心制作的提示或间接提示注入),可以导致应用程序在预期目标目录之外写入文件,包括受限的系统目录。这是"LLM输出即应用程序输入"的直接例子 — 模型生成的内容在没有验证的情况下传播到文件系统操作中。
攻击途径
攻击者影响LLM的文件命名输出(通过代理工作流中的直接或间接提示注入),使其包含路径遍历标记(例如,'../../etc/')。Spring AI将未清理的LLM派生文件名传递给Path.resolve,后者解析遍历路径,文件在进行任何路径验证之前就被写入到攻击者期望的位置。
受影响系统
Spring AI版本1.1.0到1.1.x。特别影响使用Anthropic Skills API支持功能且包含文件写入操作的部署。Spring AI在Java企业代理工作流实现中被广泛使用。
缓解措施
立即升级到Spring AI 1.1.7。作为纵深防御措施,对所有LLM派生的文件名强制执行规范路径验证,将文件写入根目录限制在明确允许的目录列表中,将所有模型生成的路径视为不可信输入,并审计任何模型输出控制文件系统路径、工具参数或API参数的AI工作流。