🗒️MVEL表达式
2023-3-13
| 2023-4-12
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password
title: 2023-03-13-21-18-58 date: 2023-03-13 21:18:58.415 updated: 2023-03-13 21:19:03.85 url: /archives/2023-03-13-21-18-58 categories:
  • 漏洞 tags:
MVEL△
MVEL为 MVFLEX Expression Language(MVFLEX表达式语言)的缩写,它是一种动态/静态的可嵌入的表达式语言和为Java平台提供Runtime(运行时)的语言。
MVEL通常用于执行用户(程序员)通过配置XML文件或注释等定义的基本逻辑。
它也可以用来解析简单的JavaBean表达式。Runtime(运行时)允许MVEL表达式通过解释执行或者预编译生成字节码后执行。
MVEL表达式解析的模式有两种,分别是
解释模式MVEL.eval(expression, vars)
编译模式MVEL.compileExpression(expression) + MVEL.executeExpression(compiled, vars)
因为这个表达式语言爆出的漏洞不多,目前只看CVE-2020-13942分析.
Apache Unomi 远程表达式代码执行漏洞(CVE-2020-13942)
Apache Unomi 是一个基于标准的客户数据平台(CDP,Customer Data Platform),用于管理在线客户和访客等信息,以提供符合访客隐私规则的个性化体验。在Apache Unomi 1.5.1级以前版本中,存在一处表达式注入漏洞,远程攻击者通过MVEL和OGNL表达式即可在目标服务器上执行任意命令。
影响版本Apache Unomi < 1.5.2 漏洞原理
CVE-2020-11975后修复使用类的方法加载进行注入表达式.对使用类加载的方法进行安全检查.
CVE-2020-13942使用“已经实例化的类”(已经实例化的类),来使用已经存在的、现有的Runtime对象,而不会调用方法,
调用链
org.apache.unomi.web.ContextServlet#service()
org.apache.unomi.web.ContextServlet#handleRequest()
org.apache.unomi.services.impl.personalization.PersonalizationServiceImpl#filter()
org.apache.unomi.services.impl.profiles.ProfileServiceImpl#matchCondition() org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl#testMatch() org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluatorDispatcher#eval() org.apache.unomi.persistence.elasticsearch.conditions.ConditionContextHelper#getContextualCondition() org.apache.unomi.persistence.elasticsearch.conditions.ConditionContextHelper#parseParameter() org.apache.unomi.persistence.elasticsearch.conditions.ConditionContextHelper#executeScript()
MVEL.executeExpression(mvelExpressions.get(script), context);
防御和修复
升级Apache Unomi 版本,删除对任意EL expressions的支持. 参考:https://www.anquanke.com/post/id/261766
 
漏洞
  • 表达式
  • CSRF跨域攻击Apache Commons Configuration远程代码执行漏洞
    目录