Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
wazuh-unauth-chain — Wazuh PoC 串联 CVE-2026-74034 文件读取与 CVE-2026-74041 命令执行;已在 4.14.8 中修复。仅使用 Python 标准库。 | Kitploit
工具/GitHubGitHub/roninreilly/wazuh-unauth-chain
权限提升漏洞分析漏洞利用Web应用程序漏洞利用数据泄露后渗透利用密码学渗透测试身份验证
GitHubroninreilly/wazuh-unauth-chain

wazuh-unauth-chain

Wazuh PoC 串联 CVE-2026-74034 文件读取与 CVE-2026-74041 命令执行;已在 4.14.8 中修复。仅使用 Python 标准库。

222天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

Wazuh 漏洞利用链 PoC(已在 4.14.8 中修复)— CVE-2026-74034 / CVE-2026-74041

单文件、仅使用标准库的多主机 PoC,串联 CVE-2026-74034 和 CVE-2026-74041。两份公告均发布于 2026 年 10 月 13 日; 修复程序随 Wazuh 4.14.8 于 2026 年 9 月 23 日发布。 4.14.8 版本是已修补的版本,而非受影响的目标。

当所需的 manager 服务可访问且已启用无密码 agent 注册时, 该脚本会实现以下利用链:

recon :55000/:1515/:1514
        │
        ├─ Phase 2  anonymous enrollment on TCP/1515 (TLS)  ──► agent id + 64-hex key
        │
        ├─ Phase 3  OSSEC agent secure channel on TCP/1514   ──► CVE-2026-74034
        │           queue 'u' (UPGRADE_MQ) upgrade_custom          arbitrary ROOT file read
        │           with parameters.file_path = /etc/shadow …
        │
        └─ Phase 4  ES512 JWT forged from the leaked             ──► CVE-2026-74041
                    /var/ossec/api/configuration/security/          ROOT RCE via the
                    private_key.pem → PUT /manager/configuration      check_remote_commands
                    parser differential (+ restart)                   parser differential

当默认随附的无密码 authd 注册可达时(<auth><use_password>no</use_password>),无需预先存在的凭据。注册密码或必需的客户端证书会改变此前提条件。仅 CVE-2026-74041 需要具有配置更新权限的已认证 API 用户;在此链条中,API 访问在签名密钥泄露之后才发生。

范围内的 CVE

CVECVSS / 向量受影响版本一句话描述
CVE-2026-740347.5, PR:N>=4.1.0 <4.14.8upgrade_custom 的 parameters.file_path 由 ROOT 权限的 wm_agent_upgrade 打开,仅进行 wfopen() 存在性检查,并将内容流式返回给已注册的 agent → 任意 root 文件读取
CVE-2026-740419.1 (CVSS 3.1), PR:H>=4.14.3 <4.14.8check_remote_commands 接受大写 <LOG_FORMAT>,大小写敏感的 Python 校验器会漏过,但大小写不敏感的 C logcollector 会遵循 → 以 root 身份执行 full_command localfile

这两个版本范围描述的是各自的缺陷;完整链条的文档化重叠范围为 >=4.14.3 <4.14.8。其他公告不在本 PoC 范围内。

要求

  • Python 3.8+ — 仅使用标准库(无需 pip,无需 pycryptodome,无需 cryptography)。
  • AES-256-CBC 和 ECDSA P-521 (ES512) 在脚本中以纯 Python 实现。
  • 出站 TCP 至 1515、1514、55000。

用法

# single host
python3 wazuh_poc.py 192.0.2.10
python3 wazuh_poc.py 192.0.2.10 --port 55000
python3 wazuh_poc.py https://192.0.2.10:55000
python3 wazuh_poc.py 192.0.2.10:55000

# many hosts, one per line ('#' comments allowed)
python3 wazuh_poc.py -f hosts.txt --threads 10

# phases 1-3 only (no config write / restart)
python3 wazuh_poc.py -f hosts.txt --no-rce

# leave the uploaded config / marker in place (NO cleanup)
python3 wazuh_poc.py 192.0.2.10 --keep

# override the phase-4 root command
python3 wazuh_poc.py 192.0.2.10 --cmd 'id; hostname > /var/ossec/etc/lists/zz_pwned 2>&1'

选项

标志默认值含义
--port55000Wazuh REST API 端口
--authd-port1515authd 注册端口
--remoted-port1514agent 安全通道端口
--timeout10socket 超时(秒)
--agent-namepoc-<rand8>在 manager 上注册的名称
--cmd(id; hostname) > …/zz_pwned第 4 阶段的 root 命令
--no-rce关闭跳过第 4 阶段
--keep关闭不恢复 ossec.conf / 不删除标记文件
--debug关闭转储协议消息
--threads5主机并行度
--api-userwazuh放入伪造 JWT 的用户名

每台主机的退出始终是优雅的:拒绝、受密码保护的 authd、已修补的版本或加密不匹配都会报告确切的阻塞点,并且运行会继续处理剩余主机。

各阶段的作用

第 1 阶段 — 侦察

探测 TCP 55000(API)、1515(authd)、1514(remoted)。在禁用 TLS 验证的情况下请求 GET /,并在 API 未认证暴露时报告 api_version。在加固构建上,GET / 返回 401;此时真正的 manager 版本会在第 3 阶段从 /var/ossec/VERSION.json 中恢复,并与 4.14.8 进行比对标记。

第 2 阶段 — 匿名注册(authd :1515)

建立 TLS 连接(4.4+ 的 authd 仅支持 TLS;脚本也会对非常旧的构建重试纯 TCP),然后发送 OSSEC A:'<name>'\n。manager 回复 OSSEC K:'<id> <name> <ip> <key>';脚本保留 64 位十六进制的 agent 密钥。

第 3 阶段 — CVE-2026-74034(remoted :1514)

复现来自 src/os_crypto/shared/msgs.c 的 Wazuh agent 加密逻辑:

  • TCP 帧 [4 字节小端长度][payload]
  • 对于动态(ip=any)agent,payload 为 !<id>!#AES:<ciphertext>
  • AES-256-CBC,密钥 = MD5(agent_key_hex)(32 个 ASCII 字节),IV FEDCBA0987654321,PKCS#7
  • 明文 = !…! 填充 + zlib(MD5_hex(plain) + "%05rand%010global:%04local:" + msg)

它发送 #!-agent startup {"version":"v4.14.6"} 以及携带 Ubuntu 平台/架构的 keepalive,使 agent 在全局数据库中变为 active,然后发送一个队列 u(UPGRADE_MQ)任务:

{"command":"upgrade_custom","parameters":{"file_path":"/etc/shadow","installer":"upgrade.sh"}}

analysisd 将其转发到 WM_UPGRADE_SOCK;ROOT 权限的 wazuh-modulesd 打开该文件 (wfopen,无路径/扩展名/签名检查),并将原始字节以 base64 write 块的形式流式返回。 脚本重新组装这些块,并实时打印 [ACC] 行:

文件处理方式
/etc/shadow仅 root: / wazuh: 行(哈希完整打印)
/var/ossec/etc/client.keys完整(截断至 25 行,统计字节数)
/var/ossec/etc/authd.pass完整(匿名注册时不存在)
/var/ossec/api/configuration/security/private_key.pem完整
/var/ossec/etc/ossec.conf集群 <key>、indexer 凭据、<auth> 密码
/var/ossec/VERSION.json用于侦察的版本回退

在文件之间,脚本会发送 upgrade_update_status(否则任务管理器会让 agent 保持 In progress 状态,并拒绝下一个任务)。

阶段 4 — CVE-2026-74041(可选,REST :55000)

  1. 使用泄露的私钥伪造管理员 ES512 JWT (iss=wazuh、aud="Wazuh API REST"、sub=wazuh、rbac_roles=[1]、 rbac_mode=white、exp-nbf=900)。通过 GET /agents 验证。
  2. GET /manager/configuration?raw=true,在最后一个 </ossec_config> 之前插入一个 <localfile>,其中包含小写的 <log_format>syslog</log_format> 诱饵和大写的 <LOG_FORMAT>full_command</LOG_FORMAT> 以及命令。
  3. PUT /manager/configuration(application/octet-stream),然后 PUT /manager/restart。
  4. 轮询 GET /lists/files/zz_pwned?raw=true 以获取 root 命令输出。
  5. 除非指定 --keep:PUT 原始 ossec.conf,重启,并 DELETE /lists/files/zz_pwned(重试直到标记消失)。

输出

  • 所有内容实时打印并刷新,标记为 [+](状态)、[ACC](收集到的 访问/机密)、[!](警告)、[-](失败),并带有主机前缀。
  • findings.jsonl 追加在脚本旁边:每个主机一个 JSON 对象,包含 version、agent_id、agent_key(注册成功时)、accesses、 findings、ok,以及可选的 error。请将该文件视为敏感文件。
  • 每个主机的摘要报告已注册的 agent id、收集到的访问、发现 以及任何阻塞点。ok 表示至少读取了一个文件,而非确认 RCE。

副作用与清理

  • 注册是持久的。 每次运行都会在 client.keys / global.db 中留下一个 agent。摘要会打印遗留的 agent id。删除它需要 API (DELETE /agents/{id}),除非阶段 4 成功,否则不在范围内。
  • 阶段 4 具有侵入性。 它会重写管理器的 ossec.conf,重启 管理器,并短暂地以 root 身份运行命令。默认命令仅写入一个 标记文件。除非传入 --keep,脚本会尝试恢复 原始配置并删除标记。清理是尽力而为:配置 恢复未经验证,异常或中断可能会跳过清理。 请保留独立备份,并在实验管理器上手动验证恢复。 后续运行不会恢复中断前的配置。
  • 恶意 localfile 被放置在配置文件中最后一个 </ossec_config> 之前,并使用 frequency 10;标记在 wazuh-logcollector 重新加载后(重启之后)写入。
  • 脚本使用 agent 协议。这并不声称不可检测; 注册、升级活动、配置更改和重启都会留下证据。

已知限制

  • 在当前构建中 GET / 返回 401,因此 api_version 通常取自 通过 CVE-2026-74034 读取的 /var/ossec/VERSION.json。
  • 当 <use_password>no</use_password>(易受攻击的默认值)时, /var/ossec/etc/authd.pass 不存在,因此该读取合理地返回空。
  • GET /manager/files?path=... 在 4.14.x 上不存在;脚本使用 /manager/configuration?raw=true 和 /lists/files/<name>?raw=true。
  • 版本 4.14.8 修复了这两个缺陷。仅成功注册并不能确定 存在漏洞;修补后注册可能仍然可用。

已测试

作者报告的实验室测试:Wazuh 4.14.5 运行于 Ubuntu 24.04;注册、文件读取、伪造 JWT 和命令执行标记均报告成功,随后进行了配置恢复和标记删除。192.0.2.10 是文档占位符。本仓库不包含可独立审查的运行记录或修补版本对照结果。

参考资料与致谢

本仓库提供了一个结合两个已公开漏洞的实现。原始漏洞报告由 Wazuh 致谢以下人员:

  • Jan Kahmen (kah-ja),turingpoint — CVE-2026-74034 / GHSA-r7hm-43xr-477j。
  • namd0ng — CVE-2026-74041 / GHSA-cjf8-wjx6-hjw6。

有关补丁版本,请参阅 Wazuh 4.14.8 发行说明。

下载工具