基于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.py

1.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  # 默认启用的漏洞插件

安全风险点

  1. allow_admin开放了管理API的访问权限
  2. 使用了默认的admin_key未作修改
  3. batch-requests插件存在IP校验绕过漏洞

3. CVE-2022-24112漏洞原理深度分析

该漏洞源于APISIX的batch-requests插件对IP地址校验的逻辑缺陷,攻击者可利用此漏洞:

  1. 绕过IP限制:通过构造特殊的X-Real-IP头部欺骗IP检查
  2. 滥用管理API:利用默认API密钥执行管理员操作
  3. 远程代码执行:通过创建恶意路由注入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 False

4. 漏洞验证与防御措施

4.1 手动验证步骤

  1. 启动环境:

    docker-compose up -d
    
  2. 检查服务状态:

    docker-compose ps
    
  3. 使用检测脚本验证:

    python3 scripts/check_vulnerability.py localhost:9080
    

4.2 安全加固建议

  • 立即措施

    • 修改默认的admin_key
    • 限制admin API的访问IP
    • 禁用batch-requests插件
  • 长期方案

    • 升级到APISIX 2.12.1或更高版本
    • 实施网络层访问控制
    • 启用审计日志监控管理API操作

5. 漏洞研究与学习进阶

对于希望深入理解此漏洞的安全研究者,建议:

  1. 分析补丁代码:比较修复前后的插件实现差异
  2. 构建变异测试:尝试不同的IP伪造技术
  3. 开发检测规则:编写Suricata/Snort规则检测攻击尝试

在测试环境中,可以通过以下命令快速检查当前APISIX版本:

curl -i http://localhost:9080/apisix/admin/routes -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'

实际测试中发现,即使修改了admin_key,如果未正确配置IP限制,攻击者仍可能通过其他方式绕过防护。这种深度防御的缺失在API网关类产品中尤为危险,因为它们在架构中处于关键位置。

更多推荐