CVE-2026-31891CVE-2026-31891是Cockpit CMS中发现的严重SQL注入漏洞。Cockpit是一款无头内容管理系统(Headless CMS),广泛用于构建API驱动的应用程序。该漏洞存在于MongoLite Aggregation Optimizer组件中,影响版本2.13.4及更早版本。攻击者可以通过访问/api/content/aggregate/{model}端点,利用未经过滤的字段名称进行SQL注入攻击。值得注意的是,攻击者仅需要持有最低权限级别的只读API密钥即可成功利用此漏洞,无需管理员权限。通过构造恶意的聚合查询,攻击者能够绕过_content表中的_state=1发布内容过滤器,访问未发布或受限制的内容,并从底层SQLite内容数据库中提取任意数据。此漏洞已被官方在版本2.13.5中修复,修复措施将v2.13.3中引入的字段名sanitization扩展应用到toJsonExtractRaw()方法中。
该SQL注入漏洞的根本原因在于lib/MongoLite/Aggregation/Optimizer.php文件中的toJsonExtractRaw()方法未对用户输入的字段名称进行适当的sanitization处理。攻击者通过/api/content/aggregate/{model}端点提交包含恶意字段名的聚合查询,可以注入任意SQL代码。具体利用方式包括:1)通过构造带有SQL注入payload的字段名参数,攻击者可以突破_content表的_state=1过滤器限制,访问draft、archived等非发布状态的内容;2)利用UNION SELECT等SQL技术从数据库中提取敏感信息,包括用户数据、配置信息等;3)由于Cockpit使用SQLite作为后端数据库,攻击者可以通过SQL注入读取任意表的数据。修复方案采用了与toJsonPath()方法相同的字段名sanitization策略,确保所有用户可控的字段名在传递给SQL查询前经过严格的过滤和转义处理。