免责申明:本文内容为学习笔记分享,仅供技术学习参考,请勿用作违法用途,任何个人和组织利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责,与本平台和发布者无关!!!

漏洞名称

mldong DecisionModel.java ExpressionEngine 代码注入漏洞

漏洞影响

mldong 后台管理

漏洞描述

mldong是一个开源项目,是基于SpringBoot+Vue3快速开发平台、自研的工作流引擎。在com/mldong/modules/wf/engine/model/DecisionModel.java文件的ExpressionEngine函数中发现了一个代码注入漏洞。攻击者通过该漏洞进行的操纵可能导致代码注入,攻击可远程发起。

开源项目地址

https://gitee.com/mldong/mldong

漏洞挖掘过程

在项目源码中寻找危险函数eval(通过代码搜索,这通常会触发表达式注入)

这段代码的主要功能是为决策节点执行自定义执行逻辑。com/mldong/modules/wf/engine/model/DecisionModel.java

通过代码跟踪,发现eval方法是基于ExpressionEngine接口实现的。/cn/hutool/extra/expression/ExpressionUtil.class

getEngine方法是一个静态方法,在实例化ExpresionUtil时将自动调用该方法。最后,找到配置文件,根据文件内容,可以推断eval()方法识别SPEL表达式。

mldong-master\mldong-framework\mldong-base\src\main\resources\META-INF\services\cn.hutool.extra.expression.ExpressionEngine

漏洞验证:

通过调用链,发现eval()方法从实例启动接口开始触发。值得注意的是,它只在执行决策模型时触发,这意味着处理过程需要有判断条件。

进入前端页面,点击添加菜单。


添加后,单击设计菜单,右键单击,选择离开表单。依次选择开始节点、条件判断节点和结束节点。


点击条件判断进行编辑。

Payload:

T(java.lang.Runtime).getRuntime().exec('calc')

单击保存


部署后,在流程定义菜单中启动流程。


成功触发的漏洞。