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」は引数としてファイル名を受け取り、それに完全修飾パスを指定できます。完全修飾パスを使用すると、ロードされるファイルに関する不確実性がなくなります。

外部参考資料

拡張機能

このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。ナレッジベースを更新することで、信頼できない呼び出しをさらに追加できます。詳細については、Java 解析のチューニングを参照してください。