SV.AUTH.HASH.MIGHT
脆弱な暗号化アルゴリズムの使用
SV.AUTH.HASH チェッカーは、サーブレットの要求からフェッチされるユーザー名/パスワードに MD5 ハッシュ手法が使用されているケースをすべて検出します。ユーザー名が使用されていると、Klocwork は SV.AUTH.HASH.MIGHT 欠陥を報告します。MD5 の生成にパスワードが使用されていると、Klocwork は SV.AUTH.HASH.MUST 欠陥を報告します。
リリース 2023.2 の時点で、このチェッカーは Jakarta EE をサポートしています。
脆弱性とリスク
脆弱な暗号化アルゴリズムを使用すると、意図しないアクターへのリソースまたは機能の露出につながりかねず、攻撃者に機密情報が漏れたり、任意のコードを実行するチャンスすら与えたりする可能性があります。
脆弱コード例 1
コピー
                                                
                                            
                                              public void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException {
     String userName = request.getParameter("userName"); //Source
     String md5 = getMd5(userName);
     ...
  }
  public static String getMd5(String str)
     {
         try {
             MessageDigest md = MessageDigest.getInstance("MD5"); //SV.WEAK.CRYPT
             byte[] messageDigest = md.digest(str.getBytes());   //SV.AUTH.HASH.MIGHT - Sink
             //...
     }
                                                この例では、Klocwork は 11 行目で「リスクのある MD5 ハッシュをユーザー名に使用すると認証のバイパスを引き起こす可能性がある」という SV.AUTH.HASH.MIGHT 欠陥を報告します。
修正コード例 1
コピー
                                                
                                            
                                              public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       String userName = request.getParameter("userName");
       String md5 = getMd5(userName);
       ...
  }
  public static String getMd5(String str)
  {
   try {
       MessageDigest md = MessageDigest.getInstance("SHA3-256");
      byte[] messageDigest = md.digest(str.getBytes());
      //...
  }
                                                修正されたこの例では、より安全なハッシュ手法が使用されているため、Klocwork はもはや欠陥を報告しません。
関連チェッカー
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。