CVE-2026-46395
HAX CMS 因 HMAC 实现缺陷导致私钥泄露漏洞
- 已发布
- 2026年6月5日
- 已更新
- 2026年6月5日
- 分配 CNA
- GitHub_M
- 观察到的证据
- 2026年8月8日
初级CVSS
nvd · CVSS 4.0
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X低 · 未来 30 天
- 百分位
- 22.3%
- 型号日期
- 2026年9月21日
EPSS 是统计估计,而不是确定性或影响衡量标准。将其与 CVSS、KEV 状态、暴露程度和您的环境相结合。
总结
HAX CMS 可帮助使用 PHP 或 Node.js 后端管理微站点宇宙。在 26.0.0 版本之前,HAXcms Node.js 后端中的 `hmacBase64()` 函数包含两个严重的加密实现错误,二者结合可允许任何未经身份验证的攻击者提取系统的私有签名密钥,并伪造任意管理员级别的 JSON Web 令牌(JWT),从而仅凭一个 HTTP 请求即可获得完全的管理员访问权限。首先,该函数将字面字符串 "0" 作为 HMAC 签名密钥传入,而非 key 参数,这使得每个 HAXcms 实例对相同输入计算出的 HMAC 完全相同。然后,在计算完 HMAC 之后,该函数将真实的 key 参数(即 "this.privateKey + this.salt",系统的主签名机密)直接拼接到输出上。合并后的缓冲区经过 base64 编码后作为令牌返回。生成的每个 base64url 令牌都具有相同的结构:32 字节以 "0" 为密钥的 HMAC,以及 N 字节的 `privateKey+salt`。攻击者只需对任意令牌进行 base64 解码,丢弃前 32 字节,即可直接读取私有密钥。`/system/api/connectionSettings` 端点无需身份验证,并返回由该函数生成的多个令牌。向该端点发送单个 GET 请求即可暴露私有密钥。PHP 后端使用实际密钥正确实现了该函数,并且仅返回哈希值。PHP 版本生成 44 字符的令牌,而有缺陷的 Node.js 版本则生成 139 字符以上的令牌。26.0.0 版本修复了此问题。
来源
1PoC 和 writeup 针对 CVE-2026-46395:在 HAXcms Node.js 中通过出现故障的 HMAC 导致的未认证私钥泄露 (CWE-321/CWE-200)。仅限授权的安全研究。
负责任的使用
仅在您拥有或有权测试的系统上使用漏洞信息。 Kitploit 链接到公共研究元数据,并且不存储漏洞代码或恶意负载。