CVE-2021-45232 APISIX Dashboard 越权漏洞

 

漏洞描述

在2.10.1之前的Apache APISIX Dashboard中,Manager API使用了两个框架,并在框架‘gin’的基础上引入了框架‘droplet’,所有的API和认证中间件都是基于框架‘droplet’开发的,但有些API直接使用框架‘gin’的接口,从而绕过了认证。

 

利用条件

Apache APISIX Dashboard < 2.10.1版本

 

漏洞原理

漏洞分析

对一个漏洞的分析、先提出几个问题:
1.是什么漏洞
CVE官方给出的描述是 api 未授权漏洞

2.什么原因导致出现了这种漏洞
分析思路(在gtihub上对提交的源码做分析、涉及到认证相关的代码)
在commits中找到提交的修复记录、发现中间件鉴权相关

点进去看修改的代码
移除了 filter包、中间件鉴权方式

修改了authentication文件,对login、version及未经认证的接口处理做了修改。

修改了authentication_test.go 做了修改,对各种状态的请求做了修改

关键修复migrate_test.go中、添加了两个接口的描述、增加了api token验证。

在带有漏洞的版本中、结合migrate_test.go中的修复、判断应该是这两个api存在未授权漏洞。
/apisix/admin/migrate/import
/apisix/admin/migrate/export

漏洞验证

通过访问 http://127.0.0.1:9000/apisix/admin/migrate/export
下载到配置文件 apisix-config.bak

漏洞利用

手动测试:
主要利用过程就是在接口路由中执行一个扩展脚本 , 通过执行系统命令。
通过在路由列表、查看数据时、添加script字段、后跟系统命令。

最终脚本执行是在管理apache/apisix 的 9080端口的容器里

访问创建的路由 http://11.22.33.101:9080/dream 执行扩展脚本
运行docker命令
docker exec -it 0f643a6a69b8 /bin/sh
cd /tmp
ls

 

修复建议

升级到最新版本(https://github.com/apache/apisix-dashboard);
接口添加token验证;
建立白名单、做ip验证。

(完)