freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

漏洞分析 | Apache OFBiz XML-RPC 反序列化漏洞(CVE-2023-49070)
2023-12-29 16:01:12

Apache OFBiz是一个电子商务平台,用于构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类应用系统。2023年12月,官方发布新版本修复了CVE-2023-49070 Apache Ofbiz xmlrpc 代码执行漏洞。官方已于4月主分支代码中删除XML-RPC组件,但直至18.12.10正式发布才废除XML-RPC接口。攻击者能够利用该漏洞获取服务器权限,建议尽快修复漏洞。

漏洞详情

早在2020年,Apache OFBiz就曾出现过一个反序列化漏洞(CVE-2020-9496),问题出现在XML-RPC这个组件中。XML-RPC也是Apache基金会旗下的一个项目,但基本上在2010年前后就不更新了,XML-RPC在历史上出现过多个反序列化漏洞(如CVE-2016-5003、CVE-2019-17570),都没有被修复。由于Apache OFBiz使用了XML-RPC组件,受到了影响。官方于后续的版本中对相关接口进行加固修复漏洞,但修复方法存在绕过问题(CVE-2023-49070)。在CVE-2020-9496中,通过向/webtools/control/xmlrpc接口发送包含XML格式的RPC请求体的数据包进行漏洞利用。其中这个对象中包含了base64格式的Payload:frc-504c2cf81c88677a92702f46ce3d3122.png2020年5月,漏洞出现后,OFBiz官方在https://github.com/apache/ofbiz-framework/commit/d955b03fdc226d600d81d19d273e773f84b5c000这个commit中提交了第一次补丁,这个补丁的作用是为XML-RPC的接口增加鉴权:frc-d176e6399f56934f4ea0d2fb474630eb.png这个补丁并不能完全解决问题,但提高了漏洞利用门槛,不再是一个“Pre-Auth RCE”漏洞。在2021年10月,一个叫Jie Zhu的人向官方反应了这个“Post-Auth RCE漏洞”,可以在当时最新的17.12.08版本上复现。由于这个漏洞本不是OFBiz导致,而且XML-RPC不再维护,所以无法从根本上修复这个漏洞。

官方只能退而求其次,在https://github.com/apache/ofbiz-framework/commit/d6d863020c0fe89f949e5d2cd23d5ecc95d68c4c使用filter的方式对请求做了一次检测,只要发现Body中存在这个关键字就报错:

frc-391b1e9cdffda9bf3a9c7ce0d0545c31.png这个修复方法很快被Jie Zhu绕过,因为攻击者可以增加一个空格,使用的方式绕过检测。

于是,官方在 https://github.com/apache/ofbiz-framework/commit/25293e4cf6f334a2ae33b3041acba45113dddce9这个提交中再次进行加固,将检测关键词更改为, 并且将检测位置修改到了framework/base/src/main/java/org/apache/ofbiz/base/util/CacheFilter.java文件中:

frc-12712a0217b3995f535571ca9dcb788e.png

但这种直接检查请求体中存在字符串就报错的方式也存在一个问题,就是会影响到正常业务中包含字符串请求,所以官方在https://github.com/apache/ofbiz-framework/commit/a5bdcc6f9ea59d5d614f64832d5b6acec8e81e97中增加了对请求路径的限制:

frc-d90a7de3bd15cd6da57c7acbe628a799.png

同一天,官方又发现接口限制路径不正确,所以又在https://github.com/apache/ofbiz-framework/commit/19d29325910ee2c904b63a951437aa59f73f1d93中做了修改:

frc-67518aeb4c461b2177b98d9829f0fb8a.png而最新的CVE-2023-49070就是对上述官方提供的加固方式进行了绕过:

  • 绕过对于这个关键词的检测
  • 绕过对XML-RPC接口的认证

有了这两个绕过,最新的漏洞重新变回一个Pre-Auth RCE漏洞。

漏洞分析

1. 绕过检测

首先需要绕过这个关键词的检测。在Java中,部分中间件如Tomcat可以通过 ; 的方式可以在请求路径中增加Matrix Parameters:https://www.baeldung.com/cs/url-matrix-vs-query-parameters

所以,我们也可以尝试在XML-RPC请求的路径中增加分号:/webtools/control/xmlrpc;/。

frc-b2ee8656ba690685eaf0d0aa657445db.png第一个限制绕过,服务器返回了登录页面。

2. 绕过认证的限制

在检查用户是否登录方法中(org.apache.ofbiz.webapp.control.LoginWorker#checkLogin),有一个很关键的判断 "error".equals(login(request, response))

frc-6a3585e24384dfa9fada21417fdb6920.pngfrc-a4e573023f7c039955e0ae5920dafbf4.png当login()方法的返回值不等于error时就能不进入if语句从而绕过return "error",使检查用户登陆方法返回success。而在login()方法中有这样几行:frc-ce0161eded0909c0abb7e316a3082573.png由于username、password、token这些参数是从session中取的,在未登录时为空,所以requirePasswordChange这个参数的值如果等于Y,login()方法就能返回requirePasswordChange,否则返回error。

3. 结论

综上所述,只要将请求路径修改为/webtools/control/xmlrpc;/?USERNAME=&PASSWORD=&requirePasswordChange=Y ,即可绕过权限检测和关键词限制。


漏洞复现

1. 靶场环境搭建

  • 使用docker启动ofbiz:18.12.09的环境。

frc-ed1aaa9c40504a9027a9df4578121981.jpeg

frc-356ab64ba970870a566654701ca519d0.png

2.Payload生成 

使用ysoserial的CommonsBeanutils1来生成Payload:

frc-777cdeb0a8adab6c31076c13a6ab898b.jpeg

3.测试

使用CVE-2020-9496中的复现方法发送数据包,可见已经无法成功进入XMLRPC的解析流程:frc-2a2ce8ccf0c9354b9b377602a6b393c4.png

把Path修改成/webtools/control/xmlrpc;/?USERNAME=&PASSWORD=&requirePasswordChange=Y即可绕过限制:

frc-47b6f18176d717d3efb2f9513969fe2e.jpegfrc-0581e7e157911669921db52f9ce8d091.png进入容器中,可见touch /tmp/success已成功执行:frc-9b2a435a76835c87cadd20899ae8f7eb.png

参考来源:

https://github.com/apache/ofbiz-frameworkhttps://mp.weixin.qq.com/s/iAvitO6otPdHSu1SjRNX3ghttps://issues.apache.org/jira/browse/OFBIZ-12812https://github.com/advisories/GHSA-6vwp-35w3-xph8

# 攻防演练 # 漏洞分析 # CVE # 漏洞复现 # 安全验证
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录