Skip to content

APISIX 漏洞必备

https://apisix.apache.org/zh/docs/apisix/2.15/architecture-design/apisix/

关于realIp的攻击 https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/120426004 在这里我需要解决的问题:

  1. apisix的部署架构是什么?
  2. apisix各个组件如何各司其职?
  3. apisix的工作原理是什么?
  4. apisix的插件有哪些?如何发现漏洞?

APISIX 解决的问题:

  • 所有API的唯一入口
  • 将请求进行转发到不同的后端,或根据请求头将请求转发到不同的服务
  • 执行身份验证\授权和限速
  • 支持分析,例如监控、日志记录和跟踪
  • 避免攻击

APISIX 的框架 image.png

其利用到的技术栈是 NGINX+ ngx_lua的技术基础,充分利用LuaJIT提供的性能。 分为两个部分

  1. APISIX核心:LUA插件,提供了路由匹配,负载均衡,服务发现,API管理等重要功能。
  2. 功能丰富的各种内置插件:可观测,安全,流量控制等

其中插件的主要流程是 image.png 插件的内部结构 image.png

APIsix的基础操作

  1. 创建上游

即对应的服务器处理,即这些路由被转发到什么服务器上

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 
  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的关系。 image.png

不同 Route 规则同时绑定到一个 Service 上,这些 Route 将具有相同的上游和插件配置,减少冗余配置。

APISIX DashBoard

ApiSix 有管理台页面 APISIX DashBoard,其默认的端口是 9000,默认的账户密码是 admin/admin,登录其中同样可以设置其中的脚本 之前存在 的漏洞就是 /apisix/admin/migrate/import 和 /apisix/admin/migrate/export 存在未授权访问漏洞

风险点

  1. Etcd 如何配置的?是否是未授权?
  2. Dashboard当中是否还存在任何漏洞?

如何进行RCE

核心点是 apisix 自身的 创建路由当中插入lua脚本 前几次的漏洞

  1. 自身可被访问 【现在只监听127.0.0.1】【2020-13945】
  2. apisix dashboard 弱密码访问添加路由
  3. apisix dashboard /import /export接口 存在未授权 【2021-45232】
  4. 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 的攻击思考

  1. Dashboard是否存在 插件或者 功能的 pre_auth ssrf
Back to top