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");
}
このエラーは、パスで見つかった untrusted.dll という名前の最初のライブラリを「loadLibrary」がロードするときに発生します。Klocwork は 3 行目でエラーにフラグを立て、「loadLibrary」メソッドが呼び出されたことを示します。このメソッドは、「System.load」または「Runtime.load」の代わりに使用しないでください。
修正コード例
コピー
public void loadUntrustedLibrary() {
System.load("C:\\path\\trusted.dll");
}
この例では、「System.load」は引数としてファイル名を受け取り、それに完全修飾パスを指定できます。完全修飾パスを使用すると、ロードされるファイルに関する不確実性がなくなります。
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。
拡張機能
このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。ナレッジベースを更新することで、信頼できない呼び出しをさらに追加できます。詳細については、Java 解析のチューニングを参照してください。