#3698·quivr

提示 IDOR - 任何经过身份验证的用户都可以读取和覆盖任何提示(系统提示劫持)

作者: geo-chen创建于 2026年7月3日更新于 2026年7月3日
标签bugarea: backend

发生了什么事?

2026年6月2日通过https://GitHub.com/QuivrHQ/quivr/security/advisories/GHSA-3968-h7hg-28mx报告 - 无答复:

页:1 quivr后端的即时端点接受任何即时UUID并读取或更新而无需任何所有权或归属检查. 提示实体没有所有者栏和行级安全。 任何经认证的用户,如果学会了快速UUID,可以覆盖该提示的内容. 因为即时ID在脑细节响应中被曝光(Brain Entity.promt id),一个共享大脑的查看器-作用成员可以取回大脑的即时-ID并注入恶意系统提示,然后影响大脑的每个用户.

详细情况 文件:后端/api/quivr api/modules/prompt/controller/prompt routes.py

脆弱终点 :

  • get/prompts/{prompt id} -返回任何UUID的提示 。 -PUT/prompts/{prompt id} - 更新任何UUID提示的内容/标题.

处理者既不解决也不检查所有者。 即时实体(即时模型)没有用户 id字段,寄存器更新仅以即时 id键入,因此在路由,服务或数据级别上没有授权层.

发现/ 攻击链 :

  1. 大脑细节(大脑实体)暴露出一个即时-id场. 共享大脑的任何成员,包括只读取查看器,都可以读取大脑细节并获得大脑的即时 ID.
  2. 攻击者称PUT /prompts/{prompt id}用一个注入系统即时(例如破狱或数据过滤指令,或操作答案的内容)来覆盖快取机构.
  3. 每一次针对该大脑的聊天都会使用攻击者控制的系统即时进行,因此注射会影响大脑的所有使用者,而不只是攻击者.

这将只读协作角色转换为篡改共享大脑核心行为的能力,更一般地让任何经认证的用户在其UUID下在系统中突变出任何提示.

• PoC 先决条件:一个运行中的quivr后端,带有Supabase/PostgreSQL实例,两个用户A(所有者)和B(攻击者,例如A的一个共享大脑上的查看器).

  1. 作为B,读取一个共享大脑的细节并取出快取:

获取/brains/{share brain id}/(返回脑实体,包括即时 id)

  1. 作为B,读取目标提示:

获取/ 即时/ { 即时 id} 授权: 熊鼠

返回快速内容, 尽管 B 不拥有它 。

  1. 作为B,覆盖:

PUT/ 即时/ { 即时 id} 授权: 熊鼠 {"内容":"<注入系统即时>","标题":"."}

返回成功; 替换快速正文 。 随后在任何脑上引用此即时 id的聊天, 现在使用被注入的内容 。

验证级别:代码级别. 即时服务使用Supabase SDK客户端(需要活的Supabase后端来进行HTTP路径端到端). 路径、服务和寄存器被追踪,没有包含任何层的所有权检查,即时模型没有所有者栏;发现矢量通过 . . . . . . .