Apache Apisix安全评估
字数 1472 2025-08-12 11:34:13

Apache APISIX 安全评估教学文档

1. 背景介绍

Apache APISIX 是一个动态、实时、高性能的 API 网关,提供了丰富的流量管理功能。本文档基于 FreeBuf 上的安全评估文章,详细分析 APISIX 的安全攻击面和评估方法。

2. 攻击面分析

2.1 主要系统组件

APISIX 项目包含多个系统,评估时应重点关注以下组件:

  1. 网关核心 - 主要流量处理组件
  2. Dashboard - 管理界面
  3. Ingress 控制器 - Kubernetes 集成组件
  4. 各种 SDK - 开发工具包

注:SDK 漏洞攻击场景有限,Ingress 控制器需要结合 Kubernetes 网络评估

2.2 网关核心模块

网关有三个关键安全模块需要评估:

  1. 插件系统 - 历史漏洞重灾区
  2. Admin API - 管理接口
  3. Control API - 控制接口

3. API 安全性评估

3.1 Admin API 安全评估

认证机制

  • 使用硬编码 token 进行认证
  • 已知问题(CVE-2020-13945):默认密钥漏洞
  • 官方认为这是预期行为,不打算修复

鉴权机制

  • 设计了两类角色:
    • Viewer 角色:仅允许 GET 方法
    • 非 Viewer 角色:拥有完整权限

3.2 Control API 安全评估

安全限制

  1. 默认仅在本地监听端口
  2. 插件无关的 Control API 只有"读信息"功能,风险较低

潜在风险

  • 插件创建的 Control API 可能成为攻击面

4. 插件安全性评估

4.1 插件安全概况

  • 插件默认不开启
  • 历史漏洞主要集中在此模块
  • 需要特别关注业务逻辑漏洞

4.2 CVE-2022-25757 漏洞分析

漏洞组件:request-validation 插件

功能描述

  • 检查 HTTP 请求头和 BODY 内容
  • 不符合配置规则时阻止请求转发

示例配置

{
  "uri": "/10",
  "plugins": {
    "request-validation": {
      "body_schema": {
        "type": "object",
        "required": ["string_payload"],
        "properties": {
          "string_payload": {
            "type": "string",
            "minLength": 1,
            "maxLength": 32
          }
        }
      }
    }
  },
  "upstream": {
    "type": "roundrobin",
    "nodes": {
      "192.168.2.189:8888": 1
    }
  }
}

漏洞利用

  • 发送包含重复键的 JSON 请求:
    POST /10 HTTP/1.1
    Content-Type: application/json
    
    {"string_payload":"","string_payload":"1111"}
    

漏洞原理

  1. request-validation 插件使用 cjson.safe 库解析 JSON
    • 对于重复键,取最后一个值(认为 string_payload="1111"
  2. 许多流行 JSON 库对重复键取第一个值(认为 string_payload=""
  3. 解析差异导致验证被绕过

受影响库示例

Gojay 验证代码

package main

import "github.com/francoispqt/gojay"

type user struct {
    id    int
    name  string
    email string
}

func (u *user) UnmarshalJSONObject(dec *gojay.Decoder, key string) error {
    switch key {
    case "id":
        return dec.Int(&u.id)
    case "name":
        return dec.String(&u.name)
    case "email":
        return dec.String(&u.email)
    }
    return nil
}

func (u *user) NKeys() int { return 3 }

func main() {
    u := &user{}
    d := []byte(`{"id":1,"name":"gojay","email":"gojay@email.com"},"name":"gojay2"`)
    err := gojay.UnmarshalJSONObject(d, u)
    if err != nil {
        //log.Fatal(err)
    }
    println(u.name) // 输出 "gojay" 而非 "gojay2"
}

5. 安全评估方法论

5.1 评估思路框架

  1. 攻击面识别

    • 明确评估目标组件
    • 绘制系统架构图
    • 标记所有输入接口
  2. API 安全评估

    • 检查身份认证机制
    • 验证鉴权设计
    • 测试权限提升可能性
  3. 插件安全评估

    • 审计业务逻辑
    • 检查输入验证
    • 测试边界条件
  4. OpenResty 配置评估

    • 检查 API 暴露情况
    • 验证监听范围
    • 评估访问控制

5.2 其他安全考虑

  • APISIX 的插件机制和 OpenResty 的高性能使其适合作为 WAF 架构
  • 需要持续关注新插件引入的安全风险
  • 建议定期进行安全审计和渗透测试

6. 总结

Apache APISIX 作为 API 网关,其安全评估应重点关注:

  1. Admin API 的认证鉴权机制
  2. Control API 的暴露范围
  3. 插件系统的业务逻辑漏洞
  4. JSON 解析差异导致的验证绕过问题

通过系统化的评估方法,可以有效发现和修复 APISIX 中的安全问题,确保 API 网关的安全运行。

Apache APISIX 安全评估教学文档 1. 背景介绍 Apache APISIX 是一个动态、实时、高性能的 API 网关,提供了丰富的流量管理功能。本文档基于 FreeBuf 上的安全评估文章,详细分析 APISIX 的安全攻击面和评估方法。 2. 攻击面分析 2.1 主要系统组件 APISIX 项目包含多个系统,评估时应重点关注以下组件: 网关核心 - 主要流量处理组件 Dashboard - 管理界面 Ingress 控制器 - Kubernetes 集成组件 各种 SDK - 开发工具包 注:SDK 漏洞攻击场景有限,Ingress 控制器需要结合 Kubernetes 网络评估 2.2 网关核心模块 网关有三个关键安全模块需要评估: 插件系统 - 历史漏洞重灾区 Admin API - 管理接口 Control API - 控制接口 3. API 安全性评估 3.1 Admin API 安全评估 认证机制 : 使用硬编码 token 进行认证 已知问题(CVE-2020-13945):默认密钥漏洞 官方认为这是预期行为,不打算修复 鉴权机制 : 设计了两类角色: Viewer 角色:仅允许 GET 方法 非 Viewer 角色:拥有完整权限 3.2 Control API 安全评估 安全限制 : 默认仅在本地监听端口 插件无关的 Control API 只有"读信息"功能,风险较低 潜在风险 : 插件创建的 Control API 可能成为攻击面 4. 插件安全性评估 4.1 插件安全概况 插件默认不开启 历史漏洞主要集中在此模块 需要特别关注业务逻辑漏洞 4.2 CVE-2022-25757 漏洞分析 漏洞组件 :request-validation 插件 功能描述 : 检查 HTTP 请求头和 BODY 内容 不符合配置规则时阻止请求转发 示例配置 : 漏洞利用 : 发送包含重复键的 JSON 请求: 漏洞原理 : request-validation 插件使用 cjson.safe 库解析 JSON 对于重复键,取最后一个值(认为 string_payload="1111" ) 许多流行 JSON 库对重复键取第一个值(认为 string_payload="" ) 解析差异导致验证被绕过 受影响库示例 : Gojay (Go) Jsoniter (Java) RapidJSON (C++) 其他库详见 JSON 互操作性漏洞 Gojay 验证代码 : 5. 安全评估方法论 5.1 评估思路框架 攻击面识别 明确评估目标组件 绘制系统架构图 标记所有输入接口 API 安全评估 检查身份认证机制 验证鉴权设计 测试权限提升可能性 插件安全评估 审计业务逻辑 检查输入验证 测试边界条件 OpenResty 配置评估 检查 API 暴露情况 验证监听范围 评估访问控制 5.2 其他安全考虑 APISIX 的插件机制和 OpenResty 的高性能使其适合作为 WAF 架构 需要持续关注新插件引入的安全风险 建议定期进行安全审计和渗透测试 6. 总结 Apache APISIX 作为 API 网关,其安全评估应重点关注: Admin API 的认证鉴权机制 Control API 的暴露范围 插件系统的业务逻辑漏洞 JSON 解析差异导致的验证绕过问题 通过系统化的评估方法,可以有效发现和修复 APISIX 中的安全问题,确保 API 网关的安全运行。