越权跳转导致的flowable命令执行
字数 1200 2025-08-29 08:32:18
Flowable工作流引擎命令执行漏洞分析与利用
漏洞背景
Flowable是一个轻量级的工作流和业务流程管理(BPM)平台,基于Java开发。在特定配置下,Flowable可能允许攻击者通过Shell任务执行任意系统命令,导致远程代码执行(RCE)漏洞。
漏洞发现过程
-
初始访问:通过越权跳转漏洞获取管理员权限
- 发现系统存在端口跳转功能:
http://xxx.com:8092/login?username=xx&token=xxx - 将username参数修改为admin后成功以管理员身份进入后台
- 发现系统存在端口跳转功能:
-
功能探索:发现流程模板功能使用Flowable工作流引擎
- 在后台找到"流程模板"功能点
- 确认系统使用Flowable作为工作流引擎
-
漏洞挖掘:发现Shell任务功能
- 在Flowable中找到"Shell任务"模块
- 该模块允许配置并执行系统命令
漏洞利用技术细节
Shell任务配置
Flowable支持通过XML配置Shell任务,关键配置如下:
<serviceTask id="shellEcho" flowable:type="shell">
<extensionElements>
<flowable:field name="command" stringValue="cmd" />
<flowable:field name="arg1" stringValue="/c" />
<flowable:field name="arg2" stringValue="echo" />
<flowable:field name="arg3" stringValue="EchoTest" />
<flowable:field name="arg4" stringValue=">" />
<flowable:field name="arg5" stringValue="D:\content\sec.txt" />
<flowable:field name="wait" stringValue="true" />
<flowable:field name="outputVariable" stringValue="resultVar" />
</extensionElements>
</serviceTask>
图形化界面配置
在实际利用中,攻击者可以通过图形化界面直接配置上述参数:
- 命令(command):指定要执行的程序(如cmd、powershell等)
- 参数(arg1-argN):指定命令的参数
- 等待(wait):是否等待命令执行完成
- 输出变量(outputVariable):存储命令输出的变量名
漏洞利用步骤
-
创建恶意流程模板
- 在图形界面中配置Shell任务
- 设置要执行的恶意命令(如写入文件、反弹shell等)
-
部署流程模板
- 将创建的恶意模板部署到系统中
- 确保模板被成功保存并可用
-
触发命令执行
- 发起配置好的流程
- 系统会自动执行流程中的Shell任务
实际利用案例
-
测试写入文件
- 配置命令:
cmd /c echo test > D:\content\sec.txt - 成功在目标系统创建文件
- 配置命令:
-
尝试写入JSP Webshell
- 发现写入的JSP文件被直接下载,无法执行
- 判断系统可能是JAR包环境,无法直接部署Webshell
-
使用PowerShell执行命令
- 改为使用PowerShell命令
- 成功执行并获得预期效果
防御措施
-
权限控制
- 严格限制流程模板的创建和修改权限
- 实施最小权限原则,避免普通用户拥有管理员权限
-
输入验证
- 对Shell任务的配置参数进行严格验证
- 禁止使用危险命令和特殊字符
-
安全配置
- 禁用或限制Flowable的Shell任务功能
- 使用安全沙箱限制命令执行环境
-
系统加固
- 定期审计流程定义和模板
- 监控异常的命令执行行为
-
修复越权漏洞
- 修复初始发现的越权跳转漏洞
- 实施严格的会话管理和身份验证
总结
该漏洞展示了权限提升与命令执行链式攻击的典型案例。通过初始的越权访问获取管理员权限后,攻击者可以利用Flowable工作流引擎的功能特性实现系统命令执行。这种攻击强调了纵深防御的重要性,需要从多个层面实施安全控制。