APISIX 漏洞必备
https://apisix.apache.org/zh/docs/apisix/2.15/architecture-design/apisix/
关于realIp的攻击 https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/120426004 在这里我需要解决的问题:
- apisix的部署架构是什么?
- apisix各个组件如何各司其职?
- apisix的工作原理是什么?
- apisix的插件有哪些?如何发现漏洞?
APISIX 解决的问题:
- 所有API的唯一入口
- 将请求进行转发到不同的后端,或根据请求头将请求转发到不同的服务
- 执行身份验证\授权和限速
- 支持分析,例如监控、日志记录和跟踪
- 避免攻击
APISIX 的框架 
其利用到的技术栈是 NGINX+ ngx_lua的技术基础,充分利用LuaJIT提供的性能。 分为两个部分
- APISIX核心:LUA插件,提供了路由匹配,负载均衡,服务发现,API管理等重要功能。
- 功能丰富的各种内置插件:可观测,安全,流量控制等
其中插件的主要流程是
插件的内部结构
APIsix的基础操作
- 创建上游
即对应的服务器处理,即这些路由被转发到什么服务器上
curl"http://127.0.0.1:9080/apisix/admin/upstreams/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}'
//这里我们创建了一个上游,其编号为 1
- 创建路由
即什么路由通过什么方法进行访问,最终被什么上游进行处理
curl "http://127.0.0.1:9080/apisix/admin/routes/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"uri": "/get",
"host": "httpbin.org",
"upstream_id": "1"
}'
//这里我们创建了一个路由,绑定其上游的编号为 1
APIsix的API接口分类
Admin API
为APISIX服务的API,参数传递给AdminAPI可以控制APISIX节点,默认监听 9080。HTTPS下 9443。用来进行操作路由 插件 上下游 等的管理面 https://apisix.apache.org/zh/docs/apisix/2.15/admin-api/
Control API
默认监听是本地的 127.0.0.1:9090
- 暴露APISIX内部状态的信息
- 控制单个APISIX的数据平面的行为
默认开启,监听在9090,一般有三个接口
/v1/schema
/v1/healthcheck
/v1/gc
APIsix的部署架构
APISix Dashboard 是APISix进行配对的,并且APISIX DashBoard是一个独立的项目。
consumer
可识别相关的消费者是谁,针对不同的消费者有不同的处理过程 ,举例:客户端是谁? 有时候客户端是 nginx服务器,有时候是其他的服务器
Global rule
配置所有的请求都需要进行的规则
Script
在请求/响应的声明周期期间 执行的脚本 ,script配置可直接在 Route上。script和plugin之间只能配置一个。 script是lua代码。
Service
Service 是某类API的抽象(某类Route的抽象),通常与上游服务抽象是意义对应的,Route和Service之间是N:1的关系。
不同 Route 规则同时绑定到一个 Service 上,这些 Route 将具有相同的上游和插件配置,减少冗余配置。
APISIX DashBoard
ApiSix 有管理台页面 APISIX DashBoard,其默认的端口是 9000,默认的账户密码是 admin/admin,登录其中同样可以设置其中的脚本 之前存在 的漏洞就是 /apisix/admin/migrate/import 和 /apisix/admin/migrate/export 存在未授权访问漏洞
风险点
- Etcd 如何配置的?是否是未授权?
- Dashboard当中是否还存在任何漏洞?
如何进行RCE
核心点是 apisix 自身的 创建路由当中插入lua脚本 前几次的漏洞
- 自身可被访问 【现在只监听127.0.0.1】【2020-13945】
- apisix dashboard 弱密码访问添加路由
- apisix dashboard /import /export接口 存在未授权 【2021-45232】
- apisix dashboard 的插件batch-requests不能分辨 x-real-ip,导致访问 apisix 【2022-24112】
APISIX 攻击面
插件的攻击面 plugins
CVE-2022-29266 JWT 密钥泄漏
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29266 https://zone.huoxian.cn/d/1130-apache-apisix-jwt-cve-2022-29266
ApiSIX 的 apisix dashboard
之前具有未授权的接口,现在比较少
默认的账户密码 admin/admin
用户 user/user
默认的jwt secret secret
{
"exp": 1704699413,
"iat": 1704695813,
"sub": "admin"
}
ApiSIX 的 apisix ingress Controller
ApiSIX 的 ETCD数据库
天生未授权?是否是允许其他的应用进行访问和修改ETCD数据库,从而造成添加路由?
APISIX 实际风险点
插件自身会开启的接口
自身只会在 9080当中进行开启,通过插件的接口需要通过public插件进行开启
用户viewer对 adminAPI有get访问的权限
如何使用GET 方法完成 POST等方法? 不能,尝试了GET携带请求体以及 get带请求参数 另外数据库的所有配置查看的时候暂未发现特殊的秘钥等泄漏 默认viewer权限读取consumer的配置+jwt插件 我们可以据此获取到相关的数据。
curl "http://127.0.0.1:9080/apisix/admin/consumers" -H 'X-API-KEY: 4054f7cf07e344346cd3f287985e76a2'
2379端口对应的etcd组件
APISIX 的攻击思考
- Dashboard是否存在 插件或者 功能的 pre_auth ssrf