🚨 ファイルアップロードを介した認証なしリモートコード実行(RCE)
📌 概要
- プロジェクト: QloApps
- リポジトリ: https://github.com/Qloapps/QloApps
- 影響を受けるバージョン: <= 1.7.0
- 脆弱性クラス: 認証なしリモートコード実行
- 深刻度: 緊急(Critical)
- CVSS v3.1: (Critical) 9.8 CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- CVE ID: CVE-2025-67325
- 発見者: Neakk Pornlur
- 開示日: 2026-01-09
🧩 説明
QloApps バージョン 1.7.0 以前のホテルレビュー機能における無制限ファイルアップロードにより、リモートの認証されていない攻撃者がリモートコード実行を達成できます。
🎯 影響を受けるエンドポイント
/module/qlohotelreview/default
⚠️ 根本原因
この脆弱性は以下の理由により発生します:
- ファイル拡張子の検証が欠落している。
- アップロードされたファイルがサーバーによって直接実行される。
- エンドポイントで認証・認可チェックが強制されていない。
🔥 影響
悪用に成功すると、攻撃者は以下を行うことができます:
- 任意のOSコマンドを実行する。
- 機密性の高いサーバーファイルを読み取り/書き込み/削除する。
- データベースの認証情報にアクセスする。
- 内部ネットワークサービスにピボットする。
- ホスティングサーバーを完全に侵害する。
この脆弱性は、機密性・完全性・可用性(CIAトライアド)の完全な喪失につながります。
🛠️ QloApps バージョン 1.7.0 での概念実証(PoC)
脆弱なエンドポイントにリクエストするには、有効な id_order と Ajax トークンが必要です。id_order については、1から手動でブルートフォースするか、ゲストアカウントを作成して部屋を予約することで取得します。Ajax トークンは任意のホテルルームページから取得できます。
1. Ajax トークンの取得
2. ホテルをレビューし、細工した画像+PHP ウェブシェルをアップロードします。
3. リモートコード実行のトリガー
アップロードしたウェブシェルは https://target.com/modules/qlohotelreview/views/img/review/<id_order>/1.php にあります。
