java漏洞提权_Windows Java Usage Tracker本地提权漏洞分析(CVE-2018-3211)

前言

近期,我们发现了一个Java Usage Tracker中的设计缺陷,可导致攻击者创建任意文件,注入指定

我们通过Zero Day Initiative,与

在本文中,我们将深入研究这一漏洞在Windows上的出现原因、Java Usage Tracker的

Oracle

Java Usage Tracker

在Java中,有一个名为JavaUsage Tracker的功能,用于跟踪系统中Java的使用方式。Java Usage Tracker具有以下功能:

1、通过启动

Java Usage Tracker的配置文件名称为usagetracker.properties。该文件位于全局默认位置,这一位置根据

下图展示了一个usagetracker.properties的样例:

59e5f06bac7e69529f9ec8519f20057c.png

在上图的第9行中,我们可以看到,JavaUsage Tracker会将日志信息记录到文件global_

下图是跟踪数据的示例,请注意这里是如何使用逗号分隔两个不同值的,是在属性文件(分隔符配置)中定义。

74053db3a0e3ea76e25bc11c6f2c6bd5.png

用户控制的参数

在文件usagetracker.properties中,有两个属性控制Java Usage Tracker的行为,分别是:

oracle.usagetracker.logToFile

oracle.usagetracker.additionalProperties

logTofile属性允许用户选择系统中的任意路径来保存日志文件。需要注意的是,日志文件是由被监控的JVM创建的。如果JVM以提升后的权限运行,那么JVM就能够在系统的任何地方创建该文件,文件的扩展名也不受控制(也就是说,可以创建名为global_javatracker.bat的日志文件)。

尽管logToFile路径可以任意设置,但无法控制文件内容。因为JVM只会从现有的数据(无法修改)中写入值。然而,Java Usage Tracker具有从自定义属性获取值的特殊功能。 additionalProperties可以包含要跟踪的任意和其他自定义属性,如下所示。

如何通过additionalProperties添加自定义属性:

04a1e32975500efe2306617c19a43ffa.png

重新启动Tomcat服务后,如何跟踪数据的

3d90d681445316586890982ec551f231.png

如上图所示,该行的末尾附加了一个带有null值的已配置跟踪属性com.anotherInteresting

借助自定义属性实现漏洞利用

下面,我们详细说明如何借助自定义属性实现漏洞利用。先前配置文件中的第9行会使得Java Usage Tracker强制创建.bat文件,然后添加自定义属性ping 172.0.1.1 >。其生成了文件global_javatracker.bat,如下图所示。

global_javatracker.bat中自定义属性:

111ea9d7c391f2153611ae0dc589ced2.png

global_javatracker.bat正在被执行:

06f6080ae2d26966099d82f217de01fc.png

在这里,需要注意附加属性ping 172.0.1.1 >= null。当我们执行批处理文件global_javatracker.bat时,会显示错误消息“VM s

那么,如果将分隔符更改为“new line”(新的一行),将会生成完全不同的跟踪日志。

带有“new line”分隔符的JavaUsage Tracker:

52f842b29166100910d1d61e03177f68.png

使用“new line”分隔符后,生成的跟踪日志:

e5a3bc52a77f6212900cfed46969630b.png

上图中的最后一行,包含ping 172.0.1.1 >= null。如果运行global_javatracker.bat,那么就会导致执行ping172.0.1.1> = null命令。但是,由于带有双引号,所以该命令无法识别。但是,我们还有机会执行该命令,因为每个属性值的双引号,可以通过修改另一个配置com.oracle.usagetracker.quote =”来实现替换。

举例来说,我们创建一个内容为空的com.oracle.usagetracker.quote配置,如下图所示。

内容为空的com.oracle.usagetracker.quote:

a1ee00676b9d747898e7f61719f42c98.png

使用空配置从com.oracle.usagetracker.quote生成的跟踪日志:

e64650fdf9f999017de026d3c250188f.png

运行global_javatracker.bat,将会执行命令ping 172.0.1.1> = null。如上图中命令提示符最后的提示所示,创建了一个“null”文件。

至此,我们可以利用Java Usage Tracker实现以下操作:

1、 在

攻击者可以在系统的任意位置执行或创建上述内容,或可编写脚本的文件。但是,如果攻击者想要成功利用这个漏洞做一些事情,还需要两个条件:

1、需要在关键位置(比如:自动启动脚本)中创建恶意文件。

2、需要有权访问关键位置,应该由高权限的

实际上,这两个条件都可以实现。举例来说,可以为非特权用户创建Java UsageTracker配置(usagetracker.properties),具有更高特权的进程负责创建恶意日志文件(Usage Tracker日志)。

创建Java Usage Tracker日志文件

如果保存到全局配置路径中(例如Windows的%ProgramData%/Oracle/Java),在系统启动JVM时,就会读取Java Usage Tracker日志文件。接下来,我们再以默认Tomcat安装为例。在安装Tomcat,并使用全局usagetracker.properties之后,跟踪日志会在Tomcat重新启动后创建(如下图所示)。实际上,该文件是由Tomcat服务创建的,默认情况下会由System运行。

目前,Tomcat服务已经由System运行,因此就可以在任意位置创建恶意文件global_javatracker.bat。但是,配置文件usagetracker.properties还必须由非特权用户创建。

安装Tomcat后,创建的跟踪日志:

fcf5f205b14a7d768d39288706a8ac17.png

Tomcat创建的日志文件:

a8c9e6e25b66ba807bc00a94a82c2995.png

本地权限提升

Java Usage Tracker的全局配置文件,都创建在默认路径%ProgramData%/Oracle/Java/中。此路径中的内容,一部分是在Java安装期间创建的,也有一部分是在执行Java命令时创建的(例如java –c)。

默认情况下,%ProgramData%路径只允许系统的“Users”创建文件。当Oracle或Java路径被建立时,也会继承上级路径的默认权限。下图是%ProgramData%/Oracle/Java/权限的截图:

9d8ae187852077f965717dbf2b2b5f7c.png

我们举例来进一步说明这个漏洞。具有低权限的用户,可以创建恶意配置文件usagetracker.properties。由于Tomcat服务以“System”的权限运行,因此它可以在系统的任何位置创建批处理文件。在批处理文件中,可以包括将脚本写入到启动项位置之类的例程。

目前,攻击者可以通过多种方式,滥用Java Usage Tracker的功能来实现权限提升。我们的研究仅在Windows环境中进行了

攻击者为实现权限提升,可能会组合利用一些漏洞,这些漏洞包括:

1、任意文件类型创建:该漏洞可以通过oracle.usagetracker.logToFile路径实现。例如,可以创建一些类似于批处理文件的脚本。

2、参数注入:通过oracle.usagetracker.additionalProperties配置来实现。

3、本地权限提升:通过%ProgramData%/Oracle/Java中的弱权限来实现。

参考链接

*本文作者:er

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值