SV.UMC.EXIT

Web アプリケーションは、System.exit() や Runtime.exit() の呼び出しを行うべきではありません。コードがデッドコードの場合や、Java 仮想マシンをシャットダウンする権限を持たない場合であっても、そのコードは、おそらくデバッグの取り残しコード、または非 J2EE アプリケーションから残されたコードです。

脆弱性とリスク

System.exit() および Runtime.exit() は、Java 仮想マシンをシャットダウンします。この結果、DOS 攻撃が発生する可能性があります。

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

軽減と防止

System.exit() および Runtime.exit() への呼び出しを削除する必要があります。適切なエラー処理を実装します。

例 1

コピー
     public void doPost(HttpServletRequest request,
                        HttpServletResponse response) throws IOException,
                                                             ServletException {
         doProcessRequest(request, response);
     }
     public void doGet(HttpServletRequest request,
                       HttpServletResponse response) throws IOException,
                                                            ServletException {
         doProcessRequest(request, response);
     }
     // called from servlet
     private void doProcessRequest(HttpServletRequest request,
                                   HttpServletResponse response) throws IOException,
                                                                        ServletException {
         if ("shutdown".equals(request.getParameter("action"))) {
             System.exit(1);
         }
         doCreatePage(request, response);
         // ...
     }

SV.UMC.EXIT が 31 行目の呼び出しに対して報告されています。'java.lang.System.exit()' メソッドの呼び出しをサーブレットコードで使用できません。