SV.AUTH.HASH.MUST
脆弱な暗号化アルゴリズムの使用
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 password = request.getParameter("password"); //Source
String md5 = getMd5(password);
...
}
public static String getMd5(String str)
{
try {
MessageDigest md = MessageDigest.getInstance("MD5"); //SV.WEAK.CRYPT
byte[] messageDigest = md.digest(str.getBytes()); //SV.AUTH.HASH.MUST - Sink
//...
}
この例では、Klocwork は 10 行目で「リスクのある MD5 ハッシュをパスワードに使用すると認証のバイパスを引き起こす可能性がある」という SV.AUTH.HASH.MUST 欠陥を報告します。
修正コード例 1
コピー
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String password = request.getParameter("password"); //Source
String md5 = getMd5(password);
...
}
public static String getMd5(String str)
{
try {
MessageDigest md = MessageDigest.getInstance("SHA3-256");
byte[] messageDigest = md.digest(str.getBytes());
//...
}
修正されたこの例では、より安全なハッシュ手法が使用されているため、Klocwork はもはや欠陥を報告しません。
関連チェッカー
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。