漏洞描述
在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
修复建议
升级到最新版本;
接口添加token验证;
建立白名单、做ip验证。