默认密钥漏洞 CVE-2020-13945
漏洞信息:
Apache APISIX是一个高性能API网关。
在用户未指定管理员Token或使用了默认配置文件的情况下,Apache APISIX将使用默认的管理员Token edd1c9f034335f136f87ad84b625c8f1,攻击者利用这个Token可以访问到管理员接口,进而通过script参数来插入任意LUA脚本并执行。
意思就是有一个默认的Token,可以直接得到管理员权限,并插入攻击脚本。
环境搭建:
1 | docker-compose up -d 搭建环境 |
1 | docker ps 查看端口为9080 |
漏洞复现:
访问 127.0.0.1/asixpix/admin/routes,显示token不正确
抓这个包,把方法改为POST,加上X-API-KEY: edd1c9f034335f136f87ad84b625c8f1,加上payload
1 | { |
然后,我们访问刚才添加的router,就可以通过cmd参数执行任意命令:
http://ip:9080/attack?cmd=ls
payload分析
因为我们为Route对象配置了匹配规则,所以Apache APISIX 可以将请求转发到对应的上游服务。以下代码会创建一个示例Route配置:
与payload对比,发现payload格式与官方创建路由一致,只是利用script插入了一段lua恶意脚本。
在 Apache APISIX 中,我们在 Route 实体中新增了 script 执行逻辑,可用于接收 Dashboard 生成的 Lua 函数并执行,它支持调用已有插件以复用代码。另外,它也作用于 HTTP 请求的生命周期中的各个阶段,如 access、header_filer、body_filter 等,系统会在相应阶段自动执行 script 函数对应阶段代码.
对lua脚本进行分析,\n是换行
1 | local _M = {} \n function _M.access(conf, ctx)//在access阶段进行处理,检查如果达到的不健康次数超过了配置的最大次数,则就被break掉。这里没找到看得懂的资料。 |