文章目录

  • 影响版本
  • 漏洞原理(机翻自CVE页面)
  • 漏洞复现
    • 环境配置
      • jdk版本
      • pom.xml
    • 基本使用demo
    • PoC
  • 代码审计
  • 对生产环境的影响
  • 漏洞修复
  • 参考

影响版本

Apache Commons Configuration: 2.4 ~ 2.7

漏洞原理(机翻自CVE页面)

Apache Commons配置执行变量插值,允许属性被动态地评估和扩展。插值的标准格式是"${prefix:name}",其中 "prefix "用于定位执行插值的org.apache.commons.configuration2.interpol.Lookup的一个实例。从2.4版本开始,一直到2.7版本,默认的Lookup实例集包括可能导致任意代码执行或与远程服务器联系的插值器。这些查找器是 - “script” - 使用JVM脚本执行引擎(javax.script)执行表达式 - “dns” - 解析dns记录 - “url” - 从urls加载值,包括从远程服务器加载值 如果使用不受信任的配置值,使用受影响版本中的插值默认值的应用程序可能会受到远程代码执行或无意中与远程服务器接触的影响。建议用户升级到Apache Commons Configuration 2.8.0,该版本默认禁用了有问题的插值器。

漏洞复现

环境配置

jdk版本

java version “11” 2018-09-25

pom.xml

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-configuration2 -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-configuration2</artifactId><version>2.7</version>
</dependency>

基本使用demo

import org.apache.commons.configuration2.interpol.ConfigurationInterpolator;
import org.apache.commons.configuration2.interpol.InterpolatorSpecification;public class Main {public static void main(String[] args) {InterpolatorSpecification specification = new InterpolatorSpecification.Builder().withPrefixLookups(ConfigurationInterpolator.getDefaultPrefixLookups()).withDefaultLookups(ConfigurationInterpolator.getDefaultPrefixLookups().values()).create();ConfigurationInterpolator interpolator = ConfigurationInterpolator.fromSpecification(specification);System.out.printf("%s", interpolator.interpolate("${env:Path}"));}
}

运行,通过ConfigurationInterpolator.interpolate()方法解析出表达式的值

PoC

解析表达式${script:javascript:java.lang.Runtime.getRuntime().exec('calc')}

代码审计

进入方法ConfigurationInterpolator.interpolate(),传入字符型的单一变量进入this.resolveSingleVariable()解析变量

解析之前还有一步调用extractVariableName()方法

该方法把${}包裹的表达式的值截取出来了,之后就传入外层的this.reslove()解析

首先截取出prefix:name,然后调用this.fetchLookupForPrefix("script").lookup("javascript:java.lang...")方法,也就是调用prefix对应插值器的lookup方法查找name对应的值

fetchLookupForPrefix("script")获取了键script对应的StringLookupAdapter对象

实际对应的是ScriptStringLookup对象,然后调用它的lookup方法

首先从传入的name中继续分割出engineNamescript

然后加载脚本引擎、调用对应引擎的eval方法执行name中的script脚本

这里直接加载了javascript的引擎,老套路了,eval直接就能执行java代码

对生产环境的影响

Apache Commons Configuration生产中是用于对配置文件的操作,因此更多是通过读取配置文件RCE,前置条件还要写文件+获取配置文件路径,然后调用 ConfigurationInterpolator.interpolate(payload)触发

漏洞修复

官方推送了2.8.0版本修复了bug

把三个危险插值器移除了

参考

Commons Configuration – Basic Features (apache.org)

commons-configuration2提供的变量占位符(Variable Interpolation)功能 - 腾讯云开发者社区-腾讯云 (tencent.com)

CVE - CVE-2022-33980 (mitre.org)

CVE-2022-33980: Apache Commons Configuration insecure interpolation defaults-Apache Mail Archives

oss-security - CVE-2022-33980:Apache Commons Configuration 不安全插值默认值 (openwall.com)

Commons Configuration – Apache Commons Configuration Release Notes

欢迎关注我的CSDN博客 :@Ho1aAs
版权属于:Ho1aAs
本文链接:https://ho1aas.blog.csdn.net/article/details/126114740
版权声明:本文为原创,转载时须注明出处及本声明

『Java CVE』CVE-2022-33980: Apache Commons Configuration 读文件RCE相关推荐

  1. 使用Apache Commons Configuration读取配置信息

    2019独角兽企业重金招聘Python工程师标准>>> 在项目中使用一些比较新的库总会给你带来很多快乐,在这篇文章中,我将会给你介绍一个在Java中读取配置文件的框架--Apache ...

  2. 『Java安全』Tomcat内存马_动态注册Listener内存马

    『Java安全』反序列化- 文章目录 前言 Tomcat Servlet API Listener介绍 ServletRequestListener介绍 ServletRequestListener调 ...

  3. 2017-2018-2 165X 『Java程序设计』课程 助教总结

    2017-2018-2 165X 『Java程序设计』课程 助教总结 本学期完成的助教工作主要包括: 编写300道左右测试题,用于蓝墨云课下测试: 发布博客三篇:<2017-2018-2 165 ...

  4. 20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结

    20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: http://www.cnblogs.com/ ...

  5. java安装 1723_2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-准备阶段...

    2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-准备阶段 在一个人孤身奋斗了将近半个学期以后,终于迎来的我们的第一次团队协作共同编码,也就是,我们的第一个结对编程练 ...

  6. [日推荐]『Java学习者』爱学习的程序猿看过来~

    2019独角兽企业重金招聘Python工程师标准>>> 福利时间--今天给程序员大大们推荐一款你们一定会喜欢的小程序,里面有干货哦 Java学习者 **简介:**java学习,Jav ...

  7. 『Java安全』反序列化-CC7反序列化漏洞POP链分析_ysoserial CommonsCollections7 PoC分析

    文章目录 前言 代码复现 工具类 PoC 代码审计 | 原理分析 1. LazyMap.get()调用this.factory.transform() 2. AbstractMap.equals()调 ...

  8. intellij中出現java.lang.NoClassDefFoundError: org/apache/commons/configuration/Configuration解決方案

    完整报错如下: Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties 19/03/06 19: ...

  9. Apache Commons Configuration使用入门

    项目开发过程中不免有许多在运行过程中需要经常改动的参数,比如说数据库的连接参数等.把这些需要经常改动的参数保存在配置文件中,让用户可以修改,这样既增强了项目的适应能力,也减少了我们的维护成本.这种做法 ...

最新文章

  1. 外观模式 - 设计模式学习
  2. Mysql主从同步延迟问题及解决方案
  3. 双机热备+Win2003下集群案例
  4. 瞎忙不如不忙——读高德拉特《目标》有感
  5. OSPF中DR选举机制详解
  6. 搭建本地Yum软件源安装Cloudera Manager 5
  7. vsftpd服务与客户机的传输和下载
  8. Android应用Activity、Dialog、PopWindow、Toast窗体加入机制及源代码分析
  9. c语言see函数,vprintf() - C语言库函数
  10. 深入理解Nginx 阅读笔记(一)
  11. java过滤空号了停机号_手机号码空号检测
  12. ThinkPad P53,T490,T590 Win7显卡驱动
  13. 清华大学计算机刘旭鑫,助学服务 | 走近广东狮子会客家希望班高考“学霸”刘旭鑫、程春花同学...
  14. r7 2700X装Linux,R7-2700X配什么主板?AMD锐龙7 2700X主板推荐 (全文)
  15. 关于区块链的想法和感想
  16. conda创建Python虚拟环境
  17. html页面插入百度谷歌地图的方法
  18. python 自动化测试基础
  19. tensorflow 1.12使用中的问题
  20. QT软件开发中的图标设置与好用的图标网站

热门文章

  1. 如何在Google Chrome浏览器中清除浏览历史记录
  2. 树莓派无线中继的实现
  3. 转行学Java怎么样?Java培训机构有什么避雷的要点?
  4. 箱线图(Boxplot)也称箱须图(Box-whisker Plot)
  5. FDI-01-基于PCA的TEP故障检测
  6. 多亏了这几款软件,我才能坚持写博客这么多年!
  7. 迅雷的地址解析--把自己的下载地址变成迅雷链接
  8. 奥鹏计算机19春在线作业,东师多媒体计算机技术19春在线作业2【标准答案】
  9. mysql45讲--09-44实践篇总结
  10. GPS定位详解——涉及GPS版本变化、定位获取失败等常见问题。