Nacos-SQL注入漏洞(CVE-2021-29442)复现详解
Nacos嵌入式数据库Derby存在SQL注入漏洞,影响版本≤1.4.1。漏洞位于/nacos/v1/cs/ops/derby接口,因缺少鉴权且仅校验SQL语句是否以"select"开头,导致攻击者可查询约20个默认表数据。虽然受限于代码仅允许SELECT操作及1000行结果限制,但仍可泄露敏感信息。漏洞通过代码审计发现,提示开发者需加强接口鉴权和输入过滤。
嵌入式数据库derby,SQL注入漏洞,影响版本:
Nacos <=1.4.1
漏洞讲解:
/nacos/v1/cs/ops/derby是Nacos的数据库接口路径,该路径编写的代码出现了鉴权缺少的情况,导致任意人员都可以通过sql参数查询任意数据。不过由于代码限制,该参数仅允许进行select查询操作。
漏洞复现:
访问首页

访问此漏洞存在路径/nacos/v1/cs/ops/derby

直接就提示了必要参数"sql"不存在,我们加上去试试。

提示只运行进行查询操作,1.4.1以下版本的nacos默认表名称有以下这些:
users
permissions
roles
tenant_info
tenant_capacity
group_capacity
config_tags_relation
app_configdata_relation_pubs
app_configdata_relation_subs
app_list
config_info_aggr
config_info_tag
config_info_beta
his_config_info
config_info
进行sql查询测试

查询成功,复现完毕。
漏洞成因
根据derby,sql,select关键词,或是直接根据空参数报错提示字符寻找关键代码处。


这里可以看见,进行了两组字符比较,那么它把sql函数和什么东西比较了?往上找一下

找到了,那么这段代码就可以简化成
if (StringUtils.startsWithIgnoreCase(sql, select)) {
if (!StringUtils.containsIgnoreCase(sql, ROWS FETCH NEXT)) {
sql += OFFSET 0 ROWS FETCH NEXT 1000 ROWS ONLY;
}
}
return RestResultUtils.failed("Only query statements are allowed to be executed");
只要传参的第一个字符为select,就可以进行数据库操作,不过也局限于这个现在,只能进行查询操作,最后这个limit函数意思很明确,从第0页开始获取接下来1000行的数据。
总结:
该漏洞一开始被发现是因为该接口路径通过代码审计暴露,发现并没有做鉴权处理,可直接访问,然后通过访问页面的提示词逐步追溯到关键代码区块进行审计,从而完成闭环,造成严重漏洞。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)