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 以文件名作为其参数,然后我们可提供完全限定的路径。使用完全限定的路径可以消除加载哪个文件的任何不确定性。
外部指导
扩展
此检查器可通过 Klocwork 知识库进行扩展。通过知识库更新,您可以添加其他不受信任的调用。有关详情,请参阅调整 Java 分析。