★且听安全★-点关注,不迷路!
★漏洞空间站★-优质漏洞资源和小伙伴聚集地!
Bonitasoft 从 Dockerhub 下载超过 500 万次,它是一个业务自动化平台,可以更轻松地在业务流程中构建、部署和管理自动化应用程序。
CVE-2022-25237 Bonitasoft Platform 存在 Auth AP I认证绕过漏洞,通过精心构造 payload 发送到特殊功能的 API URL,可导致远程代码执行。受影响版本如下:
For community(社区版):
-
2022.1-u0 (7.14.0) 以下
For subscription(订阅版):
-
2022.1-u0 (7.14.0) 以下
-
2021.2-u4 (7.13.4) 以下
-
2021.1-0307 (7.12.11) 以下
-
7.11.7 以下
在分析认证绕过漏洞时,还发现了一处潜藏的未公开反序列化漏洞。下面将完整分析过程共享给大家。
使用 docker 运行对应版本镜像。查看 Java 进程:
添加远程调试配置:
重启容器,查看是否开启 5000 调试端口,开放成功后配置 idea 指定调试端口:
对比 `bonita:7.13.0` 和 `bonita:7.14.0` 版本,发现`bonita:7.14.0` 中删除了 `AbstractAuthorizationFilter` 类,该文件中包含 `Filter` 权限认证绕过逻辑:
通过补丁对比,在 `web.xml` 中发现还增加了一处认证配置:
这个配置主要是为 `/serverAPI/` 路由添加 `BASIC` 认证。
补丁分析中讲到,最新版的软件已经将 `AbstractAuthorizationFilter` 删掉,那么在 `AbstractAuthorizationFilter` 代码中明确指出了哪些路由不需要 `session`,在漏洞分析的时候主要关注 `isMatched` 赋值为 `true` 的那一行。`requestURL` 为用户请求的 `URL`, `contains` 只是简单匹配了路由是否包含 `excludePatterns`:
其中 `excludePatterns` 在配置文件中赋值:
上面3个鉴权 `Filter` 中的 `excludePatterns` 变量,必定包含 `i18ntranslation` 。`web.xml` 文件中配置了路由对应的 `Filter` 链,因为 `/API/*` 路由对应了 `RestAPIAuthorizationFilter` ,因此可以选择 `i18ntranslation` 作为权限绕过关键字:
根据上面的分析,我们可以构造多种姿势的 URL 实现认证绕过:
虽然有了 `Filter` 认证绕过,但并不意味着能在核心功能代码中完全实现认证绕过,从目前公开的 POC 来看,主要利用了管理员的权限上传恶意组件,核心 `servlet` 为 `FileUploadServlet`,其子类对应两个 `url` :
通过静态分析和动态调试, `FileUploadServlet` 在文件处理过程中需要获取 `session` 中的 `apiSession` 字段:
然而问题是,如果不登陆, `Session` 中的 `apiSession` 就不会被赋值,获取该字段会抛异常。因此如果要使用该功能必须要配合用户登录的 `session` 才行。虽然访问 `/API/pageUpload` 需要管理员权限,但是结合 `Filter` 认证绕过,在普通用户下也可以访问,所以漏洞的准确描述应该为越权漏洞。这个漏洞的逻辑过程比较简单,这里就不过多叙述了,下面重点分析新发现的反序列漏洞。
进入真正的主题。在分析复现 CVE-2022-25237 的过程中,注意到修复补丁增加了其他一些 `servlet` 的鉴权。根据 `web.xml` 配置信息,可知 `/serverAPI/` 路由对应的是 `HttpAPIServlet` ,关联的处理类为 `org.bonitasoft.engine.api.internal.servlet.HttpAPIServlet` :
定位 `doPost` 方法,判断了 `this.enabled` 变量,该变量在 docker 安装时默认为 `false`:
需要在 docker 启动时添加环境变量,或者在系统启动时修改环境变量的默认值。检查完环境变量后,将调用 `callHttpApi` 函数, 接着进入 `HttpAPIServletCall#doPost` 方法:
函数内部存在很多反序列化操作,主要包括 xstream XML 反序列化和 Java 原生反序列化:
因为 xstream 版本为 v1.4.18,目前公开的利用链无法使用。重点关注存在原生反序列化过程的 `deserialize` 函数:
按照代码处理流程构造数据包成功达到反序列化触发点:
在项目依赖库中发现 bonitasoft 使用了 `commons-beanutils-1.9.4.jar`,可以参考公众号前面提到的不依赖 cc 链的 cb 利用链新的构造思路,同时结合 Tomcat 命令回显姿势,实现反序列化命令执行回显的效果:
有兴趣深入交流的小伙伴,请加入我们的漏洞空间站-致力于打造优质漏洞资源和小伙伴聚集地!
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。
★且听安全★-点关注,不迷路!
★漏洞空间站★-优质漏洞资源和小伙伴聚集地!
原文始发于微信公众号(且听安全):CVE-2022-25237 Bonitasoft Platform 从认证绕过到未公开反序列化漏洞发现之旅