执行摘要
CVE-2025-24016 是一个影响广泛使用的开源安全信息和事件管理 (SIEM) 平台 Wazuh 的严重远程代码执行 (RCE) 漏洞。此漏洞源于对 DistributedAPI (DAPI) 参数的不安全反序列化,允许具有 API 访问权限的攻击者在 Wazuh 服务器上执行任意 Python 代码。具体来说,版本 4.4.0 至 4.9.0 受到影响。当攻击者将恶意字典注入 DAPI 请求或响应,然后由该函数处理时,会触发此漏洞。成功利用此漏洞可能导致整个系统被入侵,包括数据被盗、服务中断以及网络内的进一步横向移动。版本 4.9.1 中已通过将不安全函数as_wazuh_object替换为来修复此漏洞。evalast.literal_eval
技术细节
-
CVE 编号: CVE-2025-24016
-
受影响的软件: Wazuh
-
受影响的版本: 4.4.0至4.9.0
-
漏洞类型:不安全的反序列化
-
CVSSv3.1 评分: 9.9(严重)
-
CVSSv3.1 矢量: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:H/A:H
-
受影响的组件: framework/wazuh/core/cluster/common.py -as_wazuh_object功能
-
攻击媒介:网络
-
所需权限:低(API 访问)
-
用户交互:无
-
范围:已更改
该漏洞存在于文件as_wazuh_object中的函数中framework/wazuh/core/cluster/common.py。该函数负责反序列化通过分布式 API 接收的 JSON 数据。DAPI 用于 Wazuh 组件之间的通信,包括 Wazuh API、管理器和代理。
存在漏洞的代码片段如下(修补之前):
defas_wazuh_object(dct: Dict):try:if'__wazuh_datetime__'in dct:return datetime.datetime.fromisoformat(dct['__wazuh_datetime__'])elif'__unhandled_exc__'in dct: exc_data = dct['__unhandled_exc__']return eval(exc_data['__class__'])(*exc_data['__args__'])return dctexcept (KeyError, AttributeError):return dct
此代码检查字典是否dct包含键__unhandled_exc__。如果包含,它将从字典中检索__class__和值,并使用函数使用提供的参数创建指定类的实例。在攻击者控制的数据上使用本质上是危险的,因为它允许任意 Python 代码执行。__args__evaleval
根本原因分析
CVE-2025-24016 的根本原因是使用eval函数反序列化从分布式 API 收到的数据。该eval函数执行任意 Python 代码,使其成为利用的主要目标。攻击者可以制作一个恶意 JSON 负载,其中包含带有密钥的特制字典__unhandled_exc__。此字典指定一个 Python 类和参数,当通过 评估时eval,可执行任意代码。
触发该漏洞的原因是,该as_wazuh_object函数在将输入数据传递给 之前未正确清理或验证输入数据eval。这允许攻击者将任意代码注入__class__和__args__字段,从而导致远程代码执行。
例如,攻击者可以发送以下 JSON 负载:
{"__unhandled_exc__": {"__class__": "os.system","__args__": ["touch /tmp/pwned"] }}
当该有效载荷被函数处理时as_wazuh_object,eval函数将执行,并在 Wazuh 服务器上os.system("touch /tmp/pwned")创建一个名为的文件。/tmp/pwned
该漏洞尤其危险,因为任何拥有 API 访问权限的人都可能触发该漏洞。这包括被入侵的仪表板、集群内的 Wazuh 服务器,甚至某些配置中的被入侵的代理。DAPI 旨在用于 Wazuh 组件之间的内部通信,但缺乏适当的输入验证使其容易受到攻击。
补丁分析
该漏洞已在 Wazuh 4.9.1 版中修复。补丁将不安全eval函数替换为ast.literal_eval。该ast.literal_eval函数安全地评估包含 Python 文字的字符串(例如字符串、数字、元组、列表、字典、布尔值或 None)。它不会执行任意代码,从而减轻了 RCE 漏洞。
以下是相关的代码更改framework/wazuh/core/cluster/common.py:
--- a/framework/wazuh/core/cluster/common.py+++ b/framework/wazuh/core/cluster/common.py@@ -1824,7 +1825,8 @@ def as_wazuh_object(dct: Dict):return datetime.datetime.fromisoformat(dct['__wazuh_datetime__']) elif '__unhandled_exc__' in dct: exc_data = dct['__unhandled_exc__']- returneval(exc_data['__class__'])(*exc_data['__args__'])+ exc_dict = {exc_data['__class__']: exc_data['__args__']}+ return ast.literal_eval(json.dumps(exc_dict))return dct except (KeyError, AttributeError):
逐行解释:
-
- return eval(exc_data['__class__'])(*exc_data['__args__']):此行包含易受攻击的代码。它用于eval根据字典中的__class__和__args__值执行任意代码exc_data。
-
+ exc_dict = {exc_data['__class__']: exc_data['__args__']}:此行创建一个字典,以类名作为键,以参数作为值。
-
+ return ast.literal_eval(json.dumps(exc_dict)):此行将字典转换为 JSON 字符串,然后使用它ast.literal_eval来安全地评估它。这可以防止任意代码执行。
eval该补丁通过将不安全函数替换为安全函数有效地缓解了漏洞ast.literal_eval。该ast.literal_eval函数仅评估 Python 文字,从而防止攻击者注入任意代码。
此外,还做出了以下变更api/test/integration/tavern_utils.py:
--- a/api/test/integration/tavern_utils.py+++ b/api/test/integration/tavern_utils.py@@ -2,7 +2,7 @@# Created by Wazuh, Inc. <[email protected]>.# This program is a free software; you can redistribute it and/or modify it under the terms of GPLv2--+import astimport jsonimport reimport subprocess@@ -238,7 +238,7 @@ def test_validate_data_dict_field(response, fields_dict):for element in field_list:try:- assert (isinstance(element[key], eval(value)) for key, value in dikt.items())+ assert (isinstance(element[key], ast.literal_eval(value)) for key, value in dikt.items())except KeyError:assert len(element) == 1assert isinstance(element['count'], int)@@ -486,7 +486,7 @@ def check_agent_active_status(agents_list):raise subprocess.SubprocessError("Error while trying to get agents") from exc# Transform string representation of list to list and save agents id- id_active_agents = [agent['id'] for agent in eval(output)]+ id_active_agents = [agent['id'] for agent in ast.literal_eval(output)]if all(a in id_active_agents for a in agents_list):break
这些变化在测试套件中得到替换eval,ast.literal_eval确保测试也使用安全评估方法。
最后,进行了如下修改framework/wazuh/core/cluster/tests/test_common.py:
--- a/framework/wazuh/core/cluster/tests/test_common.py+++ b/framework/wazuh/core/cluster/tests/test_common.py@@ -1749,7 +1749,11 @@ def test_as_wazuh_object_ok():# Test the fifth condition result = cluster_common.as_wazuh_object({'__unhandled_exc__': {'__class__': 'ValueError','__args__': ('test',)}})- assert isinstance(result, ValueError)+ assert result == {"ValueError": ["test"]}++ result = cluster_common.as_wazuh_object({'__unhandled_exc__': {'__class__': 'exit',+ '__args__': []}})+ assert result == {"exit": []}# No condition fulfilledassert isinstance(cluster_common.as_wazuh_object({"__wazuh_datetime_bad__": "2021-10-14"}), dict)
这些更改更新了测试,以反映as_wazuh_object补丁后的新的行为。ValueError该函数现在返回表示异常的字典,而不是返回或退出。
漏洞利用技术
攻击者可以通过 API 向 Wazuh 服务器发送恶意 JSON 负载来利用 CVE-2025-24016。负载必须包含__unhandled_exc__密钥以及指定要执行的代码的__class__和值。__args__
概念验证(PoC):
以下 PoC 演示了如何使用端点利用此漏洞run_as:
curl -X POST -k -u "wazuh-wui:MyS3cr37P450r.*-" -H "Content-Type: application/json" --data '{"__unhandled_exc__":{"__class__": "os.system", "__args__": ["touch /tmp/pwned"]}}' https://<worker-server>:55000/security/user/authenticate/run_as
解释:
-
-X POST:指定HTTP方法为POST。
-
-k:禁用 SSL 证书验证(用于测试目的)。
-
-u "wazuh-wui:MyS3cr37P450r.*-":提供用于身份验证的用户名和密码。此处使用默认凭据。
-
-H "Content-Type: application/json":将 Content-Type 标头设置为 application/json。
-
--data '{"__unhandled_exc__":{"__class__": "os.system", "__args__": ["touch /tmp/pwned"]}}':指定恶意 JSON 负载。此负载将touch /tmp/pwned在 Wazuh 服务器上执行命令。
-
https://<worker-server>:55000/security/user/authenticate/run_as:指定端点的 URL run_as。替换<worker-server>为 Wazuh 工作服务器的实际主机名或 IP 地址。
攻击场景:
-
侦察:攻击者识别出存在漏洞的 Wazuh 服务器(版本 4.4.0 至 4.9.0)。
-
身份验证:攻击者通过默认凭证、凭证填充或其他方式获取有效的 API 凭证。
-
有效负载注入:攻击者向端点发送恶意 JSON 有效负载run_as,如上面的 PoC 所示。
-
代码执行:该as_wazuh_object函数反序列化有效负载并执行攻击者控制的代码。
-
系统入侵:攻击者控制 Wazuh 服务器并可以执行各种恶意活动,例如数据盗窃、服务中断或网络内横向移动。
现实世界的影响:
CVE-2025-24016 的利用可能会对使用 Wazuh 的组织造成严重后果。攻击者可以:
-
完全控制 Wazuh 服务器:这允许攻击者访问敏感数据、修改配置并安装恶意软件。
-
危害整个 Wazuh 集群:如果攻击者控制了主服务器,他们就有可能危害集群中的所有其他服务器和代理。
-
破坏安全监控:攻击者可以禁用或篡改 Wazuh 的监控功能,从而使他们在不被发现的情况下进行进一步的攻击。
-
窃取敏感数据:攻击者可以访问存储在 Wazuh 服务器上的日志、警报和其他敏感数据。
-
使用 Wazuh 服务器作为进一步攻击的发射台:攻击者可以使用受感染的服务器攻击网络内的其他系统。
缓解策略
为了降低 CVE-2025-24016 的风险,组织应采取以下步骤:
升级到 Wazuh 4.9.1 或更高版本:此版本包含修复漏洞的补丁。
限制 API 访问:仅限授权用户和系统访问 API。
实施强身份验证:使用强密码和多因素身份验证来保护 API 凭据。
监控 API 流量:监控 API 流量中是否存在可疑活动,例如意外请求或大量数据传输。
定期审查和更新安全配置:确保 Wazuh 的安全配置是最新的且配置正确。
实施网络分段:对网络进行分段以限制成功攻击的影响。
使用 Web 应用程序防火墙 (WAF): WAF 可以帮助在恶意请求到达 Wazuh 服务器之前检测并阻止它们。
配置更改:
-
审查并限制对 Wazuh API 的访问。确保只有授权用户和系统才有权访问。
-
为 API 实现强大的身份验证机制,例如多因素身份验证。
-
监控 API 日志中是否存在可疑活动。
安全最佳实践:
-
授予 API 访问权限时遵循最小权限原则。
-
定期审查和更新安全配置。
-
实施强大的安全监控计划。
-
随时了解最新的安全威胁和漏洞。
替代解决方案:
如果无法立即升级到 Wazuh 版本 4.9.1,请考虑以下临时解决方法:
-
实施 WAF 规则以阻止恶意负载:可以创建 WAF 规则来检测和阻止包含__unhandled_exc__密钥的请求。但是,这种解决方法并非万无一失,因为攻击者可能能够使用混淆技术绕过规则。
-
禁用run_as端点:如果run_as不需要端点,可以禁用它以防止通过此特定端点利用漏洞。但是,这并不能解决as_wazuh_object功能中的底层漏洞。
发现和披露的时间表
-
发现的漏洞:未知
-
报告的漏洞:未知
-
补丁发布日期: 2024 年 7 月 23 日(Wazuh 4.9.1)
-
公开披露: 2025 年 2 月 10 日
参考
-
NVD: https://nvd.nist.gov/vuln/detail/CVE-2025-24016
-
GitHub 公告: https://github.com/wazuh/wazuh/security/advisories/GHSA-hcrc-79hj-m3qh
-
GitHub 存储库(PoC): https://github.com/MuhammadWaseem29/CVE-2025-24016
-
SonicWall 博客: https://www.sonicwall.com/blog/critical-wazuh-rce-vulnerability-cve-2025-24016-risks-exploits-and-remediation
-
SecurityOnline.info:https://securityonline.info/cve-2025-24016-cvss-9-9-ritic-rce-vulnerability-discovered-in-wazuh-server/
-
SecurityVulnerability.io:https://securityvulnerability.io/vulnerability/CVE-2025-24016
-
NCSC 建议: https://www.ncsc.gov.ie/pdfs/2503140157_Crit_Wazuh_RCE_Vuln.pdf
-
Cyble 博客: https://cyble.com/blog/it-vulnerability-mac-windows-fixes-urged-by-cyble/
-
记录未来: https://www.recordedfuture.com/vulnerability-database/CVE-2025-24016
-
CVEDetails.com:https://www.cvedetails.com/cve/CVE-2025-24016/
比较分析
CVE-2025-24016 与各种软件应用程序中发现的其他不安全反序列化漏洞类似。这些漏洞通常出现在应用程序未经适当验证就反序列化来自不受信任来源的数据时,从而允许攻击者将恶意代码注入反序列化对象。
一个众所周知的例子是 Apache Struts 漏洞 (CVE-2017-5638),它允许通过 Content-Type 标头执行远程代码。与 CVE-2025-24016 类似,Apache Struts 漏洞是由于应用程序在反序列化之前未能正确清理用户提供的输入而导致的。
安全实践的发展使人们越来越意识到与反序列化相关的风险。现代框架和库通常提供内置的安全反序列化机制,例如将允许的类列入白名单或使用安全的序列化格式。然而,正如 CVE-2025-24016 所表明的那样,当开发人员未能正确使用这些机制或在未充分考虑安全的情况下实现自定义反序列化逻辑时,仍然会出现漏洞。
这些漏洞的关键点在于输入验证和安全编码实践的重要性。应用程序永远不应信任来自不受信任来源的数据,并且应始终在处理输入之前对其进行清理和验证。开发人员还应意识到与反序列化相关的风险,并应尽可能使用安全的反序列化技术。
原文始发于微信公众号(Ots安全):CVE-2025-24016:Wazuh 中的不安全反序列化漏洞导致远程代码执行
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论