Apache OFBiz Authentication Bypass Vulnerability (CVE-2023-51467)
Published by Diksha Ojha on December 27, 2023
SonicWall 威胁研究团队在基于 Java 的 Web 框架 Apache OFBiz 中发现了身份验证绕过漏洞。该漏洞的编号为 CVE-2023-51467,CVSS 评分为“严重”,严重程度为 9.8。利用该漏洞的攻击者可能会绕过身份验证来实现简单的服务器端请求伪造(SSRF)。
SonicWall 的安全研究人员在研究之前披露的 CVE-2023-49070 的根本原因时意外发现了 CVE-2023-51467。研究人员表示,针对 CVE-2023-49070 发布的补丁留下了根本问题,使得身份验证绕过成为可能。
Apache OFBiz 是一个可在任何行业使用的业务应用程序套件。基于Java的框架允许开发人员快速扩展或改进典型设计以提供新功能。
漏洞详情及利用分析
本月早些时候,Apache 从应用程序中删除了 XML RPC 代码以修补 CVE-2023-49070。经过进一步排查,发现该漏洞存在于登录功能中。对LoginWorker.java文件的分析有助于了解身份验证过程中各种函数和检查中的数据流。
研究人员开发了两个测试用例来利用该漏洞。
- 将 USERNAME 和 PASSWORD 参数保留为空
- 提供已知无效的 USERNAME 和 PASSWORD 参数
在第一个测试用例中,没有为 USERNAME 和 PASSWORD 参数赋予任何值,并且参数requirePasswordChange=Y包含在 URI 中。
当用户名和密码通过登录函数传递时,它返回值requirePasswordChange,因为用户名和密码为空,并且requirePasswordChange设置为“Y”。这些值进一步通过checkLogin函数传递。令人惊讶的是,流程不会进入条件块,因为布尔检查 (username == null) 和 (password == null) 返回false,即使两个参数都为空。此外,“error”.equals(login(request, response))也会导致false,因为登录函数给出的返回值为requirePasswordChange。
因此,这会导致checkLogin函数返回success,从而允许绕过身份验证。
在第二个测试用例中,为 USERNAME 和 PASSWORD 参数提供了已知的无效值,并且参数requirePasswordChange=Y包含在 URI 中。
在这种情况下,由于参数requirePasswordChange=Y ,登录函数返回值requirePasswordChange。此外,该值通过checkLogin函数传递。与第一种情况类似,流程不会进入条件块,因为用户名和密码未设置为 null。除此之外,由于登录函数给出的返回值是requirePasswordChange ,“error”.equals(login(request, response))也保持 false ,就像测试用例 1 一样。
在这种情况下,checkLogin函数也会返回成功,从而允许绕过身份验证。
上述情况得出的结论是,字符串requirePasswordChange=Y允许绕过身份验证,无论用户名和密码或其他参数如何。因此,绕过仍然存在,消除 XML RPC 代码被证明是一个无效的补丁。
Qualys 威胁研究单位已重现该问题,并在易受攻击的版本上成功进行了测试。
受影响的版本
该漏洞影响 18.12.11 之前的 Apache OFBiz 版本。