SV.EXEC.DIR
このエラーは、アプリケーションによって実行されるコマンドの選択に使用される作業ディレクトリのすべてまたは一部に対し、ユーザー入力が未チェックで使用される場合に検出されます。
脆弱性とリスク
一般に、アプリケーション内での外部コマンドのプロセス作成や実行は、セキュリティ上の懸念事項となります。この特定の脆弱性は、コマンドまたはプロセスで使用される作業ディレクトリのすべてまたは一部が未検証のユーザー入力から取得される場合に生じます。攻撃者が作業ディレクトリを操作し、好ましくない動作を引き起こすことができ、場合よっては意図したコマンドではなく、攻撃者が植え付けたコマンドが実行される可能性があります。
Klocwork セキュリティ脆弱性 (SV) チェッカーは、潜在的に危険なデータを生成する呼び出しを特定します。このような呼び出しは安全でないソースと考えられます。ユーザーは攻撃者になる可能性があり、ヒューマンエラーを取り込む可能性があるため、安全でないソースはユーザーが指定した任意のデータである可能性があります。
軽減と防止
プロセス攻撃やコマンドインジェクション攻撃は、アプリケーションの外部からのあらゆる入力 (ユーザー入力、ファイル入力、システムパラメーターなど) を検証することで防止できます。検証には、長さと内容を含める必要があります。通常、英数字文字 (A ~ Z、a ~ z、0 ~ 9) のみが必要とされます。受け取ったその他の文字はすべてエスケープする必要があります。検証はデータのソースごとに実行します。たとえば、各パラメーターを HTTP 要求やユーザーインターフェイス (アプリケーション、コンソールなど) から読み取った場合に実行します。
例 1
public void dataQuery(ServletRequest req) throws IOException {
String var = req.getParameter("username");
File userRoot = new File(webRoot, var);
Process proc = Runtime.getRuntime().exec("processRequest", null, userRoot);
// parse results of command
// ...
}
SV.EXEC.DIR が 18 行目に対して報告されています。'var' は HTTP 要求パラメーターからデータを取得するため、汚染される可能性があります (13 行目)。この値は、17 行目で 'java.io.File' タイプのオブジェクトの作成に使用された後、18 行目で実行されるプロセスの作業ディレクトリとして使用されます。
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。
拡張機能
このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、Java 解析のチューニングを参照してください。