SV.LOADLIB.INJ

如果使用 System.loadLibrary 或 Runtime.loadLibrary,则会导致此错误,这两者都容易受到环境注入的攻击。

漏洞与风险

System.loadLibrary 和 Runtime.loadLibrary 都接受名称,而不是完全限定的路径,这允许修改后的 PATH 从不受信任的来源加载具有相同名称的库。两者都以提升的权限运行,会让攻击者进一步控制系统。

漏洞代码示例

复制
   public void loadUntrustedLibrary() {
      //loadLibrary will load the first library found on the path with the name untrusted.dll
      System.loadLibrary("untrusted.dll");
   }

loadLibrary 加载在路径上找到的第一个名为 untrusted.dll 的库时,会发生该错误。Klocwork 标记第 3 行出现该错误,这表示调用了 loadLibrary 方法。此方法不能代替 System.load 或 Runtime.load。

修正代码示例

复制
   public void loadUntrustedLibrary() {
      System.load("C:\\path\\trusted.dll");
   }

在此示例中,System.load 以文件名作为其参数,然后我们可提供完全限定的路径。使用完全限定的路径可以消除加载哪个文件的任何不确定性。

安全培训

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

扩展

此检查器可通过 Klocwork 知识库进行扩展。通过知识库更新,您可以添加其他不受信任的调用。有关详情,请参阅调整 Java 分析。