一个高危安全漏洞,追踪为 CVE-2024-43405(CVSS 评分为 7.4),存在于开源漏洞扫描器 ProjectDiscovery 的 Nuclei 中,可能允许攻击者绕过签名检查并执行恶意代码。这个漏洞是由 Wiz 的工程团队发现的。
该漏洞源于换行符处理的差异和多签名处理,使攻击者能够向模板中注入恶意内容。“已在 Nuclei 的模板签名验证系统中识别出一个漏洞,攻击者可能利用该漏洞绕过签名检查并通过自定义代码模板执行恶意代码。”GitHub 上发布的公告中写道。“该漏洞源于签名验证过程和 YAML 解析器处理换行符的差异,结合多个签名的处理方式。这使攻击者能够在保持模板良性部分的有效签名的同时,向模板中注入恶意内容。”
该漏洞影响所有版本高于 3.0.0 的 Nuclei,并在版本 v3.3.2 中得到解决。该漏洞扫描器在 GitHub 上拥有 21,000+ 颗星和 2.1M+ 次下载,Wiz 研究人员指出,这个软件对安全社区至关重要,强调了解决漏洞的必要性。
Nuclei 的优势在于其灵活的基于 YAML 的模板,能够检测漏洞和错误配置。Nuclei 支持多种协议,包括 HTTP、TCP、DNS、TLS 和代码。代码协议允许在主机操作系统上执行外部代码,专家警告这一功能可能带来严重风险。使用代码协议的 Nuclei 模板可以评估系统安全,但也有可能在本地执行恶意代码,潜在地威胁服务器或基础设施。
“Nuclei 模板的灵活性意味着它们可以被用于合法或恶意目的。例如,以下模板演示了攻击者如何利用代码协议从运行模板的主机中窃取敏感数据。”Wiz 发布的报告中写道。
Nuclei 使用签名验证来确保模板的完整性,但其依赖这种单一机制创造了一个关键的失败点,凸显了需要强大的验证。Wiz 研究人员表示,问题源于在签名验证中使用正则表达式与 YAML 解析器结合,允许攻击者利用解析冲突中的“r”字符绕过验证。解析不一致使攻击者能够使用“r”添加第二个“# digest:”行,绕过签名验证,但仍被 YAML 解析器执行。
这种利用是由于以下关键弱点:
-
解析器不一致:Go 的基于正则表达式的签名验证将 r 视为同一行的一部分,而 YAML 解析器将其解释为换行符。这种不匹配允许攻击者注入绕过验证但被 YAML 解析器执行的内容。
-
首签名信任:验证逻辑仅验证第一个 # digest: 行。额外的 # digest: 行在验证过程中被忽略,但仍在解析和执行的内容中。
-
签名移除不一致:ReplaceAll 函数从哈希内容中移除所有 # digest: 行,确保仅第一行被验证。后续行中的恶意内容仍未经验证但可执行。攻击者可以将这些弱点链接起来,向 Nuclei 模板中注入未经验证但可执行的内容。
-
“此漏洞的攻击向量出现在组织运行未受信任或社区贡献的模板而没有适当的验证或隔离时。此外,允许用户修改或上传 Nuclei 模板的服务,如自动扫描平台或共享安全管道,变得特别易受攻击。”报告总结道。“攻击者可以利用这一功能注入恶意模板,导致任意命令执行、数据窃取或系统妥协。”
原文始发于微信公众号(黑猫安全):Nuclei 漏洞允许绕过签名并执行代码
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论