A01:2021 – 权限控制失效
对照因素
可对照 CWEs 数量 | 最大发生率 | 平均发生率 | 最大覆盖范围 | 平均覆盖范围 | 平均加权漏洞 | 平均加权影响 | 出现次数 | 所有相关 CVEs 数量 |
---|---|---|---|---|---|---|---|---|
34 | 55.97% | 3.81% | 94.55% | 47.72% | 6.92 | 5.93 | 318,487 | 19,013 |
概述
从第五名晋升至第一名,94% 被测试的应用程式,都有被验测到某种类別权限控制失效的问题。著名的 CWE 包括 CWE-200:Exposure of Sensitive Information to an Unauthorized Actor,CWE-201:Exposure of Sensitive Information Through Sent Data 和 *CWE-352 Cross-Site Request Forgery。
描述
存取控制強化政策,使用户不能采取在预期权限之外的行动。控制失效通常会导致未经授权的资讯泄漏、修改或损坏所有资料,或执行超出用户权限的业务功能。常见的存取控制弱点包括:
-
通过修改 URL、內部应用程式状态或 HTML 页面,或仅使用自定义 API 攻击工具來绕过存取控制检查。
-
容许主键被更改为其他用户的记录,允许查看或编辑其他人的账户。
-
特权提升。未登入即成为用户,或以用户身份登入即成为管理员。
-
元数据操作,例如重放或篡改 JSON 网站令牌(JWT)之存取控制令牌,或被操纵以提升特权或滥用 JWT 失效的 cookie 或隐藏域内容。
-
CORS 错误配置允许未经授权的 API 存取。
-
以未经身份验证的用户身份強制浏览已验证的页面或以标准用户身份存取特权页面。存取缺少存取控制的 API 以进行 POST、PUT 和 DELETE 操作。
如何预防
存取控制仅在受信任的服务器端代码或无服务器的 API 有效,攻击者无法修改这里的存取控制检查或元数据。
-
除公开的资源外,默认为拒绝存取。
-
一次性地建置存取控制机制,之后在整个应用程式中重复使用它们,包括最大限度地減少使用 CORS。
-
模型的存取控制措施应该強化记录所有权,而不是让用户可以创建、读取、更新或刪除任何记录。
-
独特的应用程式业务限制要求应由领域模型予以強化。
-
停用 Web 服务器目录列表,并确保档案元数据(例如,.git)和备份档案不在 web 根目录中。
-
记录存取控制失效,并在适当的时间警示管理员(例如,重覆性失效)。
-
对 API 和控制器存取进行流量限制,以最小化自动攻击工具所帶來的损害。
-
JWT 令牌于登出后,在服务器端应使其失效。
开发人员和 QA 品保人员应纳入与功能有关之存取控制的单元和整合测试。
攻击情境范例
情境 #1: 应用程式在存取账户资讯的 SQL 呼叫中使用未经验证的资料:
pstmt.setString(1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery( );
攻击者只需修改浏览器的“acct”參数即可发送他们想要的任何账号。如果沒有正确验证,攻击者可以存取任何用户的账户。
https://example.com/app/accountInfo?acct=notmyacct
情境#2: 攻击者仅強迫浏览某些目标网址。存取管理页面需要管理员权限。
https://example.com/app/getappInfo
https://example.com/app/admin_getappInfo
如果未经身份验证的用户可以存取任一页面,那就是一个缺陷。 如果一个非管理员可以存取管理页面,这也是一个缺陷。
參考
对应的 CWE 列表
CWE-22 Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
CWE-23 Relative Path Traversal
CWE-35 Path Traversal: '.../...//'
CWE-59 Improper Link Resolution Before File Access ('Link Following')
CWE-200 Exposure of Sensitive Information to an Unauthorized Actor
CWE-201 Exposure of Sensitive Information Through Sent Data
CWE-219 Storage of File with Sensitive Data Under Web Root
CWE-264 Permissions, Privileges, and Access Controls (should no longer be used)
CWE-276 Incorrect Default Permissions
CWE-284 Improper Access Control
CWE-285 Improper Authorization
CWE-352 Cross-Site Request Forgery (CSRF)
CWE-359 Exposure of Private Personal Information to an Unauthorized Actor
CWE-377 Insecure Temporary File
CWE-402 Transmission of Private Resources into a New Sphere ('Resource Leak')
CWE-425 Direct Request ('Forced Browsing')
CWE-441 Unintended Proxy or Intermediary ('Confused Deputy')
CWE-497 Exposure of Sensitive System Information to an Unauthorized Control Sphere
CWE-538 Insertion of Sensitive Information into Externally-Accessible File or Directory
CWE-540 Inclusion of Sensitive Information in Source Code
CWE-548 Exposure of Information Through Directory Listing
CWE-552 Files or Directories Accessible to External Parties
CWE-566 Authorization Bypass Through User-Controlled SQL Primary Key
CWE-601 URL Redirection to Untrusted Site ('Open Redirect')
CWE-639 Authorization Bypass Through User-Controlled Key
CWE-651 Exposure of WSDL File Containing Sensitive Information
CWE-668 Exposure of Resource to Wrong Sphere
CWE-706 Use of Incorrectly-Resolved Name or Reference
CWE-863 Incorrect Authorization
CWE-913 Improper Control of Dynamically-Managed Code Resources