SV.AUTH.BYPASS.MIGHT

不正確な認証

このチェッカーは、ユーザー認証に使用されている方法が十分でかつ認証がバイパスされないものであるかどうかを検証します。プロジェクト認証は、loggedIn クッキー値に左右される可能性があります。SV.AUTH.BYPASS.MIGHT チェッカーは、認証のバイパスに loggedIn クッキーが使用される可能性のあるケースを特定します。

このチェッカーは、本体で .getParameter() または .get() のいずれかと一緒に "userName" が使用されている場合に欠陥を報告します。

脆弱性とリスク

アクターがその特定のアイデンティティを主張していても、その主張の正しさがソフトウェアで (十分に) 証明されない場合、この脆弱性は意図しないアクターへのリソースまたは機能の露出につながりかねません。この脆弱性があると、攻撃者に機密情報が漏れたり、任意のコードを実行するチャンスを与えたりする可能性があります。

脆弱コード例 1

コピー
  import jakarta.servlet.http.*;
   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       Map<String, String> result = new HashMap<>();
 
       // result contains cookie values from request
       ...
       if ("true".equals(result.get("loggedIn"))
       {
           if (! AuthenticateUser(request.getParameter("username"), ...)) { // user authentication
               System.out.error("Error: you need to log in first");
          }
          else {
              Cookie loggedIn = new Cookie("loggedIn", "true");
              ...
          }
      }
  }

Klocwork は、7 行目で SV.AUTH.BYPASS.MIGHT の欠陥を報告し、「クッキー 'loggedIn' の使用は認証のバイパスを引き起こす可能性があります」を示します。この例では、ブラウザーで loggedIn クッキーが設定されて認証がバイパスされる可能性があります。

修正コード例 1

コピー
   import javax.servlet.http.*;
   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       Map<String, String> result = new HashMap<>();
     
       if (! AuthenticateUser(request.getParameter("username"), ...)) { // user authentication
           System.out.error("Error: you need to log in first");
       }
       else {
           Cookie loggedIn = new Cookie("loggedIn", "true");
           ...
      }
  }

この例では、認証のバイパスにクッキーが使用されないため、Klocwork はもはや欠陥を報告しません。

関連チェッカー

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

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

拡張機能

このチェッカーは、プロジェクトで使用される特定のクッキーを探して、ユーザーのログインステータスを特定するように調整できます。これは、.jkb ファイル内の @CheckerParam オプションを使用して行うことができます。このチェッカーを調整してカスタム値を追加すると、デフォルト値はもはや使用されなくなります。デフォルト値も含めたい場合は、カスタム値と一緒に .jkb ファイルにもう一度デフォルト値を追加できます。詳細については、Java 解析のチューニングを参照してください。