SV.TAINT

汚染データ

このエラーは、ユーザー入力からのデータがトレースされ、潜在的に危険な場所で使用される場合に検出されます。このエラーは、HTTP 要求経由の入力データに関して、Web インターフェイスからアプリケーションの最終目的地までの流れを解析します。これは、他に未検証/汚染データのエラータイプが見当たらない脆弱性の発見に有効です。

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

脆弱性とリスク

一般に、未検証のユーザー入力の使用は、セキュリティ脆弱性です。アプリケーションの現在のイテレーションでは未検証のユーザー入力が危険な方法で使用されていない場合でも、今後のイテレーションで危険を生じる可能性があり、通常、データは汚染されていないと仮定されています。すべてのユーザー入力は、長さと内容についてアプリケーションの入力時にチェックし、このデータの以降の使用が攻撃に対して脆弱でないようにする必要があります。

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

軽減と防止

未検証のユーザー入力や汚染データによる脆弱性、およびユーザー入力に関連するその他の脆弱性は、アプリケーションの外部からのあらゆる入力 (ユーザー入力、ファイル入力、システムパラメーターなど) を検証することで緩和できます。検証には、長さと内容を含める必要があります。通常、英数字文字 (A ~ Z、a ~ z、0 ~ 9) のみが必要とされます。受け取ったその他の文字はすべてエスケープする必要があります。この検証は、各パラメーターを HTTP 要求から読み取った場合などに、データのソースごとに実行する必要があります。

脆弱コード例 1

コピー
import javax.servlet.http.*;
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
         String act = req.getParameter("action");
         String value = req.getParameter("actionValue");
         System.setProperty(act, value);
 }

SV.TAINT が 5 行目で報告されます。潜在的な汚染データによる脆弱性です。'act' に保存された未検証のユーザーデータが機密性の高いメソッドに入力されています。

脆弱コード例 2

コピー
import jakarta.servlet.http.*;
 protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
         String act = req.getParameter("action");
         String value = req.getParameter("actionValue");
         System.setProperty(act, value);
 }

SV.TAINT が 5 行目で報告されます。潜在的な汚染データによる脆弱性です。'act' に保存された未検証のユーザーデータが機密性の高いメソッドに入力されています。

拡張機能

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