千家信息网

Windows Java Usage Tracker本地提权漏洞分析是怎样的

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章给大家介绍Windows Java Usage Tracker本地提权漏洞分析是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言近期,我们发现了一个Java Us
千家信息网最后更新 2025年12月01日Windows Java Usage Tracker本地提权漏洞分析是怎样的

这篇文章给大家介绍Windows Java Usage Tracker本地提权漏洞分析是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

前言

近期,我们发现了一个Java Usage Tracker中的设计缺陷,可导致攻击者创建任意文件,注入指定参数,并实现本地权限提升。反之,该漏洞可以用于权限提升,从而使攻击者可以访问受漏洞影响系统中的资源,这些资源通常受到保护,或仅限于特定应用程序或用户才有权访问。

我们通过Zero Day Initiative,与Oracle合作修复了这一漏洞,该漏洞已经在Oracle的2018年10月更新中实现修复。因此,需要敦促个人用户及企业尽快更新他们的Java版本。

在本文中,我们将深入研究这一漏洞在Windows上的出现原因、Java Usage Tracker的工作原理以及实现漏洞利用所必要的条件。

Oracle安全更新公告:https://www.oracle.com/technetwork/security-advisory/cpuoct2018-4428296.html。

Java Usage Tracker

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

1、通过启动配置参数,记录有关Java虚拟机(JVM)的日志信息。

2、将数据转储到日志文件中,或将其重定向到UDP服务器。

3、允许Usage Tracker配置中指定自定义属性的日志值。

Java Usage Tracker的配置文件名称为usagetracker.properties。该文件位于全局默认位置,这一位置根据操作系统的不同而有所不同。例如,Windows的默认路径是%ProgramData%\Oracle\Java\。全局默认路径中的usagetracker文件将跟踪系统中所有启动的JVM的使用情况。

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

在上图的第9行中,我们可以看到,JavaUsage Tracker会将日志信息记录到文件global_javatracker.log中。以安装Apache Tomcat(基于Java的开源工具)的系统为例,重新启动服务后,将创建文件global_javatracker.log,并在其中写入Java使用情况跟踪数据。每次,在Tomcat服务启动时,都会向该日志文件中写入新的跟踪信息。

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

用户控制的参数

在文件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添加自定义属性:

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

如上图所示,该行的末尾附加了一个带有null值的已配置跟踪属性com.anotherInterestingProperty= null。其值为null,表明该属性不存在。有两种方法可以控制Java Usage Tracker的行为:设置任意日志路径,或者设置任意自定义属性。目前,这个功能似乎是不能被利用的,但是如果结合了其他安全漏洞,就能够被攻击者利用。

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

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

global_javatracker.bat中自定义属性:


global_javatracker.bat正在被执行:

在这里,需要注意附加属性ping 172.0.1.1 >= null。当我们执行批处理文件global_javatracker.bat时,会显示错误消息"VM start"无法识别。发生此错误的原因在于,Java Usage Tracker的属性文件仅生成一行,并且其分隔符是根据配置中的com.oracle.usagetracker.separator=, 来决定的,使用了逗号作为分隔符。

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

带有"new line"分隔符的JavaUsage Tracker:


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

上图中的最后一行,包含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:


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

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

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

1、 在文件系统的任意位置创建文件。

2、创建脚本文件,尽管我们在示例中创建了批处理文件,但实际上也可用于创建其他类型的文件。

3、注入任意命令(或与脚本文件相关的任何其他文本)。

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

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后,创建的跟踪日志:

Tomcat创建的日志文件:

本地权限提升

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

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

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

目前,攻击者可以通过多种方式,滥用Java Usage Tracker的功能来实现权限提升。我们的研究仅在Windows环境中进行了测试,但其他操作系统也可能受到该漏洞的影响。

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

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

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

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

关于Windows Java Usage Tracker本地提权漏洞分析是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

文件 日志 漏洞 属性 配置 权限 系统 跟踪 路径 位置 内容 命令 攻击者 用户 攻击 服务 分隔符 脚本 运行 全局 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发总监薪资待遇 关于计算机网络技术的绘画 低功耗服务器的配置 计算机网络安全需求规定 无线网络技术支持工程师 数据库考证含金量 同城交友软件app软件开发公司 网络安全法与公民自由 浙江专业网络技术价目表 网络安全公司组织架构图 服务器linux外还有其他 网络技术可以考专升本吗 数据库用户识别 nba服务器不闪退 山东通用软件开发售价 牟平区商城软件开发推荐 软件开发包括设计助理吗 数据库与数据仓库的技术发展 数据库中如何替换单引号 软件开发外包项目什么是项目外包 正确认识网络技术的作文 服务器AMD如何超频 我的世界基岩版服务器端口怎么填 网络安全的重要性课题 华服互联网科技股份有限公司 网络服务器权限怎么设置 河源软件开发定制 广东揭阳dns服务器云主机 电力互联网科技部 安阳软件开发合理避税怎么进行
0