Apache Apisix安全评估
字数 1472 2025-08-12 11:34:13
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 内容
- 不符合配置规则时阻止请求转发
示例配置:
{
"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"}
漏洞原理:
- request-validation 插件使用
cjson.safe库解析 JSON- 对于重复键,取最后一个值(认为
string_payload="1111")
- 对于重复键,取最后一个值(认为
- 许多流行 JSON 库对重复键取第一个值(认为
string_payload="") - 解析差异导致验证被绕过
受影响库示例:
- Gojay (Go)
- Jsoniter (Java)
- RapidJSON (C++)
- 其他库详见 JSON 互操作性漏洞
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 评估思路框架
-
攻击面识别
- 明确评估目标组件
- 绘制系统架构图
- 标记所有输入接口
-
API 安全评估
- 检查身份认证机制
- 验证鉴权设计
- 测试权限提升可能性
-
插件安全评估
- 审计业务逻辑
- 检查输入验证
- 测试边界条件
-
OpenResty 配置评估
- 检查 API 暴露情况
- 验证监听范围
- 评估访问控制
5.2 其他安全考虑
- APISIX 的插件机制和 OpenResty 的高性能使其适合作为 WAF 架构
- 需要持续关注新插件引入的安全风险
- 建议定期进行安全审计和渗透测试
6. 总结
Apache APISIX 作为 API 网关,其安全评估应重点关注:
- Admin API 的认证鉴权机制
- Control API 的暴露范围
- 插件系统的业务逻辑漏洞
- JSON 解析差异导致的验证绕过问题
通过系统化的评估方法,可以有效发现和修复 APISIX 中的安全问题,确保 API 网关的安全运行。