はじめまして。

今度運用することになった Web サイトで、専門業者より XSS の脆弱性が指摘されました。

内容は・・・

> 最新版でないバージョンのjQueryが使用されています。  
>
> 古いバージョンのjQueryでは、クロスサイトスクリプティング等の脆弱性が報告されているため、新しいバージョンのjQueryを使用することを推奨します。

とのことでした。

その Web サイトの jQuery のバージョンは v1.4.3 なので、確かに古いです。しかしながら、 jQuery
というのは新しいバージョンにすると、今まで使っていたものが使えなくなっていたり、仕様が変わって Web
サイトの画面の動作に影響するので、安易にバージョンアップするのはとても危険だと思います。

また、 jQuery というのは頻繁にバージョンアップされているので、バージョンアップするたびに最新版の jQuery に置き換えて XSS
の対応しなければならないのは、とても現実的でないと感じています。

jQuery の XSS 対応について、何か良い方法はないものでしょうか？  
どうかお知恵をお貸しください。
CC BY-SA 3.0
2015-01-23T15:14:53.890
5164
2015-02-06T00:35:22.637
2015-01-23T15:20:26.380
4978
7634
question
jquery xss
jQuery の XSS 脆弱性に対応する良い方法はないか ( v1.4.3 )
XSS脆弱性はjQueryのせいではありません。  
使い方次第でどのバージョンのjQueryでも脆弱性のあるコードを書くことができます。

仮に何らかのjQueryプラグインで脆弱性が見つかって、プラグインをアップデートしようとした時に古いjQueryを使ってなんとか動かそうとする方がよほど現実的でないと思います。

それを踏まえて、まずは可能な範囲だけ部分的にjQueryをアップデートしてみてはどうでしょうか。  
複数の異なるバージョンを同時に使い分けながら徐々にコード全体を新しいjQueryに移していきます。

```

    <script type="text/javascript" src="jquery-1.4.3.js"></script>
    <script type="text/javascript">
      var jq_143 = $.noConflict(true);
    </script>
    
    <script type="text/javascript" src="jquery-current.js"></script>
    <script type="text/javascript">
      var jq_current = $.noConflict();
    </script>
    
    <script type="text/javascript">
      // 古いコードを無名関数でラップしてjq_143で$を上書きする
      (function ($) {
        // アップデートで問題になりそうなコードはjq_143を使う
        $(function () {
          ...
        });
      })(jq_143);
    
      // XSS脆弱性を抱えていそうな部分にjq_currentを使う
      (function ($) {
        $(function () {
          ...
        });
      })(jq_current):
    </script>
    
```
CC BY-SA 3.0
2015-01-23T16:09:03.320
5169
2015-01-23T16:09:03.320
62
5164
answer
こちらにある回答も参考になると思います。

<http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13141045628>
CC BY-SA 3.0
2015-02-04T02:58:43.517
5912
2015-02-04T02:58:43.517
440
5164
answer
> 最新版でないバージョンのjQueryが使用されています。  
>  古いバージョンのjQueryでは、クロスサイトスクリプティング等の脆弱性が報告されている...

と言う指摘事項は、jQuery1.6.3未満のバージョンに存在する[CVE-2011-4969](http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-4969)の脆弱性についての指摘です。アプリケーションコードに起因するXSSを指摘されているわけではありません。監査内容にもよりますがツールによる簡易診断程度であれば間違いなくアプリケーションコードは対象外で、アプリケーションコードに起因する脆弱性があるかないかは判断できません。以下の回答もアプリケーションコードに起因する脆弱性に対する対処は考慮していません。

一般原則は、

  * セキュリティアップデートはできるだけ速やかに適用する。
  * セキュリティアップデートでないものは、変更内容と開発の状況を考慮し適宜実施する。

です。セキュリティアップデートでないからといって古いバージョンで放置していると、もし脆弱性が発見されたときに、バージョンアップに伴う非互換の対応も慌てて実施しなければならないことになります。それを避けるため、ある程度は最新版に追随する必要があります。そういうことも考慮にいれての「適宜」です。

今脆弱性が発見されたらどのバージョンで対応されるのか、そのバージョンに更新するにはどの程度の確認や変更が必要になるのか、は把握しておく必要があります。

ただし、セキュリティアップデートがリリースされた場合の対応の例外として、その脆弱性の詳細について十分理解した上で、

  * 自分の環境にはその攻撃経路が存在しないと明確に判断できる
  * 信頼できるワークアラウンドを適用する
  * アプリケーションコード側で対策を実施している/できる

場合については、アップデートをある程度先回しにするという判断をする場合もあります。この場合の判断は個々の環境次第ですので、環境を知らない人の意見やワークアラウンドの提案は聞くべきではありません。自分で判断ができないのであれば、原則に従い速やかにアップデートしてください。

> jQuery というのは新しいバージョンにすると、今まで使っていたものが使えなくなっていたり、仕様が変わって Web
> サイトの画面の動作に影響するので、安易にバージョンアップするのはとても危険だと思います。

この点については全くその通りです。バージョンアップの必要性を検討し、動作検証を行った上で実施されるのが当然のことです。

しかし、jQueryの1.4.3で脆弱性を指摘されているというのは、1.6.3未満で存在しているXSS脆弱性のことでしょう。これが公表されたのは2011年のことです。1.4.3のリリースは2010年です。4年前のプロダクトを使用していて3年以上以前の問題が放置されているというのは、「安易にアップデートするのは危険」だから許容されるレベルを遙かに超えています。

そして、jQueryではそれ以降、jQueryそのものについてセキュリティに関わるアップデートはされていないはずです。したがって、

> バージョンアップするたびに最新版の jQuery に置き換えて XSS の対応しなければならないのは、とても現実的でないと感じています

というのは的外れです。

* * *

以後余談。

jQuery以外は大丈夫なのか、というのが非常に心配です。HTML+Javascriptのみのwebサーバだとしても、OS自体に存在するここ最近のHeartBleedやShellShockなどの大物の脆弱性の対応は済んでいるのでしょうか。CMSなどの既製品のプロダクトが動いているのであればそちらの対応は大丈夫でしょうか。想像したくないですがもし既製品でない(自作や外部委託で作成された)Webアプリケーションが動いているようであれば、アプリケーションに特化した個別のセキュリティ監査は受けられていますか。

業務で運用されているWebサイトで、jQuery1.4.3の脆弱性が放置されていてどう対応すべきかわからない、というのはかなり深刻な状況です。受けられた監査がどのような物か分かりませんが、指摘事項がjQueryだけなのであれば、外部からソフトのバージョンや一部の設定をチェックする程度の簡易監査だと思われます。静的なHTML+JavascriptだけのWebサイト以上のことをやっているのであれば、システムについては詳細なセキュリティ監査を、運用についてもコンサルティングを受けられるべきだと強くおすすめします。(下手に事故が起きるとあなたの責任が問われますよ？)
CC BY-SA 3.0
2015-02-04T04:22:51.363
5917
2015-02-06T00:35:22.637
2015-02-06T00:35:22.637
5793
5793
5164
answer