
Proof of Concept for CVE-2026-65761 - EasyStore Pro の `filter_sortby` を介した未認証SQLインジェクションの概念実証
filter_sortby を介した SQL インジェクションの概念実証このリポジトリは、CVE-2026-65761 に関する教育目的の概念実証を提供します。この脆弱性は、EasyStore Joomla 拡張機能のバージョン 1.0.0 から 2.0.2(両端を含む)に影響する、認証不要の SQL インジェクションです。filter_sortby パラメータはライセンスで制限されているため、影響を受けるのはプラグインの Pro 版のみです。
PoC(poc.py)は、製品検索フロー(option=com_easystore&view=products&task=search)の filter_sortby リクエストパラメータにおける SQL インジェクションを、エラーベースのチェックによって実証します。
このプロジェクトと Docker スタックは、ローカルでのセキュリティテストおよび教育目的のみを対象としています。
所有していないシステム、または明示的にテストの許可を得ていないシステムに対して実行しないでください。
脆弱なコードパスは Pro 限定機能にあります。再現可能なローカルラボでコードパスを監査可能にするため、このリポジトリはコンテナ内に一時的なモンキーパッチを適用し、Pro 限定の並べ替え/フィルターパスを実行できるようにしています。
これはライセンス回避テクニックとして提供されるものではありません。実際のデプロイメントで有料機能にアクセスするために使用してはいけません。その唯一の目的は、隔離されたローカルテスト環境での防御的なセキュリティ研究と、協調的な脆弱性の検証を可能にすることです。
.
├── backup.sql.gz
├── poc.py
├── vulnerable/
│ ├── docker-compose.yaml
│ └── setup.sh
└── patched/
├── docker-compose.yaml
└── setup.sh
poc.py: エクスプロイト PoC。vulnerable/docker-compose.yaml: http://127.0.0.1:9999 で動作する脆弱性のあるラボスタック。patched/docker-compose.yaml: http://127.0.0.1:9999 で動作するパッチ適用済みラボスタック。backup.sql.gz: この PoC に必要な最小限の EasyStore ショップデータセット(製品 2 件、カテゴリ 1 件、基本ショップ設定)を含むブートストラップダンプ。vulnerable/setup.sh と patched/setup.sh: 実行中の MariaDB コンテナに backup.sql.gz をインポートします。pip install requests
脆弱な環境を起動します:
docker compose -f vulnerable/docker-compose.yaml up -d
次に、必要な EasyStore テストデータを投入します:
cd vulnerable
./setup.sh
cd ..
PoC を実行します:
python3 poc.py
期待される脆弱性ありの結果:
[!] Target is vulnerable to CVE-2026-65761!
最初に脆弱なスタックを停止します(実行中の場合):
docker compose -f vulnerable/docker-compose.yaml down -v
パッチ適用済み環境を起動します:
docker compose -f patched/docker-compose.yaml up -d
次に、同じく必要な EasyStore テストデータを投入します:
cd patched
./setup.sh
cd ..
同じ PoC を実行します:
python3 poc.py
期待されるパッチ適用済みの結果:
[-] Target is not vulnerable to CVE-2026-65761
poc.py では、ターゲット URL はデフォルトで http://localhost:9999 です。
ラボを別のホストやポートで実行する場合は、これを調整してください。