Table of Contents

    概要

    Synopsys CyRCの研究者は、広く使用されているJava暗号化ライブラリBouncyCastleのOpenBSDBcryptクラスに認証バイパスの脆弱性であるCVE-2020-28052を発見しました。 このクラスは、パスワードハッシュ用のBcryptアルゴリズムを実装します。 攻撃者は、BouncyCastleのOpenBSDBcryptクラスを使用するアプリケーションでパスワードチェックをバイパスできます。

    methodOpenBSDBcrypt.doCheckPasswordの脆弱性は、 00dfe74aeb4f6300dd56b34b5e6986ce6658617eのコミットで明らかになりました。

    doCheckPasswordメソッドは、欠陥のある検証ルーチンを実装します。 このコードは、0から59の位置にある文字が一致するかどうかをチェックするのではなく、0から59までの文字のインデックスをチェックします。 たとえば0x00から0x3Bまでのバイトを含まないハッシュを生成するパスワードは、それらを含まない他のすべてのパスワードハッシュと一致します。 このチェックに合格すると、攻撃者は保存されているハッシュ値とバイトごとに一致させる必要がなくなります。

    boolean isEqual = sLength == newBcryptString.length();
    for (int i = 0; i != sLength; i++)
    {
        isEqual &= (bcryptString.indexOf(i) == newBcryptString.indexOf(i));
    }
    return isEqual;

    Bcrypt.doCheckPassword()を使用してパスワードをチェックするほとんどの場合、悪用に成功すると認証をバイパスできるようになります。

    悪用(Exploitation)

    攻撃者は、バイパスがトリガーされるまで、パスワードの試行をブルートフォースする必要があります。 私たちの実験では、テストされたパスワードの20%が1,000回の試行で正常にバイパスされたことが示されています。 一部のパスワードハッシュは、0から60(1から59)の間にあるバイト数によって決定され、より多くの試行を必要とします。 さらに、調査の結果、十分な試行を行うことで、すべてのパスワードハッシュをバイパスできることがわかりました。 まれに、一部のパスワードハッシュは任意の入力でバイパスできます。

    影響のあるソフトウェア

    • Bouncy Castle 1.65 (released 3/31/2020) および Bouncy Castle 1.66 (released 7/4/2020) はCVE-2020-28052の影響があります。
    • Bouncy Castle 1.67 (released 11/1/2020) は脆弱性を修正済み。1.65以前のバージョンはCVE-2020-28052の影響を受けません.

    注記:この開示の結果、シノプシスは自社製品を調査し、この開示が公開された時点でBouncyCastleバージョン1.65または1.66を使用していないことを発見しました。

    影響

    Bcryptハッシュベースの認証は、たとえばWebアプリケーションやAPIでの認証チェックに使用できます。

    CVSS 3.1 スコア

    BouncyCastleはソフトウェアライブラリです。 次の最悪の場合の実装シナリオは、CVSSスコアを決定する際に想定されました(ソフトウェアライブラリのFIRSTCVSSスコアリングガイドラインに従う)。Bouncy Castle is a

    Bcryptハッシュは、ユーザーが指定したパスワードをチェックするために使用されます。 認証バイパスがトリガーされると、攻撃者は正当なユーザーと同じ操作を実行できます(たとえば、シングルサインオン(SSO)システムへの管理者レベルのアクセス権を取得します)。

    ベクター:  AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H/E:P/RL:O/RC:C

    スコア: 8.1

    攻撃される可能性の指標:
    Attack Vector (AV): N = Network 
    Attack Complexity (AC): H = High 
    Privileges Required (PR): N = None 
    User Interaction (UI): N = None 
    Scope (S): C = Changed scope

    影響の指標 
    Confidentiality Impact (C): H = High impact 
    Integrity Impact (I): H = High impact 
    Availability Impact (A): H = High impact

    修正措置

    ソフトウェアベンダーとライブラリのユーザーは、Bouncy CastleJavaリリース 1.67 以降  にアップグレードすることを強くお勧めします。

    発見者

    発見した研究者は下記の2名で、フィンランドのオウルにあるCybersecurity Research Center (CyRC) に所属しています:

    • Matti Varanka
    • Tero Rontti

    シノプシスは、Bouncy Castleチームがこの問題に速やかでタイムリーに対処してくれたことに感謝します。

    タイムライン

    • 2020年10月20日: 脆弱性をBouncy Castleに報告
    • 2020年10月22日: シノプシスは自社製品にこの脆弱性を含むバージョンを用いていないことを確認
    • 2020年10月27日: シノプシスは脆弱性をBouncy Castleに公開
    • 2020年10月28日: Bouncy Castleは脆弱性を確認
    • 2020年11月2日: シノプシスがBouncy Castleによる脆弱性の修正を確認
    • 2020年12月17日: アドバイザリーの発行