
CVE-2024-34832
管理パネルでは、_g や node といったパラメータが、.inc.php ファイルを含めるためのパス構築やPHPコードの実行に使用されます。サーバ上の任意の場所に .inc.php ファイルをアップロードできる悪意のあるユーザーは、パストラバーサル脆弱性を悪用してそれらのファイルをインクルードし、悪意のあるコードを実行できます。
.inc.php 拡張子のファイルをアップロードできること(例:FTPへのアクセス、同じサーバ上の別のアプリケーションでファイルアップロードが可能な場合、CubeCartのアップロード機能における新たな脆弱性など)CubeCartがインストールされているサーバと同じサーバ上でFTPサーバが動作しており、ユーザーが特定の場所にファイルをアップロードできると仮定します。ここでは、FTP経由でアップロードされたファイルはすべて /opt/FTP_Example に格納されるものとします。
さらに、このユーザーが path_traversal.inc.php というファイルをFTP経由でアップロードし、その内容が以下のPHPコード <?php system('whoami;id;hostname;ls') ?> であるとします。

最初はこのファイルをアップロードしても危険はありません。実行されることもなく、ApacheなどのWebサーバのディレクトリ内にもないためです。
同じユーザーはCubeCartの管理パネルで非常に限られた権限、あるいはまったく権限がない可能性もありますが、それでもログインは可能です。例えば、まったく権限のない julio というユーザーを作成しました。

julio としてアプリケーションにログインした後、_g パラメータと node パラメータをテストしました。これらのパラメータはパスの末尾に自動的に .inc.php を追加し、そのファイルに対して include() を使用してPHPコードを実行しているようです。
以下のように、ファイルが見つからない場合、次のエラーメッセージが返されます。

そこで、パスをトラバースしてサーバ上の別のディレクトリ(FTPフォルダなど)にある .inc.php ファイルに到達できないかと考えました。
/opt/FTP_Example フォルダに path_traversal.inc.php というファイルがあったので、ルートディレクトリに到達するまで ../../../ を多数追加してみました。その後、/opt/FTP_Example/path_traversal を追加すると、アプリケーションが自動的にパスの末尾に .inc.php を追加しました。
以下のように、コードが正常に実行されました。

node パラメータは実際にはスラッシュ (/) をエスケープしますが、_g はエスケープしないことがわかりました。パス構築に使用されるすべてのパラメータは、パストラバーサル脆弱性を防ぐためにスラッシュをエスケープする必要があります。
この脆弱性の悪用には前提条件があり、リスクが大幅に軽減されますが、それでもパッチを適用する利点があります。CubeCartの作成者がこの脆弱性をどのように修正したかを参考文献で確認し、公式リリースでパッチが適用されるまで、ご自身のCubeCartインスタンスに修正を適用できます。