显示版本号真的是安全错误配置吗?

信息安全 许可证执行 owasp-前十名 jQuery
2021-09-07 19:38:46

我们的 Web 应用程序使用嵌入了 jQuery 的 HTML 文件。根据 jQuery 许可证 ( https://jquery.org/license/ ),我们必须保持许可证标题不变,包括版本号。

我们的客户将产品和版本组合的暴露报告为安全风险。奇怪的是,同一文件中的引导版本并未报告为安全风险。

许多应用程序使用内部带有版本号的库。甚至可以通过在 Firebug 或 Chrome 的开发者控制台中运行一些代码来获取版本号。

这种“安全错误配置”( https://www.owasp.org/index.php/Top_10-2017_A6-Security_Misconfiguration )在什么情况下适用于显示产品和版本号?我们如何在不违反 jQuery 许可证的情况下解决这个问题?

4个回答

公开版本号的安全影响是攻击者可以立即查看您的版本是否容易受到已知漏洞的攻击。例如,3.4.0 之前的 jQuery 容易受到 CVE-2019-11358 的攻击,因此攻击者知道您的 jQuery 是 3.3.9 还是 3.4.1 是有用的信息。

但是,使用在浏览器中运行的 JavaScript,攻击者可以访问完整的源代码,因此无法隐藏您的 jQuery 是否易受攻击。即使您隐藏版本,攻击者也可以比较代码,或者只是尝试利用漏洞,以确定您是否易受攻击。隐藏版本号可能会使工作稍微多一些,但实际上它的作用很小。

此外,还有其他方法可以缓解这种情况:

  • 随时了解您使用的库中的安全问题。订阅邮件列表或其他发布方法以解决安全问题。
  • 每当发现安全问题时更新客户端库。

如果您因为定期更新而总是有一个非易受攻击的版本,那么该版本被泄露是没有问题的。你可以告诉你的客户,这是你减轻信息泄露的方式。

知道版本号不是安全错误配置。暴露版本号的风险是“信息泄露”。如果知道此信息使攻击者能够针对该特定版本中的漏洞进行利用,这可能会造成危险。

即使库最终包含漏洞,它仍然不是安全配置错误问题。那将是“A9-使用具有已知漏洞的组件”。

因此,客户似乎对风险和情况有错误和僵化的理解。

暴露某物的版本号是一种安全隐患,这是网络安全中一种非常非常古老的思维模式。

据称,它使攻击者的工作更容易,因为如果他们知道您正在运行的任何版本的版本,他们就可以查找适用于该版本的漏洞。

实际上,这就是安全扫描器正在做的事情。Nessus 等人有一个按版本号排列的内置漏洞数据库。因此,除非您从不扫描自己,否则隐藏该信息就是在打自己的脚。

除了扫描器和攻击者(使用扫描器,你知道吗?)都有其他方法,而不是简单的 strcmp() 来确定某些东西的版本号。这需要更多的努力,并且不能总是精确地确定一个确切的数字,但是没有任何有价值的攻击者会将 jQuery 3.3.0 与 jQuery 2.2.1 混淆

非脚本小子级别的攻击者还有其他几种方法来找出您正在运行的内容,从指纹识别到简单地自动测试数百个漏洞并检查哪个有效。

隐藏版本号可以为您提供非常少量的额外安全性。如果您无事可做,您可以做也可以不做。只要您有任何真正的安全问题需要解决,就把时间花在这些问题上。

最后,公开版本号不是安全配置错误的情况。如果您的工具这样报告,请向上游报告该错误,以便您的工具可以得到修复。

我不是 100% 确定这是否是一个重复的问题。如果它应该被标记为这样,请这样做 mods,但我认为这篇特定帖子中的建议“是否有没有 XSS 漏洞的 jQuery 的基本版本”将有助于为您的客户解决问题。

在解决一般问题时,您必须评估的主要因素之一是建议的安全解决方案是否对您的客户来说是一个良好的投资回报率。是否值得在安全策略中编写一个例外,或者可能实现代码以去除返回的版本号(或者正如评论者指出的可能抛弃 jQuery)以降低暴露版本号的风险?在许多情况下不会,但在其他情况下会,这完全取决于个人情况。但是,您绝对应该通过使用cvedetailsNIST National Vulnerability Database之类的东西来验证您正在使用的版本是否已经受到损害

至于为什么没有报告 Bootstrap,这可能取决于扫描仪(您没有提到)和您用于评估的测试。根据OWASP 安全配置错误的逻辑,它也可以被视为一个漏洞,并且出于同样的原因应该/不应该解决。无论如何,暴露该信息确实为任何潜在的攻击者提供了另一个数据点,可以从中进行研究并可能识别漏洞。