扫描工具无法检测出失效的访问控制漏洞?
失效的访问控制漏洞是在OWASP Top Web应用程序安全风险列表中被列为一个重要问题。它对应用程序的安全构成了严重挑战,因为它可能会让用户访问敏感数据并执行超出其权限范围的操作,导致数据泄露、篡改甚至销毁。本文将讨论为什么即使在进行漏洞扫描和评估之后,失效的访问控制漏洞仍然经常存在,以及手动渗透测试对于有效检测和缓解这些漏洞的重要性。
访问控制是一种授权检查,确保只有某些用户(如管理员)而不是其他用户(如普通用户)能够访问和执行操作的能力。在Web应用程序安全中,访问控制与内容、功能的预期用途以及用户扮演的各种角色密切相关。在处理大型复杂应用程序时,正确实施访问控制很快会变得困难重重。
失效的访问控制就是访问控制没有按预期工作,导致攻击者可以访问敏感数据和执行超出其权限范围的操作。常见的失效的访问控制漏洞包括不安全的直接对象引用(IDOR)、水平特权升级和垂直特权升级,以及路径/目录遍历。这些漏洞可能会导致数据泄露、篡改或销毁。
在失效的访问控制中,攻击者可以操纵出站请求来访问受限资源,或者以其他用户的身份执行操作。这可能导致攻击者获取对其他用户资源的访问,或者以更高的权限执行操作。在路径/目录遍历中,攻击者可以通过修改。
我们通过一个客户评估的真实案例来解释这个问题。这个应用程序有很多不同的用户角色,看起来都设置得很好,互相之间也有适当的隔离。由于实施了很多访问控制,所有试图提升普通用户权限、访问不该访问的资源或者执行特权操作的行为都被阻止了。
然而,在我们全面分析各种用户角色之后,我们发现了一个差异。根据上下文来看,某些角色可以编辑和删除其他用户的账户,但只能对权限较低的账户执行此操作,而且拥有这些权限的用户也不能对自己的账户执行这些操作。这就导致了一个可能被忽视的问题:任何高权限用户都可以降低自己的权限,实际上就是删除了所有权限,从技术上来说,这些被降低权限的账户现在满足了被权限较低的账户编辑和删除的条件。
随着应用程序复杂性的增加,正确实施访问控制的难度也在增加,因此识别访问控制问题也越来越困难。要发现这些问题,手动安全测试是最好的方法,因为它需要更深入地了解上下文和应用程序的预期用途。
漏洞扫描器是一种流行的解决方案,用来发现应用程序中的问题。但是,仅仅依赖它们会让应用程序的所有者产生一种虚假的安全感。虽然这些扫描器可以快速地提供扫描结果,但是它们在检测新的攻击方式或需要直觉和推理的其他漏洞方面能力有限。
为了更好地解释这一点,我们可以将访问控制漏洞和另一个类似复杂、需要人工推理的常见漏洞——业务逻辑漏洞进行比较。
当应用程序的设计、实施或内部流程偏离预期用途时,就会出现业务逻辑漏洞。一些常见的例子包括:订购负数数量的产品或者多次使用相同的折扣码。
漏洞扫描器的局限性变得很明显,因为它们无法识别应用程序的预期行为。从它们的角度来看,负数仍然是数字,而重复使用某个功能未必是坏事。与跨站脚本(XSS)和SQL注入等其他漏洞不同,扫描器无法简单地提供输入,然后在应用程序的响应中查找预定义的模式,以确定是否存在漏洞。
从进攻性安全的角度来看,要发现失效的访问控制或业务逻辑类别中的漏洞,需要对应用程序有相同的认识和上下文理解,而且在很多情况下,这两种漏洞还存在重叠。
在实际场景中,还会增加权限、角色、外部集成、第三方库和依赖项等形式的额外复杂性,而漏洞扫描器几乎不可能确定这种针对特定上下文的复杂性。