0x01. 漏洞概述

近日,CVE更新了一个 Apache Synapse的严重安全漏洞。该漏洞存在于版本低于3.0.1的 Synapse产品上,允许攻击者在运行有 Apache Synapse的目标系统上远程执行任意代码。目前,国家信息安全漏洞共享平台(CNVD)已对该漏洞进行了收录(CNVD-2017-36700,对应CVE编号:CVE-2017-15708)。

0x02. 漏洞分析

从官网上下载 Apache Synapse2.1的源码,IDE打开载入。在依赖包列表中,可以看到 Commons-collections3.1的身影。该包的存在使得 Apache Synapse上有关序列化/反序列化的操作变得十分危险。因此此时要触发 Synapse中的反序列化远程命令执行漏洞,只需确认 Synapse中存在反序列化的相关操作即可。

通过对比启动 Synapse前后的端口开放情况,可以明显的看到,Synapse 启动后会对 1099 这个端口进行监听。默认情况下,该端口是 Java RMI 服务的默认监听端口。而 RMI 正是 100% 基于序列化操作的。如果该端口上运行的恰好是 RMI 服务,那么触发漏洞的两个条件至此就全部满足了。

为了不让分析停留在猜测上,我们跟踪一下程序的执行过程。通过搜索关键字 main ,在排除一些官方 demo 造成的干扰后,找到程序的入口函数在 SynapseServer 类中。

在 Synapse 开发人员友好的注释帮助下,忽略和排除掉一些诸如"启动失败"之类的无关代码。因为要证明的是 Synapse 在启动过程中执行过序列化有关的代码,因此在跟踪过程中,对一些异常情况可以先忽略不理,直接看执行成功这一种情况的流程即可。依照这个原则,跟随程序执行依次来到了 ServerManager 类中的start()方法以及 SynapseControllerstart()方法上。 其中,由于 Axis2SynapseControllerSynapseController 接口的实现类,所以直接跟踪 Axis2SynapseContrllorstart()方法即可。 Axis2SynapseContrllorstart()方法如下:

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖