
CVE-2023-46474の技術解説と概念実証。PMB <=7.5.3における無制限ファイルアップロードを介したリモートコード実行の脆弱性であり、再現手順と修正ガイダンスを含む。
CVE-2023-46474
| CVSS v3.1 Vector | CVSS v3.1 Score |
|---|---|
| AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H | 9.1 |
Devensys Cybersecurity の Marcus Reynaud による侵入テストの一環として発見されました。
pmb/admin/convert/start_import.php スクリプトは、Unrestricted File Upload タイプの脆弱性に対して脆弱であり、サーバー上で任意のコードを実行できるようになります。

攻撃者は、この機能を利用するために、事前にプラットフォームへの管理者アクセスを取得する必要があります。
このPHPスクリプトは、ユーザーがアップロードしたファイルの拡張子を検証せず、拡張子を保持したままWebサーバーがアクセス可能なディレクトリに保存します。そのため、PHPスクリプトをアップロードし、アップロード先にアクセスすることで実行することが可能です。
この動作は以下のように再現することができます:
システム上で実行したいコードを含む .php ファイルを送信します。ここでは、システムコマンド id を実行します。

レスポンスを確認することで、サーバーに書き込まれたファイル名を取得できます。

コードを実行するには、ブラウザで /pmb/temp/[ファイル名].php にアクセスするだけです。

コマンドの結果がサーバーから返されます。
この脆弱性の原因は、ディスクに書き込む前にファイルに対する検証が欠如していることです:

この脆弱性を修正するには、ユーザーがアップロードしたファイルに対して拡張子の検証を実装する必要があります。
特定のファイル拡張子のみを許可するホワイトリスト方式の使用をお勧めします。
また、拡張子を省略してファイルをディスクに書き込むこともできます(一時的な保存であることを考慮してください)。
さらに、ファイルをWebサーバーのスコープ外のディレクトリに書き込むことも可能であり、これによりファイルがインターネット上でアクセスできなくなり、コードが実行されることはありません。
バージョン 7.5.4 以降は脆弱ではなく、スクリプトは完全に書き直されています。