Apache Commons Configuration远程代码执行漏洞分析

漏洞原理

org.apache.commons:commons-configuration2中,形如形如 ${prefix:name} 的字符串可以被解析,当 interpolate 操作的字符串可控时,漏洞即可以被利用
在2.4版本及以上至2.8.0版本时,支持的列表有这几种

漏洞复现

exp

跟进interpolate函数

interpolate

获取传入的${script:XXX}
继续跟进resolveSingleVariable时

resolve_out

跟进resolve解析strValue

resolve_in

获取prefixPos及后面的name传入FetchLookupForPrefix

FetchLookup

进入nullsafeLookup获取符合name的实体类

nullsafeLookup

lookup寻找逻辑如图

lookup

key不为空且key.length=2还需要符合keys的format
所以很容易构造

1
${script:nashorn:java.lang.Runtime.getRuntime().exec('XXX')}`

触发完毕

fail

2.4之前时获取的value并不是从nullsafeLookup的StringLookup这个方法获取的,而是DummyLookup的Object Lookup。也就无法找到对应的实体类,无法触发。

fail2