Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-89012 — Python exploit for CVE-2026-89012, a Dolibarr SQL filter denylist bypass that uses a blind-boolean oracle to extract password hashes and API keys via the REST API. | Kitploit
Tools/GitHubGitHub/faceless0x7/cve-2026-89012
Password CrackingVulnerability AnalysisExploitationWeb Application ExploitationData ExfiltrationInformation GatheringWeb SecurityPenetration TestingAPI Security
GitHubfaceless0x7/cve-2026-89012

CVE-2026-89012

Python exploit for CVE-2026-89012, a Dolibarr SQL filter denylist bypass that uses a blind-boolean oracle to extract password hashes and API keys via the REST API.

115h 27m agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
View Repository

CVE-2026-89012 — Dolibarr SQL Filter Denylist Bypass

Exploit for CVE-2026-89012: the forbidden-fields denylist in forgeSQLFromUniversalSearchCriteria() (introduced with the CVE-2026-71510 fix) uses a case-sensitive in_array() while the operand charset allows A-Z. Since SQL column resolution is case-insensitive, an authenticated API user can query t.PASS_CRYPTED instead of t.pass_crypted and bypass the denylist. Prefix LIKE predicates turn sqlfilters into a blind-boolean oracle that recovers password hashes character by character.

Record: https://www.cve.org/CVERecord?id=CVE-2026-89012

AffectedDolibarr 24.0.0
Fixed24.0.1
Prerequisitesvalid API token with users->lire
Impactdisclosure of pass_crypted, api_key, pass, pass_temp, openid

Root cause

root@kitploit:~
// 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';
}

Usage

root@kitploit:~
# 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

Standard library only (Python 3.8+). Supports --proxy, --insecure, --timeout.

Note: under a case-insensitive collation (the default) the bcrypt value is recovered exactly up to character case; plaintext columns (llx_adherent.pass via /api/index.php/members, pass_temp) recover byte-exact.

demo

References

  • CVE record: https://www.cve.org/CVERecord?id=CVE-2026-89012
  • Fixed release: https://github.com/Dolibarr/dolibarr/releases/tag/24.0.1
  • Patch commit: https://github.com/Dolibarr/dolibarr/commit/7a04d9c970e45e15d29c91e6f5a34a262c6c51c8

Disclaimer

For authorized testing and research only. Use only against systems you own or have explicit permission to test.

Download Tool