不安全的直接对象引用



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

让我们借助简单的图表了解此缺陷的威胁代理、攻击媒介、安全弱点、技术影响和业务影响。

insecure direct obj ref

示例

应用程序在访问帐户信息的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。以下是场景的快照。

1. insecure direct obj ref1

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

步骤3 - 我们需要遍历当前目录的所有路径并从C:\驱动器导航。我们可以通过使用Burp Suite拦截流量来执行相同的操作。

2 insecure direct obj ref

步骤4 - 如果尝试成功,它将显示tomcat-users.xml,并显示消息“恭喜。您已成功完成本课程。”

2 insecure direct obj ref

预防机制

开发人员可以使用以下资源/要点作为指南,以在开发阶段本身防止不安全的直接对象引用。

  • 开发人员应仅对间接对象引用使用一个用户或会话。

  • 还建议在从不受信任的来源使用直接对象引用之前检查访问权限。

广告