漏洞详情
apache commons-jxpath 是一个java库,是Xpath基于java语言的一种实现。
近日,Apache Commons JXPath爆出存在安全漏洞,该漏洞是由于使用 JXPath 来解释不受信任的 XPath 表达式,这可能容易受到远程代码执行攻击。除了 compile() 和 compilePath() 函数之外,所有处理 XPath 字符串的 JXPathContext 类函数都容易受到攻击,攻击者可以使用 XPath 表达式从类路径加载任何 Java 类,从而导致代码执行。
影响范围
0 <= apache commons-jxpath <= 1.3
漏洞编号
CVE-2022-41852
cvss评分
9.8
环境搭建
构建springboot工程,在pom.xml文件中加入commons-jxpath依赖,如下图所示:
新建一个controller,调用JXPathContext.newContext()并执行context.getValue()函数。
漏洞分析
在getValue(p)处打断点,跟进程序:
在Parser.parseExpression()中解析的xpath表达式:
parser.ReInit()是根据xpath语句初始化解析类。
parser.parserExpression()是使用解析类解析xpath语句。
xpath语句中包含()时,表达式处理类会匹配到ExtensionFunction类。
后面JXPathContextReferenceImpl.getValue(String xpath)::getValue(xpath, expression)会使用ExtensionFunction类解析带()的xpath表达式。
接着判断方法名中是否包含new字符串,是的话判断类中有没有对应的构造函数并返回;否则判断类中有没有对应的静态函数并返回。
调用链如下:
后面使用构造函数或者静态函数的对应Function类,invoke调用反射执行指定类函数代码。
缓解措施
该组件已停止维护,建议使用其它相同功能的组件替代。