SV.EXEC.ENV

このエラーは、アプリケーションによって使用される環境変数のすべてまたは一部に対し、ユーザー入力が未チェックで使用される場合に検出されます。

脆弱性とリスク

一般に、アプリケーション内での外部コマンドのプロセス作成や実行は、セキュリティ上の懸念事項となります。実行に使用されるコマンド文字列の一部にユーザー入力が使用される場合には、重大な脆弱性があります。攻撃者が環境変数を変更可能であるため、サービス拒否 (DoS)、データ破損、データのセキュリティ違反などの危険性があります。

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

軽減と防止

プロセス攻撃やコマンドインジェクション攻撃は、アプリケーションの外部からのあらゆる入力 (ユーザー入力、ファイル入力、システムパラメーターなど) を検証することで防止できます。検証には、長さと内容を含める必要があります。通常、英数字文字 (A ~ Z、a ~ z、0 ~ 9) のみが必要とされます。受け取ったその他の文字はすべてエスケープする必要があります。検証はデータのソースごとに実行します。たとえば、各パラメーターを HTTP 要求やユーザーインターフェイス (アプリケーション、コンソールなど) から読み取った場合に実行します。

例 1

コピー
     public void dataQuery(ServletRequest req) throws IOException {
         String var = "USER_HOME=" + req.getParameter("username");
         String[] env = new String[]{var};
         Process proc = Runtime.getRuntime().exec("processRequest", env);
         // parse results of command
         // ...
     }

SV.EXEC.ENV が 14 行目に対して報告されています。'var' は HTTP 要求パラメーターからデータを取得するため、汚染される可能性があります (12 行目)。この値は 13 行目で文字列配列 'env' に保存され、'env' は 14 行目でプロセス実行のパラメータとして使用されます。攻撃者が環境変数を変更し、アプリケーションの動作が変更される可能性があります。

拡張機能

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