CVE-2024-56143CVE-2024-56143是Strapi开源无头内容管理系统(Headless CMS)中存在的一个高危信息泄露漏洞。该漏洞存在于Strapi的文档服务(Document Service)中,具体涉及lookup操作符对私有字段的查询参数处理不当问题。受影响版本范围为Strapi 5.0.0至5.5.2之前的所有版本。
Strapi作为一款流行的开源内容管理系统,广泛应用于构建API驱动的网站和应用程序。该漏洞的核心问题在于,当攻击者通过精心构造的查询请求,利用lookup参数绕过系统的字段访问控制机制时,可以直接访问到本应受保护的私有字段数据。这些私有字段包括但不限于管理员密码哈希、密码重置令牌(reset tokens)、API密钥以及其他敏感配置信息。
该漏洞的CVSS 3.1评分为8.2分,属于高危级别。其攻击向量为网络攻击(AV:N),攻击复杂度低(AC:L),无需任何特权(PR:N),也无需用户交互(UI:N)。在影响方面,该漏洞对机密性影响为高(C:H),因为攻击者可以直接获取敏感的管理凭据;对完整性影响为低(I:L),因为虽然可以读取敏感数据,但直接修改能力有限;对可用性影响为无(A:N)。该漏洞已在Strapi 5.5.2版本中修复,建议所有受影响的用户尽快升级。
该漏洞的技术根源在于Strapi文档服务中lookup操作符的实现缺陷。Strapi的文档服务负责处理对内容类型的CRUD操作,其中lookup操作符用于跨内容类型的关联查询。
正常情况下,Strapi通过字段级别的访问控制策略(Field-level access control)来保护敏感字段。当用户查询某个内容类型时,系统会检查每个字段的访问权限,对于私有字段(如password、resetPasswordToken等),只有经过授权的管理员才能访问。
然而,该漏洞的实现中,lookup操作符在处理关联查询时,未能正确地将访问控制策略应用于通过lookup参数访问的私有字段。具体而言,当攻击者构造包含特定lookup参数的查询请求时,系统会直接返回关联实体中的所有字段数据,包括那些被标记为private的敏感字段。
利用方式如下:攻击者首先识别目标Strapi实例的API端点,然后构造包含恶意lookup参数的查询请求。例如,通过在查询中添加类似`?lookup[admin][fields][0]=password&lookup[admin][fields][1]=resetPasswordToken`的参数,攻击者可以绕过字段级别的权限检查,直接获取管理员用户的密码哈希和密码重置令牌。获取这些凭据后,攻击者可以进一步执行管理员账户接管攻击,完全控制Strapi实例。