
Plugin malveillant du tableau de bord EMQX menant à une RCE
Il s'agit d'un plugin malveillant pour EMQX Dashboard qui permet d'exécuter des commandes à distance.
Le code de ce dépôt est principalement basé sur l'une des dernières versions du dépôt EMQX plugin template, sous licence Apache 2.0.
Si vous souhaitez essayer, vous pouvez lancer une image Docker comme expliqué dans la documentation EMQX.
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
asdf plugin-add erlang https://github.com/asdf-vm/asdf-erlang.git
asdf install erlang 25.3
asdf global erlang 25.3
git clone https://github.com/erlang/rebar3.git
cd rebar3
./bootstrap
sudo chmod +x rebar3
sudo mv rebar3 /usr/local/bin/
mkdir -p ~/.config/rebar3/templates/emqx-plugin-template
git clone https://github.com/ricardojoserf/emqx-RCE ~/.config/rebar3/templates/emqx-plugin-template

rebar3 new emqx-plugin my_emqx_plugin
make -C my_emqx_plugin rel
cp my_emqx_plugin/_build/default/emqx_plugrel/my_emqx_plugin-1.0.0.tar.gz .
À la suite de discussions avec l'équipe de sécurité d'EMQX en février et mars 2025, ils ont confirmé que cela n'est pas considéré comme une vulnérabilité mais plutôt comme une "fonctionnalité" et n'ont aucune objection à rendre ce dépôt public.
Cependant, à partir de la version 5.8.6 (publiée le 25/3/25), cette fonctionnalité sera atténuée par l'introduction d'"une commande CLI pour autoriser explicitement le paquet avant d'installer un plugin via l'API HTTP ou le Dashboard, améliorant la sécurité et empêchant les installations non autorisées" (source).
Par conséquent, dans les versions antérieures, en ayant accès au EMQX Dashboard, vous pouvez obtenir une RCE, mais dans les versions postérieures à 5.8.6, vous obtiendrez cette erreur :
