SV.UMC.THREADS

この警告は、アプリケーションがスレッドを使用している場合に報告されます。

脆弱性とリスク

多くの場合、スレッドの管理は避けるべきです。たとえば、EJB 標準には次のようなガイドラインが含まれています。Enterprise Bean は、スレッドの管理を試みてはなりません。Enterprise Bean は、スレッドの開始、停止、一時停止、再開、スレッドの優先順位や名前の変更を試みてはなりません。Enterprise Bean は、スレッドグループの管理を試みてはなりません。また、サーブレットにおけるスレッド管理もきわめて問題が多く、問題を引き起こすことがあります。一方、スレッドはアプレットやその他の GUI アプリケーションでも使用されています。このような状況においては、1 つの警告が 1 つのエラーを報告するだけではなく、このコードに対してさらに注意を払う必要があるというプログラマーへの注意喚起の役目を果たします。

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

軽減と防止

EJB の場合、スレッドを使用せずに、フレームワークを使用して並列実行を行います。

例 1

コピー
 public class SV_UMC_THREADS_Sample_1 extends HttpServlet {
     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);
     }
     private void doProcessRequest(HttpServletRequest request,
                                   HttpServletResponse response) throws IOException,
                                                                        ServletException {
         final StringBuffer buffer = new StringBuffer();
         Runnable r = new Runnable() {
             public void run() {
                 buffer.append("Processing...\n");
                 // do something
                 buffer.append("Finished.\n");
             }
         };
         Thread t = new Thread(r);
         t.start();
         // do something else, then get results from background thread
         try {
             t.join();
         } catch (InterruptedException e) {
         }
         String log = buffer.toString();
         // create page...
     }
 }

SV.UMC.THREADS が 36 行目の 'Thread' コンストラクタの呼び出しに対して報告されています。'Thread' メソッドが使用されています。EJB などの多くの場合では、スレッドの管理は廃止されています。また、スレッドの管理は、常に多くのエラーを生じます。 SV.UMC.THREADS が 37 行目の呼び出しに対して報告されています。'start' メソッドが使用されています。EJB などの多くの場合では、スレッドの管理は廃止されています。また、スレッドの管理は、常に多くのエラーを生じます。SV.UMC.THREADS が 40 行目の呼び出しに対して報告されます。'join' メソッドが使用されています。EJB などの多くの場合では、スレッドの管理は廃止されています。また、スレッドの管理は、常に多くのエラーを生じます。

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

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