type
status
date
slug
summary
tags
category
icon
password
Apache Commons Configuration远程代码执行漏洞
Apache Commons Configuration是美国阿帕奇(Apache)基金会的一款通用的配置接口,它主要用于使Java应用程序从多种来源读取配置数据。
CVE-2022-33980
版本
Apache Commons Configuration2.4-2.7
漏洞原理
该漏洞源于Apache Commons配置执行变量插值,允许动态评估和扩展属性。插值的标准格式是"${prefix:name}",其中 "prefix "用于定位执行插值的org.apache.commons.configuration2.interpol.Lookup的实例。默认的Lookup实例集包括可能导致任意代码执行或与远程服务器联系的插值器。这些查找器是:-"script" - 使用JVM脚本执行引擎(javax.script)执行表达式,- "dns" - 解析dns记录,- "url" - 从urls加载值,包括从远程服务器加载值,如果使用不受信任的配置值,使用受影响版本中插值默认值的应用程序可能会受到远程代码执行或无意中与远程服务器接触的影响。
流程
ConfigurationInterpolator#interpolate中对传入的字符串进行解析
在interpolate中传入变量插值的值,在判断是否为String后,调用looksLikeSingleVariable方法进行判断格式是否正确解析了头部和尾部的${}中的值
调用fetchLookupForPrefix方法取出prefix对应的LookUp对象
lookup方法用 : 对criptLookup类对象进行分割,取 : 前面的script关键词获取对应的StringLookup对象
最后通过ScriptEngine.eval的方法执行JavaScript 代码
Apache Commons Text远程代码执行漏洞
Apache Commons Text组件通常在开发过程中用于占位符和动态获取属性的字符串编辑工具包.
CVE-2022-42889
版本:Apache Commons Text1.5-1.9
该漏洞和Apache Commons Configuration一样,为插值表达式漏洞,在1.5到1.9的版本中,该漏洞中的"prefix"用于定位的是org.apache.commons.text.lookup类
流程
StringSubstitutor.replace方法调用substitute解析传入的字符串
在subsititionInValuesDisabled进行格式判断,解析了头部和尾部的${}中的值
剩下的调用就和 Configuration是一样的.
修复和防御
升级Apache Commons的最新版本
删除Lookup实例集对script的调用
过滤用户传入的插值表达式