近日,开源漏洞扫描工具Nuclei被曝出一个严重漏洞(CVE-2024-43405),攻击者可通过该漏洞绕过模板签名验证,将恶意代码注入模板并在本地系统执行。该漏洞由Wiz的研究人员发现,并于2024年9月4日在Nuclei v3.3.2版本中修复。
Nuclei是由ProjectDiscovery开发的一款广受欢迎的开源漏洞扫描工具,主要用于检测网站中的漏洞、配置错误、暴露的配置文件、Webshell和后门等。其扫描系统基于超过10,000个YAML模板,这些模板不仅用于检测已知漏洞,还包含一个“代码协议”,允许在本地设备上执行命令或脚本,以扩展模板的功能。
为确保模板未被篡改,Nuclei为每个模板添加了签名验证机制,即在模板底部添加一个摘要哈希值(digest hash),格式为# digest: <hash>
。然而,CVE-2024-43405漏洞的存在使得攻击者可以绕过这一验证机制,注入恶意代码。
漏洞原理:
该漏洞的核心问题在于Go语言的正则表达式签名验证与YAML解析器在处理换行符时的行为不一致。具体来说,Go的验证逻辑将r
视为同一行的一部分,而YAML解析器则将其解释为换行符。这种差异使得攻击者可以通过注入r
字符绕过签名验证,同时确保恶意代码仍能被YAML解析器执行。
此外,Nuclei在处理多个# digest:
签名行时也存在缺陷。其验证逻辑仅检查模板中第一个# digest:
行,而忽略后续的签名行。攻击者可利用这一点,在合法的摘要哈希后添加包含恶意代码的# digest:
行,从而在模板执行时注入并运行恶意代码。
Wiz研究员Guy Goldenberg解释道:“通过利用Go正则表达式实现与YAML解析器之间的差异,我们设计了一个模板,使用r
作为换行符,成功绕过了签名验证,但恶意代码仍能被YAML解析器执行。”
解析Nuclei模板的示例
来源:Wiz
修复与建议:
Wiz团队已于2024年8月14日向ProjectDiscovery报告了该漏洞,并于9月4日发布了修复版本Nuclei v3.3.2。建议所有使用旧版本Nuclei的用户立即升级至最新版本,以避免潜在的安全风险。
Goldenberg还建议,用户应在虚拟机或隔离环境中运行Nuclei,以防止恶意模板的潜在利用。
总结:
CVE-2024-43405漏洞的曝光再次提醒我们,开源工具的安全性同样需要高度重视。及时更新软件版本、采用隔离运行环境是防范此类漏洞的有效措施。对于安全从业者而言,保持对漏洞动态的关注并采取相应防护措施至关重要。
原文始发于微信公众号(技术修道场):Nuclei漏洞CVE-2024-43405曝光:攻击者可绕过签名验证执行恶意代码
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论