CVE-2022-46169
認証なしコマンドインジェクション
- 公開済み
- 2022/12/05
- 更新済み
- 2025/10/21
- CNA の割り当て
- GitHub_M
- 観察された証拠
- 2023/02/16
プライマリ CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H高 · 今後 30 日間
- パーセンタイル
- 100.0%
- モデルの日付
- 2026/09/21
EPSS は統計的な推定値であり、確実性や影響の尺度ではありません。 CVSS、KEV ステータス、暴露、環境と組み合わせます。
CISA が悪用されたことが判明
この CVE は、CISA の既知の悪用された脆弱性カタログに掲載されています。
概要
Cactiは、ユーザーに堅牢で拡張可能な運用監視および障害管理フレームワークを提供するオープンソースプラットフォームです。影響を受けるバージョンでは、特定のデータソースが任意の監視対象デバイスに選択されていた場合、コマンドインジェクションの脆弱性により、認証されていないユーザーがCactiを実行しているサーバー上で任意のコードを実行できる可能性があります。この脆弱性は`remote_agent.php`ファイルに存在します。このファイルは認証なしでアクセスできます。この機能は`get_client_addr`を介してクライアントのIPアドレスを取得し、`gethostbyaddr`を介してこのIPアドレスを対応するホスト名に解決します。その後、解決されたホスト名に対応するホスト名を持つ`poller`テーブル内のエントリが存在することが確認されます。そのようなエントリが見つかった場合、関数は`true`を返し、クライアントは承認されます。この承認は、`get_client_addr`関数の実装によりバイパスされる可能性があります。この関数は`lib/functions.php`ファイルで定義されており、クライアントのIPアドレスを決定するために複数の`$_SERVER`変数をチェックします。`HTTP_`で始まる変数は攻撃者が任意に設定できます。`poller`テーブルにはCactiを実行しているサーバーのホスト名を持つデフォルトエントリがあるため、攻撃者は例えば`Forwarded-For: <TARGETIP>`ヘッダーを提供することで認証をバイパスできます。これにより、`get_client_addr`関数はCactiを実行しているサーバーのIPアドレスを返します。続く`gethostbyaddr`の呼び出しは、このIPアドレスをサーバーのホスト名に解決し、デフォルトエントリのために`poller`ホスト名チェックを通過します。`remote_agent.php`ファイルの承認がバイパスされた後、攻撃者はさまざまなアクションをトリガーできます。これらのアクションの1つは`polldata`と呼ばれます。呼び出された関数`poll_for_data`は、いくつかのリクエストパラメータを取得し、対応する`poller_item`エントリをデータベースからロードします。`poller_item`の`action`が`POLLER_ACTION_SCRIPT_PHP`と等しい場合、関数`proc_open`を使用してPHPスクリプトが実行されます。攻撃者が制御するパラメータ`$poller_id`は、任意の文字列を許可する関数`get_nfilter_request_var`を介して取得されます。この変数は後で`proc_open`に渡される文字列に挿入され、コマンドインジェクションの脆弱性につながります。例えば`poller_id=;id`を提供することにより、`id`コマンドが実行されます。脆弱な呼び出しに到達するには、攻撃者は`host_id`と`local_data_id`を提供する必要があり、対応する`poller_item`の`action`が`POLLER_ACTION_SCRIPT_PHP`に設定されている必要があります。これらのID(`host_id`と`local_data_id`)は両方とも簡単にブルートフォースできます。唯一の要件は、`POLLER_ACTION_SCRIPT_PHP`アクションを持つ`poller_item`が存在することです。これは本番環境では非常に可能性が高いです。なぜなら、このアクションは`Device - Uptime`や`Device - Polling Time`などのいくつかの定義済みテンプレートによって追加されるからです。このコマンドインジェクションの脆弱性により、`action`タイプが`POLLER_ACTION_SCRIPT_PHP`(`2`)の`poller_item`が設定されている場合、認証されていないユーザーが任意のコマンドを実行できます。承認バイパスは、攻撃者が`get_client_addr`(ファイル`lib/functions.php`)に任意のIPアドレスを返させることができないようにすることで防ぐ必要があります。これは、`HTTP_...`の`$_SERVER`変数を尊重しないことで実現できます。互換性の理由でこれらを維持する必要がある場合は、少なくともCactiを実行しているサーバーのIPアドレスを偽装できないようにする必要があります。この脆弱性は、1.2.xおよび1.3.xの両方のリリースブランチで対処されており、`1.2.23`がパッチを含む最初のリリースです。
ソース
37責任ある使用
脆弱性情報は、自分が所有しているシステム、またはテストを許可されているシステムでのみ使用してください。 Kitploit は公開研究メタデータにリンクしており、エクスプロイト コードや悪意のあるペイロードは保存しません。