Trusted Design

CVE-2022-46169 の詳細

CVEの情報

説明:
Cacti is an open source platform which provides a robust and extensible operational monitoring and fault management framework for users. In affected versions a command injection vulnerability allows an unauthenticated user to execute arbitrary code on a server running Cacti, if a specific data source was selected for any monitored device. The vulnerability resides in the `remote_agent.php` file. This file can be accessed without authentication. This function retrieves the IP address of the client via `get_client_addr` and resolves this IP address to the corresponding hostname via `gethostbyaddr`. After this, it is verified that an entry within the `poller` table exists, where the hostname corresponds to the resolved hostname. If such an entry was found, the function returns `true` and the client is authorized. This authorization can be bypassed due to the implementation of the `get_client_addr` function. The function is defined in the file `lib/functions.php` and checks serval `$_SERVER` variables to determine the IP address of the client. The variables beginning with `HTTP_` can be arbitrarily set by an attacker. Since there is a default entry in the `poller` table with the hostname of the server running Cacti, an attacker can bypass the authentication e.g. by providing the header `Forwarded-For: <TARGETIP>`. This way the function `get_client_addr` returns the IP address of the server running Cacti. The following call to `gethostbyaddr` will resolve this IP address to the hostname of the server, which will pass the `poller` hostname check because of the default entry. After the authorization of the `remote_agent.php` file is bypassed, an attacker can trigger different actions. One of these actions is called `polldata`. The called function `poll_for_data` retrieves a few request parameters and loads the corresponding `poller_item` entries from the database. If the `action` of a `poller_item` equals `POLLER_ACTION_SCRIPT_PHP`, the function `proc_open` is used to execute a PHP script. The attacker-controlled parameter `$poller_id` is retrieved via the function `get_nfilter_request_var`, which allows arbitrary strings. This variable is later inserted into the string passed to `proc_open`, which leads to a command injection vulnerability. By e.g. providing the `poller_id=;id` the `id` command is executed. In order to reach the vulnerable call, the attacker must provide a `host_id` and `local_data_id`, where the `action` of the corresponding `poller_item` is set to `POLLER_ACTION_SCRIPT_PHP`. Both of these ids (`host_id` and `local_data_id`) can easily be bruteforced. The only requirement is that a `poller_item` with an `POLLER_ACTION_SCRIPT_PHP` action exists. This is very likely on a productive instance because this action is added by some predefined templates like `Device - Uptime` or `Device - Polling Time`. This command injection vulnerability allows an unauthenticated user to execute arbitrary commands if a `poller_item` with the `action` type `POLLER_ACTION_SCRIPT_PHP` (`2`) is configured. The authorization bypass should be prevented by not allowing an attacker to make `get_client_addr` (file `lib/functions.php`) return an arbitrary IP address. This could be done by not honoring the `HTTP_...` `$_SERVER` variables. If these should be kept for compatibility reasons it should at least be prevented to fake the IP address of the server running Cacti. This vulnerability has been addressed in both the 1.2.x and 1.3.x release branches with `1.2.23` being the first release containing the patch.

CVE更新日: 2022-12-05 21:15:10.527000

CVSSバージョン: 3.1

CVSSスコア: 9.8

KEVの情報

KEV更新日: 2023-02-16

EPSSの情報

EPSSは脆弱性が今後30日以内に悪用される確率を予測するスコアリングシステムで、FIRST(Forum of Incident Response and Security Teams)が提供しています。
EPSSのスコアが高いということは、攻撃されるリスクが高いことを意味するので、早めの対策が必要です。

EPSSスコア: 0.998260000

EPSS更新日: 2026-10-20 00:00:00

SSVCの情報

SSVCはカーネギーメロン大学ソフトウェア工学研究所が提案する脆弱性の評価手法です。ステークホルダーごとに脆弱性対応の優先度を決定することを支援します。
本サイトでは、CVE、KEV、EPSSの内容からExploitation(悪用状況)、Technical Impact(技術的影響)、Automatable(自動攻撃の可否)を判定します。

Exploitation: active

Technical Impact: high

Automatable: True

AIを使った解説

解説:

CVE-2022-46169について、以下の観点で解説します。

1. 脆弱性の概要

Cactiは、ネットワークの監視および障害管理フレームワークを提供するオープンソースのプラットフォームです。CVE-2022-46169は、Cactiに存在する認証バイパスとコマンドインジェクションの複合的な脆弱性です。この脆弱性は、remote_agent.phpファイルに存在します。

具体的には、以下の2つの欠陥が組み合わされています。 * 認証バイパス: remote_agent.phpファイルは認証なしでアクセス可能であり、lib/functions.php内のget_client_addr関数がクライアントのIPアドレスを決定するために$_SERVER変数(特にX-Forwarded-Forヘッダーなど)をチェックします。攻撃者はこのヘッダーを任意に設定することで、Cactiサーバー自身のIPアドレスを偽装し、pollerホスト名チェックを通過して認証をバイパスできます。 * コマンドインジェクション: 認証がバイパスされた後、攻撃者はpolldataアクションをトリガーできます。このアクションでは、データベースからpoller_itemエントリが読み込まれます。もしpoller_itemのactionがPOLLER_ACTION_SCRIPT_PHP(値 2)に設定されている場合、攻撃者はhost_idやlocal_data_idsパラメータを通じてproc_open関数を介したコマンドインジェクションを実行し、任意のOSコマンドを実行する可能性があります。POLLER_ACTION_SCRIPT_PHPアクションは「Device - Uptime」や「Device - Polling Time」のような一部の事前定義テンプレートで追加されるため、本番環境で存在する可能性が非常に高いです.

1.1 影響

この脆弱性が悪用されると、認証されていない攻撃者がCactiを実行しているサーバー上で任意のコードを実行できるようになります。これにより、攻撃者は以下のことが可能になります。 * 対象システム上で任意のシステムコマンドの実行。 * 昇格された権限で悪意のある活動の実行。 * 情報の取得、情報の改ざん、およびサービス運用妨害 (DoS) 状態への誘導。 * サーバーの制御権の奪取。

1.2 深刻度

CVE-2022-46169は、CVSSv3スコアが9.8(緊急/Critical)と評価されており、非常に深刻な脆弱性です。米サイバーセキュリティインフラストラクチャセキュリティ庁(CISA)の「悪用が確認された脆弱性カタログ(KEV)」にも追加されており、サイバー攻撃で積極的に悪用されていることが確認されています。

2. 対象となる環境

2.1 影響を受けるOSバージョン

この脆弱性は、特定のOSバージョンではなく、Cactiのバージョンに依存します。

影響を受けるCactiのバージョン: * Cactiバージョン1.2.22およびそれ以前のバージョン(1.2.xブランチ)。 * Cactiバージョン1.3.0より前のバージョン(1.3.xブランチ)。

2.2 影響を受ける設定

  • POLLER_ACTION_SCRIPT_PHPタイプのアクションを持つpoller_itemが設定されているCactiのインストール(これはデフォルトテンプレートで一般的に設定されています)。

3. 影響を受けた時の兆候

検索結果には、直接的な「影響を受けた時の兆候」としてユーザーが確認できる具体的な症状の記載はありませんでした。しかし、本脆弱性はリモートコード実行を可能にするため、以下のような兆候が考えられます(検索結果に基づく直接的な記述ではないため、一般的なRCEの兆候です)。

  • Cactiサーバー上で見覚えのないプロセスが実行されている。
  • 不審なネットワーク通信が発生している。
  • システム設定やデータが意図せず改ざんされている。
  • Cactiのログファイルに異常なアクセスやエラーが記録されている。

4. 推奨対策

4.1 本対策

  • Cactiのアップデート: 影響を受けるCactiのバージョンを、以下の修正済みバージョンにアップグレードしてください。
    • Cactiバージョン1.2.23以降。
    • Cactiバージョン1.3.0以降。

4.2 暫定回避策(緩和策)

パッチの適用がすぐにできない場合、以下の緩和策を検討できます。 * lib/functions.phpファイル内のget_client_addr関数が任意のIPアドレスを返さないように変更する(例えば、HTTP_...で始まる$_SERVER変数を信用しないようにする)。 * remote_agent.phpファイルを修正し、poll_for_data()関数内で$poller_idパラメータを取得する際にget_nfilter_request_var関数の代わりにget_filter_request_var関数を使用する。 * $poller_idパラメータをproc_open()関数に渡す前にescapeshellarg()関数を使用してエスケープ処理を行う。 * Cactiのインストールに対して、定期的に更新とセキュリティパッチを確認する。 * ネットワークレベルのフィルタリングやWAFルールを導入し、特にX-Forwarded-Forヘッダーの悪用とremote_agent.phpへの不正なリクエストを検知・ブロックする。

参照したサイト

NVDサイト

NVDでCVEの詳細を見る

戻る