浪潮clusterengine 未授权RCE

浪潮clusterengine 未授权RCE

浪潮clusterengine是浪潮HPC的管理端,是许多大型厂商内部的重要的集群管理软件。

经测试,该系统内部存在诸多未授权接口,可导致任意命令执行

分析

  • 命令执行

    在底层定义的 ExecuteUtil 类中,构造了命令执行接口(就很离谱),对 cmd 参数并没有做过滤直接拼接到 /bin/sh 语句中,调用java.lang.runtime.getruntime() 直接执行(更加离谱)

    命令执行

  • 查找调用链

    全局搜索 doCommand 方法,发现存在大量接口调用,随意选择了第一个包 accountMgr 中的 Command 类,发现在 getuserjobs 方法中调用该方法。

    第一处调用

    该方法将传入的参数直接拼接在构造的命令语句后也并无过滤,那我们可以继续往前追这个方法

    发现 getBillDetail 调用了该方法,且也是直接传入参数并未过滤

    上一处调用

    接着进入 Management 类,发现是通过传入的 operation 参数来判断执行什么方法。

    在上一处

    image-20210302160345043

    最后在 Management 类定义的 getBillDetail 方法中,发现该方法直接调用了传入的参数,并传入command类定义的 getBillDetail 方法中

    last

    可以看到这个方法在 doResponse 调用,追一下发现最终在 servlet 类中调用这个方法

    image-20210302215036192

    根据标记是 acctMgrSerlvet 接口

    image-20210302215202008

思路

调用链很清晰,后端接收了前端传入的参数后最终拼接在底层的 executeutil 模板中的命令执行参数里,并且接收参数并没有做过滤。

那通过该接口拼接参数,通过 & 闭合,即可造成rce

攻击

构造参数即可

image-20210302220212590

image-20210302220100458

经检测存在不止一个接口未授权rce


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!