OWASP十大漏洞之一

A01:2021 – 访问控制中断

概述

从第五位上升到第五位,94%的应用程序接受了某种形式的中断访问控制的测试,平均发生率为3.81%,并且在贡献的数据集中发生次数最多,超过318k。包括值得注意的常见弱点枚举(CWE-200:敏感信息暴露给未经授权的行为者,CWE-201:通过发送的数据暴露敏感信息, 和CWE-352:跨站点请求伪造

描述

访问控制强制实施策略,以便用户不能在其预期权限之外执行操作。故障通常会导致未经授权的信息泄露、修改或破坏所有数据,或在用户限制之外执行业务功能。常见的访问控制漏洞包括:

  • 默认情况下违反最小特权或拒绝原则,其中应仅向特定功能、角色或用户授予访问权限,但任何人都可以使用。

  • 通过修改 URL(参数篡改或强制浏览)、内部应用程序状态或 HTML 页面,或者使用攻击工具修改 API 请求来绕过访问控制检查。

  • 通过提供他人的唯一标识符(不安全的直接对象引用)来允许查看或编辑他人的帐户

  • 访问缺少 POST、PUT 和 DELETE 访问控制的 API。

  • 特权提升。在不登录的情况下充当用户,或在以用户身份登录时充当管理员。

  • 元数据操作,例如重播或篡改 JSON Web 令牌 (JWT) 访问控制令牌,或者操纵 Cookie 或隐藏字段以提升权限或滥用 JWT 失效。

  • CORS 配置错误允许从未经授权/不受信任的源进行 API 访问。

  • 以未经身份验证的用户身份强制浏览经过身份验证的页面,或以标准用户身份强制浏览特权页面。

如何预防

访问控制仅在受信任的服务器端代码或无服务器 API 中有效,攻击者无法修改访问控制检查或元数据。

  • 除公共资源外,默认情况下应拒绝。

  • 只需实施一次访问控制机制,即可在整个应用程序中重复使用它们,包括最大限度地减少跨域资源共享 (CORS) 的使用。

  • 模型访问控制应强制实施记录所有权,而不是接受用户可以创建、读取、更新或删除任何记录。

  • 域模型应强制实施独特的应用程序业务限制要求。

  • 禁用 Web 服务器目录列表,并确保文件元数据(例如 .git)和备份文件不存在于 Web 根目录中。

  • 记录访问控制失败,在适当时提醒管理员(例如,重复失败)。

  • 速率限制 API 和控制器访问,以最大限度地减少自动攻击工具的危害。

  • 注销后,有状态会话标识符应在服务器上失效。无状态 JWT 令牌应该是短暂的,以便将攻击者的机会之窗降至最低。对于寿命较长的 JWT,强烈建议遵循 OAuth 标准来撤销访问权限。

开发人员和 QA 人员应包括功能访问控制单元和集成测试。

攻击场景示例

场景 #1:应用程序在访问帐户信息的 SQL 调用中使用未经验证的数据:

 pstmt.setString(1, request.getParameter("acct"));
 ResultSet results = pstmt.executeQuery( );

攻击者只需修改浏览器的"acct"参数即可发送他们想要的任何帐号。如果未正确验证,攻击者可以访问任何用户的帐户。

 https://example.com/app/accountInfo?acct=notmyacct

场景 #2:攻击者只是强制浏览以 URL 为目标。访问管理页面需要管理员权限。

 https://example.com/app/getappInfo
 https://example.com/app/admin_getappInfo

如果未经身份验证的用户可以访问任一页面,则这是一个缺陷。如果非管理员可以访问管理页面,则这是一个缺陷。

上一篇:OWASP十大WEB弱点防护守则


下一篇:OWASP TOP 10