作者: gentle_zhou
原文链接:OWASP Top 10漏洞解析(1)- A1:Broken Access Control 访问控制失效-云社区-华为云
Web应用程序安全一直是一个重要的话题,它不但关系到网络用户的隐私,财产,而且关系着用户对程序的新人。随着Web应用程序功能持续增加,复杂性不断提高,这些程序也面临着越来越多的安全威胁和挑战。
为了帮助这些应用程序的开发团队和安全人员了解和防范这些威胁,提高安全意识,编写更安全的代码,OWASP(Open Web Application Security Project,开放式Web应用程序安全项目)发布了一份标准指南,称为OWASP Top 10。
这是一份关于Web应用程序安全风险的标准指南,它基于全球范围内的安全专家和数据提供者的共识,列出了当前最严重、最关键的10种Web应用程序安全风险,并提供了相应的防范措施和建议。OWASP Top10 每隔几年会更新一次(目前已经发布了六个版本,分别是2004年、2007年、2010年、2013年、2017年和2021年),最新的版本是在2021年发布的OWASP Top10:2021。
今天,就来为大家讲解其中的第一条缺陷:Broken Access Control访问控制失效,它从2017年版本的第5位上升到了当前第一位。
破坏访问控制指的是访问控制策略没有被正确的执行,导致用户可以在他们的预期权限之外进行操作。这种缺陷通常会导致未授权的信息被泄露,修改,销毁,或者让用户执行了超出其权限限制的业务功能。
常见的访问控制失效类型
常见的访问控制失效类型包括:
- 违反最小权限原则或默认拒绝原则,即访问只应该被授予限定的能力、角色或用户,但却对任何人开放。
- 权限提升,即用户使用了超过其原先身份的权限,比如在未登录时拿取到了用户权限,或在以用户身份登录时拿取到了管理员权限。
- 通过参数篡改或强制浏览来修改URL、应用状态、HTML页面,或则使用攻击工具修改API请求,以此绕过访问控制检查。
- 修改唯一标识符(不安全的直接对象引用),即通过修改应用程序中用户可控的值(如参数)来访问对象,但程序没有进行适当的授权检查,导致其可以去查看或编辑其他人的账户。
- 元数据操作,例如重放或篡改JSON Web Token(JWT)来访问控制令牌,或则通过修改cookie、隐藏字段来提升权限。
- CORS配置错误,即跨域资源共享(CORS)的机制没有正确设置,导致浏览器无法访问不同源的资源,导致访问控制检查被绕过,造成服务器信息泄露或数据篡改。
- API未设置访问控制。
如何防止该缺陷的发生
访问控制仅仅在可信的服务器端代码或则API中生效,因为这可以防止攻击者修改访问控制检查或元数据。同时,需要做到如下几点:
- 除了公共资源意外,其余访问默认都拒绝
- 实现一次访问控制机制,并在整个应用程序中重复使用它们,包括尽量减少跨域资源共享(CORS)的使用。
- 模型访问控制应该强制记录用户的所有权,而不是接受任意用户可以创建、读取、更新或删除任何记录。
- 一些特殊应用程序业务的限制需求应该由域模型(domain model)强制执行。
- 禁用web服务器目录列表,并确保文件元数据(例如.git)和备份文件不在web根目录中。
- 记录访问控制失败的发生,在适当的时候提醒管理员(例如,重复失败X次)。
- 对API和控制器访问进行速率限制,以最小化自动化攻击工具造成的危害。
- 用户注销后,有状态会话标识符应该在服务器上失效。无状态JWT令牌应该是短暂的,这样攻击者的机会窗口就会被最小化。对于寿命较长的jwt,强烈建议遵循OAuth标准来撤销访问。
开发人员和安全质量相关人员在日常,应该养成针对访问控制功能模块进行集成测试的习惯。
举个栗子
应用程序在访问账号信息的SQL语句中使用了未被验证的数据:
pstmt.setString(1, request.getParameter("acct"));ResultSet results = pstmt.executeQuery( );
那么攻击者就可以去修改这个参数信息"acct”为任何他们想要的信息,配上任何他们希望了解的账号。如果程序对这信息没有好好验证,那么攻击者就可以借此去了解任何一位用户的账号信息,比如https://example.com/app/accountInfo?acct=notmyacct
。
参考链接
- https://owasp.org/Top10/A01_2021-Broken_Access_Control/
体验华为云CodeArts Check 代码检查服务:代码检查CodeArts Check_精准定位_代码缺陷_安全检查_华为云