SV.TMPFILE

一時ファイルのパスの改ざん

このエラーは、未検証のユーザー入力が一時ファイル作成用の API に接頭辞、接尾辞、または一時ディレクトリパスとして入力される場合に表示されます。

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

脆弱性とリスク

この状況は、パス操作やサービス拒否につながる可能性があります。パス操作の場合、ユーザーが一時ファイルへのパスを操作して、保護されていないディレクトリ (たとえば Web root) で利用できるようにします。ユーザーがこのメソッドに IllegalArgumentException をスローさせるようにすることもできます (接頭辞が短すぎる場合など)。この状況は、IOException によっても生じる可能性があり、正しく処理されない場合には、アプリケーションのサービス拒否 (DoS) の原因になる場合があります。

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

軽減と防止

一時ファイルの名前にはユーザーデータを絶対に使用しないようにします。

脆弱コード例 1

コピー
     import javax.servlet.http.*;
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String name = req.getParameter("USERNAME");
         File file = File.createTempFile(name, ".tmp");
         dumpSensitiveInfoAndRunSomeApp(file);
         file.delete();
     }
 
     private void dumpSensitiveInfoAndRunSomeApp(File file) {
         // ...
     }

Klocwork は、4 行目で SV.TMPFILE の欠陥を報告し、次を示します。'name' には HTTP 要求パラメーターからのデータが含まれているため、汚染される可能性があります (3 行目)。この値は、4 行目で一時ファイルの作成に使用されます。これは、別の場所で一時ファイルの作成に使用される可能性があり、アクセス権限昇格や DoS 攻撃を招く可能性があります。

脆弱コード例 2

コピー
     import jakarta.servlet.http.*;
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String name = req.getParameter("USERNAME");
         File file = File.createTempFile(name, ".tmp");
         dumpSensitiveInfoAndRunSomeApp(file);
         file.delete();
     }
 
     private void dumpSensitiveInfoAndRunSomeApp(File file) {
         // ...
     }

Klocwork は、4 行目で SV.TMPFILE の欠陥を報告し、次を示します。'name' には HTTP 要求パラメーターからのデータが含まれているため、汚染される可能性があります (3 行目)。この値は、4 行目で一時ファイルの作成に使用されます。これは、別の場所で一時ファイルの作成に使用される可能性があり、アクセス権限昇格や DoS 攻撃を招く可能性があります。

セキュリティトレーニング

Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。

拡張機能

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