破损的对象级授权(BOLA)是一种访问控制漏洞,允许攻击者通过操纵请求中的对象ID来访问他们没有权限访问的资源。这个漏洞通常发生在API中,因为服务器通常依赖客户端发送的对象ID来确定用户可以访问哪些对象,而没有进行适当的权限检查。
让我们想象一个在线银行应用程序,允许用户查看他们的账户信息。用户可能会这样请求查看他们的账户:GET /account/12345。但如果该应用程序没有检查用户是否被允许查看该账户,这可能会造成问题。一个坏人可能会尝试更改请求以查看其他人的账户。例如,他们可能会尝试GET /account/67890。银行应用程序需要确保每个用户只能查看自己的账户信息;否则,可能导致信息泄露。
在最新的OWASP Top 10中,破损的访问控制已从2017年的第五位上升至2021年的第一位,成为最关键的Web应用安全风险。这种漏洞发生在用户能够执行超出其预期权限的操作时,可能导致未经授权的信息披露、修改或数据销毁。
BOLA漏洞可能引发的问题包括:
BOLA漏洞发生的原因:
总之,缺乏全面的用户身份验证和参数加密使得某些用户能够利用漏洞,任意修改访问权限。下图显示了用户A只能访问资源A。当程序的身份验证不完整时,用户可能构造一个API来访问资源B,从而获得访问甚至修改资源B的权限。
以下是防止BOLA漏洞的一些关键措施。通过实施这些预防措施,可以显著降低BOLA漏洞的风险,保护API免受未授权访问和操作。
序号 | 预防措施 | 描述 |
---|---|---|
1 | 实施对象级授权检查 | 在每个API端点执行操作之前,验证用户是否有权限对特定对象进行操作。 |
2 | 使用随机且不可预测的ID | 避免使用顺序整数或容易猜测的ID,以减少攻击者预测或操控资源标识符的机会。 |
3 | 限制自动API创建 | 避免使用自动生成API端点的工具,确保每个端点遵循访问控制模型。 |
4 | 跟踪和管理API端点 | 定期进行安全审计和渗透测试,以识别和修复潜在的安全漏洞。 |
5 | 使用API网关 | 安装API网关作为所有API请求的单一入口,以应用安全策略。 |
6 | 实施强身份验证和授权 | 使用行业标准的身份验证协议,如OAuth 2.0、JWT等,并实施基于角色的访问控制。 |
7 | 使用Web应用防火墙(WAF) | WAF为企业API提供额外的保护层,以抵御常见的Web应用攻击。 |
8 | 数据验证 | 过滤服务器接受的所有内容,并使用XML或JSON架构验证参数。 |
9 | 速率限制 | 限制用户或IP地址在特定时间内可以发出的请求数量,以防止暴力破解和DoS攻击。 |
10 | 安全测试 | 定期进行API安全测试,如渗透测试、注入测试和用户身份验证测试,以识别和解决漏洞。 |
11 | 监控和修补 | 定期监控API中的异常网络活动,并更新API以使用最新的安全补丁、错误修复和新功能。 |
12 | 敏感数据加密 | 使用SSL/TLS加密协议保护API与客户端应用程序之间的通信,并加密存储的敏感数据。 |
13 | 访问控制列表(ACL) | 使用ACL控制用户对特定资源的访问。 |
14 | 最小权限原则 | 确保用户仅拥有完成任务所需的最低权限,避免过多的权限。 |
15 | 教育与培训 | 为开发人员提供安全意识培训,以确保他们理解如何安全地设计和实现API。 |
BOLA是一种常见的安全缺陷,可能导致敏感数据泄露或未经授权的操作。在设计和构建应用程序时,开发人员需要确保他们对所有对象进行正确的访问控制,以防止此类问题。我们需要在开发和测试过程中更加努力地解决和预防这些问题。另一种选择是选择强大的第三方解决方案来帮助我们解决这些问题。
Tencent EdgeOne提供强大的Web攻击保护,有效拦截各种威胁。凭借广泛的攻击特征数据库,它可以减少Web攻击、利用、特洛伊木马、后门和其他安全问题的风险。我们现在推出了免费试用,欢迎您注册或联系我们以获取更多信息。
Q1: BOLA与IDOR有什么关系?
A1: BOLA与IDOR(不安全的直接对象引用)密切相关。它们基本上指的是同一种类型的漏洞,攻击者由于授权检查不足,可以访问或操纵其他用户的对象。
Q2: 为什么BOLA被认为是重大安全风险?
A2: BOLA在OWASP API前十名列表中排名第一。它是API中最普遍的漏洞之一,可能暴露敏感数据并允许未经授权访问用户信息。
Q3: 能否提供BOLA漏洞利用的例子?
A3: Peloton安全事件就是一个BOLA利用的例子。由于缺乏对象级授权,攻击者能够查看其他用户的所有数据,包括私人信息。
Q4: 开发人员如何防止BOLA漏洞?
A4: 为了防止BOLA漏洞,开发人员应实施适当的对象级授权检查。这包括验证用户对每个对象访问请求的权限,并确保用户只能访问他们被授权查看或修改的对象。