CVE-2026-29080Rucio是一个分布式数据管理系统,其FilterEngine组件中的create_sqla_query方法存在严重SQL注入漏洞。在Oracle数据库部署环境下,由于代码直接使用Python的.format()方法将用户输入拼接至sqlalchemy.text()函数中,导致完全绕过了参数化查询保护。任何经过身份认证的Rucio用户均可利用DID搜索端点注入恶意SQL语句,进而执行任意数据库命令。此漏洞可能导致攻击者窃取认证令牌、密码哈希及所有管理数据,甚至修改数据库内容,造成严重的数据泄露和完整性破坏。该问题仅影响使用默认json_meta插件的Oracle部署环境,PostgreSQL和MySQL不受影响。
漏洞根源位于文件lib/rucio/core/did_meta_plugins/filter_engine.py的create_sqla_query()方法。当Rucio后端数据库方言被检测为Oracle时,系统在构建JSON元数据列的过滤表达式时存在逻辑缺陷。开发者错误地利用sqlalchemy.text()函数配合Python字符串格式化(.format())来动态生成SQL查询片段。具体而言,从HTTP查询参数中提取的key和value字段未经过充分的安全过滤,直接被插入到SQL语句结构中。由于sqlalchemy.text()本身不具备转义或参数化功能,攻击者可以通过构造特殊的HTTP请求,在GET /dids/<scope>/dids/search端点注入任意SQL语法。利用此漏洞,攻击者不仅能绕过认证机制读取敏感表(如identities, tokens, accounts),还能通过UNION查询或堆叠查询获取数据库中的所有数据标识符。值得注意的是,该漏洞具有特定的环境依赖性,仅针对Oracle数据库且启用了默认json_meta插件的场景。