审计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):

  1. 文档摄取:通过Apache Airflow工作流从多个来源获取文档
    • Apache Airflow官方文档
    • Astronomer博客及GitHub仓库
    • StackOverflow带airflow标签的线程
  2. 答案生成:多步骤检索相关文档并生成答案
    • LLM生成问题重述版本
    • Weaviate余弦相似度搜索
    • Cohere Reranker API文档重排序
    • LLM过滤器去除无关文档

审计发现的技术漏洞

[TOB-ASTRO-0001] 通过源材料删除的数据投毒

严重性:高
攻击者可在摄取运行前在社区论坛发布完整讨论线程,摄取完成后立即删除线程。由于缺乏源材料删除同步机制,攻击者可向知识库注入任意文本。

[TOB-ASTRO-0002] 通过GitHub问题的分割视图投毒

严重性:低
文档摄取例程在处理GitHub问题时存在两个漏洞:

  1. 贪婪正则表达式(re.DOTALL标志)过度匹配文本
  2. 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] 问题扩展提示中的提示词注入

严重性:低
攻击者可通过提示词注入技术使模型生成超过两个重述问题,导致资源过度消耗或财务拒绝服务。

防御建议与最佳实践

  1. 数据库审计工具:建立向量数据库审计和维护流程
  2. 自动化同步机制:源内容删除时应自动同步至数据库
  3. 人工持续审核:定期审核数据库中的不准确或无关内容
  4. 威胁建模:针对多组件系统进行上下文相关的攻击向量分析

技术栈安全启示

本次审计揭示了ML系统安全的关键原则:

  • 每个系统组件接口都携带必须缓解的攻击向量
  • 文本解析和数据处理步骤需使用真实数据、边界案例和攻击载荷进行测试
  • RAG系统的核心挑战在于确保向量数据库信息完整性

审计发现已通过相应PR修复(#325, #1134),完整技术细节欢迎联系我们的安全工程团队。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码

posted @ 2025-09-04 12:01  qife  阅读(10)  评论(0)    收藏  举报