不安全的直接对象引用

不安全的直接对象引用

当开发人员公开对内部实现对象(例如:文件,目录或数据库密钥)的引用而没有任何允许攻击者操纵这些引用来访问未授权数据的验证机制时,可能会发生直接对象引用。

通过下面每项来了解这个漏洞的威胁代理,攻击向量,安全弱点,技术影响和业务影响。

  • 威胁代理 - 任何只能部分访问某些类型系统数据的用户。
  • 攻击者的方法 - 攻击者是一个授权系统用户,只需将直接引用系统对象的参数值更改为用户未授权的另一个对象。
  • 安全弱点 - 应用程序并不总是验证用户是否已获得目标对象的授权。这导致不安全的直接对象引用缺陷。
  • 如何发现缺陷 - 测试人员可以检测到此类缺陷,并快速显示代码分析是否正确验证了授权。
  • 技术影响 - 可以破坏参数引用的所有数据。
  • 业务影响 - 公众暴露漏洞对业务的影响。

示例

该应用程序在访问帐户信息的SQL调用中使用未验证的数据。

String sqlquery = "SELECT * FROM useraccounts WHERE account = ?";
PreparedStatement st = connection.prepareStatement(sqlquery, ??);
st.setString( 1, request.getParameter("acct"));
ResultSet results = st.executeQuery( );

攻击者在其浏览器中修改查询参数以指向Admin

http://webapp.com/app/accountInfo?acct=admin

动手实践

第1步 - 登录Webgoat并导航到访问控制缺陷部分。目标是通过导航到它所在的路径来检索tomcat-users.xml。以下是该场景的快照。

第2步 - 文件的路径显示在’当前目录是’字段 - C:\Users\userName$\.extract\webapps\WebGoat\lesson_plans\en中我们也知道tomcat-users.xml文件是保存在C:\xampp\tomcat\conf下。

第3步 - 需要遍历当前目录并从C:/Drive导航。可以通过使用Burp Suite拦截流量来执行相同的操作。

第4步 - 如果尝试成功,它将显示tomcat-users.xml,并显示消息Congratulations. You have successfully completed this lesson.

预防机制

  • 开发人员可以使用以下资源/点作为指导,以防止在开发阶段本身引入不安全的直接对象。
  • 开发人员应仅使用一个用户或会话进行间接对象引用。
  • 还建议在使用来自不受信任来源的直接对象引用之前检查访问权限。