审计Ask Astro LLM问答应用:四大安全漏洞与防御实践
审计Ask Astro LLM问答应用 - Trail of Bits博客
今天,我们发布第二个开源AI安全审计项目:针对开源检索增强生成(RAG)应用的安全漏洞分析,这些漏洞可能导致聊天机器人输出投毒、文档摄取不准确及潜在拒绝服务。本次审计延续了我们早前在流行计算机视觉框架YOLOv7中发现11个安全漏洞的工作。
具体而言,我们在Ask Astro中发现四个问题。该应用是基于风投公司A16Z的RAG参考架构构建的开源聊天机器人。RAG是通过上下文知识库为大型语言模型(LLM)增强训练数据集外信息的最有效技术之一。
架构问题与实现缺陷
审计发现可分为两大类:
- 架构问题:缺乏人工审核或文档删除功能,攻击者可通过有害信息投毒聊天机器人输出
- 实现故障:多个实现漏洞可能影响文档摄取准确性(通过GitHub问题的分割视图投毒、Weaviate客户端中的GraphQL注入)或导致财务拒绝服务(问题扩展提示中的提示词注入)
Ask Astro技术架构
Ask Astro是为Apache Airflow编排工具Astronomer提供技术支持的开源聊天机器人。其采用现代ML开发栈构建,包含三大核心组件:
- Weaviate:存储文档嵌入向量的向量数据库
- Langchain:基于Python的LLM编程框架
- Apache Airflow:用于管理文档检索和处理的工作流编排系统
数据流与攻击面
应用攻击面相对狭窄,包含两个主要工作流(图1):
- 文档摄取:通过Apache Airflow工作流从多个来源获取文档
- Apache Airflow官方文档
- Astronomer博客及GitHub仓库
- StackOverflow带airflow标签的线程
- 答案生成:多步骤检索相关文档并生成答案
- LLM生成问题重述版本
- Weaviate余弦相似度搜索
- Cohere Reranker API文档重排序
- LLM过滤器去除无关文档
审计发现的技术漏洞
[TOB-ASTRO-0001] 通过源材料删除的数据投毒
严重性:高
攻击者可在摄取运行前在社区论坛发布完整讨论线程,摄取完成后立即删除线程。由于缺乏源材料删除同步机制,攻击者可向知识库注入任意文本。
[TOB-ASTRO-0002] 通过GitHub问题的分割视图投毒
严重性:低
文档摄取例程在处理GitHub问题时存在两个漏洞:
- 贪婪正则表达式(
re.DOTALL标志)过度匹配文本 - Markdown模板拼接漏洞允许伪造完整问题线程
"""
DATE: {date}
BY: {user}
STATE: {state}
{body}
{comments}"""
)
[TOB-ASTRO-0003] Weaviate客户端中的GraphQL注入
严重性:中
Weaviate Python客户端v3版本的_sanitize_str函数存在转义漏洞:
value = re.sub(r'(?<!\\)"', '\\"', value)
该正则表达式无法正确处理连续反斜杠情况(如\\"),导致GraphQL查询注入。
[TOB-ASTRO-0004] 问题扩展提示中的提示词注入
严重性:低
攻击者可通过提示词注入技术使模型生成超过两个重述问题,导致资源过度消耗或财务拒绝服务。
防御建议与最佳实践
- 数据库审计工具:建立向量数据库审计和维护流程
- 自动化同步机制:源内容删除时应自动同步至数据库
- 人工持续审核:定期审核数据库中的不准确或无关内容
- 威胁建模:针对多组件系统进行上下文相关的攻击向量分析
技术栈安全启示
本次审计揭示了ML系统安全的关键原则:
- 每个系统组件接口都携带必须缓解的攻击向量
- 文本解析和数据处理步骤需使用真实数据、边界案例和攻击载荷进行测试
- RAG系统的核心挑战在于确保向量数据库信息完整性
审计发现已通过相应PR修复(#325, #1134),完整技术细节欢迎联系我们的安全工程团队。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码


浙公网安备 33010602011771号