前言
ZK是构建企业Web应用程序的领先开源JavaWeb框架。ZK下载量超过2000000次,为众多公司和机构提供了支持,从小型公司到多个行业的《财富》世界500强。
R1Soft Server Backup Manager(SBM)为服务提供商提供了一个灵活、服务器友好的解决方案,消除了运行传统备份的麻烦。用户可以每15分钟运行一次备份,而不会影响服务器性能。近1800家服务提供商使用它来保护250000台服务器。
受影响版本
ZK框架v9.6.1、9.6.0.1、9.5.1.3、9.0.1.2和8.6.4.1。
ConnectWise Recover v2.9.7及更早版本受到影响。
R1Soft Server Backup Manager v6.16.3及更早版本受到影响。
ZK框架身份验证绕过
[ZK-5150] Vulnerability in zk upload – ZK-Tracker
从漏洞描述来看,如果路由/zkau/upload包含nextURI参数,ZK AuUploader servlet会进行forward请求转发,该转发可以绕过身份认证,返回web上下文中的文件,如获取web.xml、zk页面、applicationContext-security.xml配置信息等。
分析
直接看webapps/web-temp/ui/WEB-INF/lib/zk-7.0.6.1.jar!/org/zkoss/zk/au/http/AuUploader.class#service()方法,接收了nextURI参数并进行请求转发。
该请求必须为multipart类型
请求构造
尝试转发到web.xml,响应ZK-Error头为410,说明失败了,dtid为随便输入的字符。
观察http请求,发现dtid是随机生成的,并且附带了JSESSIONID。
分析前端调用的js,发现从zk.Desktop对象获取了dtid。
发起ajax请求
获取dtid
填入dtid和对应JSESSIONID
尝试访问页面
nextURI=/Configuration/server-info.zul
发现绕过了身份验证,获取到了应用的敏感信息。
自动获取
使用webdriver获取
显然这种方式不是很方便,笔者随后发现在访问login.zul时dtid已经生成并且在响应包中。
优化
ConnectWise R1Soft Server Backup Manager RCE
R1Soft Server Backup Manager使用了zk框架,并且支持设置jdbc驱动,从而导致远程命令执行并接管该服务器。
分析
jdbc上传处理zk-web/WEB-INF/classes/com/r1soft/backup/server/web/configuration/DatabaseDriversWindow.class#onUpload()方法 。
跟入processUploadedMedia()方法,获取了文件流。
传入webapps/lib/cdpserver.jar!/com/r1soft/backup/server/facade/DatabaseFacade.class#uploadMySQLDriver()方法。
通过uploadDriverFile()方法写出文件。
webapps/lib/cdpserver.jar!/com/r1soft/backup/server/worker/db/mysql/MySQLUtil.class#hasMySQLDriverClass()会判断上传的jar包是否有org/gjt/mm/mysql/Driver.class,否则不会添加到classpath中,返回The file does not contain the MySQL JDBC database driver。
webapps/lib/cdpserver.jar!/com/r1soft/util/ClassPathUtil.class#addFile()方法调用URLClassLoader添加jar包到classpath中。
最后webapps/lib/cdpserver.jar!/com/r1soft/backup/server/facade/DatabaseFacade.class#testMySQLDatabaseDriver()进行驱动测试。
webapps/lib/cdpserver.jar!/com/r1soft/backup/server/db/mysql/MySQLDatabaseConnection.class#driverTest()最终在Class.forName时执行了Driver中的静态代码块。
jdbc backdoor
早在2018年时就有人提出jdbc backdoor,一部分应用程序在ui界面允许管理员上传jdbc驱动,这样非常方便,无需登陆服务器添加相关jar包。但DriverManager中的静态代码块会默认执行,从而可以执行任意代码。具体原理可以看看SPI机制是如何实现JDBC的,这里不再阐述。
编写恶意com.mysql.jdbc.Driver,其实就是实现java.sql.Driver接口相关方法,在静态代码块中添加恶意代码。
替换合法jdbc包中的com.mysql.jdbc.Driver。
请求构造
回到ZK框架机制本身,页面每个元素都会随机生成唯一标识,需要模拟整个请求过程,拿登陆举例。
自动上传
模拟上传驱动过程
利用演示
请使用以下链接观看视频: https://mp.weixin.qq.com/s?__biz=Mzg4MDcxNTc2NA==&tempkey=MTE5NV9uUUpJNnFtWEZFOXhBd0JiNXZVcUY3OWR3bW00WjF6Q055bXBFNEM0dWFjS3hYTVQ0R0Y2ekV0UFFJLTJPMUE0Sm51R1dNRGdjVnhrMDZ5WGlYNnB0SXRLQVVKYlliajFKbW5raUZEeUF5OVlpdE9GZ1FSWThWVkRNdjdnQWgwb1c4T3FMUC1PM1loT0R1WW95MWRBN0NFbXRIUm5RMG5hNU1mYkpBfn4%3D&chksm=cf71b6bff8063fa947f89135db21b94f0fc0d03bd2feb83525abbd7f684e5795f712da3156ca&token=2067341768&lang=zh_CN#rd
完整的exp请访问:https://github.com/numencyber/VulnerabilityPoC/tree/main/CVE-2022-36537
总结
R1Soft Server Backup Manager使用ZK框架作为主框架,其安全性需要各Web3项目方提高重视,及时关注各种Web3基础架构的安全漏洞并及时打好补丁,以避免潜在的安全风险和数字资产损失。我们将及时挖掘,追踪各种web3上的安全风险,以及提供领先的安全解决方案,确保web3世界链上,链下安全无虞。
互联网影响
通过Shodan发现了4000多个暴露的Server Backup Manager,很有可能会被攻击者利用接管主服务器和agent主机权限并下发勒索软件。建议各Web3项目方提高重视,及时升级到安全版本,以避免潜在的安全风险和数字资产损失。如有任何疑问或技术交流,欢迎联系我们 contact@numencyber.com。
补丁下载
[ZK-5150] Vulnerability in zk upload – ZK-Tracker
ConnectWise Recover and R1Soft Server Backup Manager Critical Security Release
关于更多详情,欢迎访问: https://mp.weixin.qq.com/s?__biz=Mzg4MDcxNTc2NA==&tempkey=MTE5NV9uUUpJNnFtWEZFOXhBd0JiNXZVcUY3OWR3bW00WjF6Q055bXBFNEM0dWFjS3hYTVQ0R0Y2ekV0UFFJLTJPMUE0Sm51R1dNRGdjVnhrMDZ5WGlYNnB0SXRLQVVKYlliajFKbW5raUZEeUF5OVlpdE9GZ1FSWThWVkRNdjdnQWgwb1c4T3FMUC1PM1loT0R1WW95MWRBN0NFbXRIUm5RMG5hNU1mYkpBfn4%3D&chksm=cf71b6bff8063fa947f89135db21b94f0fc0d03bd2feb83525abbd7f684e5795f712da3156ca&token=2067341768&lang=zh_CN#rd
白话区块链|同步全球区块链资讯、区块链快讯、区块链新闻
本站所有文章数据来源:金色财经
本站不对内容真实性负责,如需转载请联系原作者
如需删除该文章,请发送本文链接至oem1012@qq.com