我们的 AI 引擎 Neutron 在加州大学伯克利分校的 CyberGym 基准测试中取得了 96.75% 的成绩。 了解更多

安全

安全

CVE-2024-5315 Dolibarr SQL 注入漏洞调查

CVE-2024-5315:一个已遭积极利用的 Dolibarr SQL 注入漏洞,其公开的修复版本信息有误。

2024 年 5 月 24 日,INCIBE 协调发布了一个影响 Dolibarr(一款开源企业管理系统,ERP/CRM)的严重漏洞,受影响的具体版本为 9.0.1。该漏洞由 Rafael Pedrero 发现。

在 Ostorlab,我们迅速做出响应,为扫描器添加了相应的检测能力。然而,INCIBE 并未公布有关该漏洞利用方式或修复版本的明确细节。此外,社区文章错误地称修复版本为 9.0.2。因此,我们决定自行展开调查。

定位漏洞

存在漏洞的代码位于文件 htdocs/commande/list.php 中,其中 viewstatut 参数未经任何验证就被直接注入到 SQL 查询中。

$viewstatut = GETPOST('viewstatut')
if ($viewstatut < 4 && $viewstatut > -3) { if ($viewstatut == 1 && empty($conf->expedition->enabled)){ 
    $sql .= ' AND c.fk_statut IN (1,2)'; // If module expedition disabled, include orders with status 'sending in process' into 'validated' 
} 
else{ 
    $sql .= ' AND c.fk_statut = ' . $viewstatut; 
}
$resql = $db->query($sql);

所需权限:

漏洞发布方并未说明利用该 SQL 注入所需的权限。一些文章声称这是一个无需身份验证的 SQL 注入。然而,在调查存在漏洞的端点后我们发现,它会 requires ../main.inc.php,而该文件会验证客户端是否已通过身份验证。

替代文本
身份验证模式检查

概念验证(PoC):

在本地搭建存在漏洞的 Dolibarr 版本后,我们成功证明了该漏洞的存在。 首先,我们来看看输入是如何反映到 SQL 查询中的。 请求 /commande/list.php?viewstatut=testinjection 后,在执行前拦截到的最终查询如下:

SELECT s.rowid as socid, s.nom as name, s.email, s.town, s.zip, s.fk_pays,
s.client, s.code_client, typent.code as typent_code, state.code_departement
as state_code, state.nom as state_name, c.rowid, c.ref, c.total_ht,
c.tva astotal_tva, c.total_ttc, c.ref_client, c.date_valid, c.date_commande, 
c.note_private, c.date_livraison as date_delivery, c.fk_statut,
c.facture as billed, c.date_creation as date_creation, c.tms as date_update,
p.rowid as project_id, p.ref as project_ref FROM llx_societe as s 
LEFT JOIN llx_c_country as country on (country.rowid = s.fk_pays) LEFT JOIN
llx_c_typent as typent on (typent.id = s.fk_typent) LEFT JOIN
llx_c_departements as state on (state.rowid = s.fk_departement), llx_commande
as c LEFT JOIN llx_projet as p ON p.rowid = c.fk_projet WHERE c.fk_soc = s.rowid
AND c.entity IN (1) AND c.fk_statut = testinjection ORDER BY c.ref DESC LIMIT 26

既然我们已经可以直接注入到最终查询中,接下来将验证查询能否顺利执行。

基于时间的检测:

在测试过程中,我们构造出了一个能够成功使服务器产生延迟的载荷。 请求的 URL 如下:

http://localhost/commande/list.php?viewstatut=(SELECT%204498%20FROM%20(SELECT(SLEEP(0)))AgKS)

替代文本
基于时间的 PoC

漏洞利用:

借助 SQLMAP,我们能够直接从数据库中导出数据。

替代文本
sqlmap 结果
替代文本
提取出的数据表

修复版本

原始发布方并未提及修复版本。我们追踪了存在漏洞的文件,并在这个补丁提交中找到了补丁。

替代文本
补丁提交
第一个安全版本是 11.0.0。

保护您的组织

Ostorlab 的开源 KEV 项目已添加检测功能,用于识别存在漏洞的实例。项目地址见此处。

标签:

web, sqli, security, cve, kev