
phpIpamのリモートコード実行の脆弱性に関する詳細なCVE-2024-55187アドバイザリ。パスポイズニングとPHARファイルアップロードを悪用してサーバー乗っ取りを達成する概念実証が含まれます。
機微な管理パラメータは十分にサニタイズされていないため、攻撃者がシステムバイナリへのパスを汚染することを可能にします。
その後、攻撃者は危険なCSVファイルをアップロードできます。これらのファイルは、PHPの exec() 呼び出しによって評価されるシェルのメタ文字を含むPHARアーカイブとして扱われる可能性があり、リモートコード実行につながります。
緊急 - 9.1 - CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
ファイル functions/classes/class.Scan.php には、次のコード構造があります。

exec() 呼び出しの最初のパラメータは $ping_path パラメータに直接依存しており、このパラメータは管理設定パネルから自由に変更できます。

攻撃者が満たす必要がある唯一の条件は、ping_verify_path 関数が false を返さないようにすることです。このメソッドの定義は次のとおりです。

このメソッドは、PHPのネイティブ関数である file_exists() のみに依存しています。この関数は、ZIP ファイル(.zip 拡張子は不要)を渡すことをサポートし、ZIP アーカイブの構造を調査できます。例:

したがって、攻撃者がサーバー上に、シェルのメタ文字を含む名前のファイルを含む有効な ZIP/PHAR アーカイブをアップロードできる場合、file_exists() チェックをバイパスし、それらのメタ文字が exec() 呼び出しによって評価されることになります。
認証された攻撃者は、"XLS / CSV サブネットインポート" 機能を通じてファイルをアップロードできます。

このファイルは有効なCSVファイルである必要はありません。インポートが失敗した場合、ファイルはサーバーから削除されません。また、import-verify.php スクリプトから、ファイルが保存される場所も分かります。

攻撃者は、リモートコード実行攻撃を実行するためのすべての前提条件を今や手にしています:
悪意のあるアーカイブは次のように作成できます:
