SV.EXPOSE.STORE

public 方法存储对 mutable 对象的引用时,会检测到该错误。

漏洞与风险

恶意小程序可以通过修改返回的结果来修改对象的内部状态。

Klocwork 安全漏洞 (SV) 检查器可识别可能创建危险数据的调用;这些调用被视为不安全的来源。用户所提供的任何数据都可能是不安全的来源,因为用户可能是攻击者,或者可能引入人为错误。

缓解与预防

通过不在 public 方法中存储对 mutable 对象的引用、改用 immutable 对象或避免使用 static 字段,可以预防该漏洞造成的危害。

示例 1

复制
    private Collection users;
    public void setUsers(Collection users) throws AuthorizationException {
      for (Iterator iter = users.iterator(); iter.hasNext();) {
        String user = (String) iter.next();
        if (!authorized(user)) throw new AuthorizationException();
 
      }
      this.users = users;
    }
    // ...
    void maliciousUserCode() throws AuthorizationException {
        Collection myUsers = new ArrayList();
        myUsers.add("goodUser");
        setUsers(myUsers);
        myUsers.add("anotherUser");
    }

针对第 26 行报告 SV.EXPOSE.STORE:方法存储对 mutable 对象“users”的引用。恶意用户可以修改对象的内部状态。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。