SV.TAINT_NATIVE

汚染データがネイティブ コードに渡されています

このエラーは、未チェックのユーザー入力がネイティブメソッドの呼び出しに渡されている場合に発生します。

リリース 2023.2 の時点で、このチェッカーは Jakarta EE をサポートしています。

脆弱性とリスク

ネイティブ コードは、通常、C/C++ コードです。この言語には、固有のセキュリティリスクがあります。ユーザー入力がネイティブコードに入力された場合、Java コードでのエラーよりもはるかに危険な問題 (JVM クラッシュによるバッファオーバーフロー、サービス拒否 (DoS) など) が発生する可能性があります。

Klocwork セキュリティ脆弱性 (SV) チェッカーは、潜在的に危険なデータを生成する呼び出しを特定します。このような呼び出しは安全でないソースと考えられます。ユーザーは攻撃者になる可能性があり、ヒューマンエラーを取り込む可能性があるため、安全でないソースはユーザーが指定した任意のデータである可能性があります。

軽減と防止

すべてのユーザーデータは、ネイティブメソッドに渡す前に無害化する必要があります。少なくとも、ユーザーデータはサイズおよび '\0' などの危険なシンボルについてチェックする必要があります。さらに、危険なシンボルがないか文字列をチェックする前に、標準化する ことを強くお勧めします。

脆弱コード例 1

コピー
     import javax.servlet.http.*;
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String name = req.getParameter("userName");
         processNatively(name);
     }
 
     private native void processNatively(String name);

Klocwork は、4 行目で SV.TAINT_NATIVE の欠陥を報告し、次を示します。'name' からの汚染データがネイティブコードに渡されており、BufferOverflow やその他の重大なエラーを生じる可能性があります。

脆弱コード例 2

コピー
     import jakarta.servlet.http.*;
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String name = req.getParameter("userName");
         processNatively(name);
     }
 
     private native void processNatively(String name);

Klocwork は、4 行目で SV.TAINT_NATIVE の欠陥を報告し、次を示します。'name' からの汚染データがネイティブコードに渡されており、BufferOverflow やその他の重大なエラーを生じる可能性があります。

拡張機能

このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、Java 解析のチューニングを参照してください。