Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Namazu v2.0.7 にクロスサイトスクリプティング脆弱性



On Sun, 25 Nov 2001 21:22:34 +0900 
"Yoshinori TAKESAKO" <takesako@xxxxxxxxx> wrote:
> * Cross-Site Scripting 脆弱性に関する修正
>   http://cvs.namazu.org/namazu/src/output.c.diff?r1=1.80.4.5&r2=1.80.4.6

> 問題のご指摘どうもありがとうございました。>高木さん
> よろしければ、修正内容のご確認をお願いできればと思っております。

先ほどは、

| 一般に、「"」で括る部分に文字列を挿入して出力する場合には、その文脈で
| は文字「"」はメタキャラクタなのであり、「&quot;」などにエスケープする
| 必要があります。

と述べたのでしたが、その後再考したところ、この個所については、URLの一
部分を出力する個所なので、URLエンコードする、つまり「"」を「%22」に変
換する方が(意味的には)適切かもしれません。

きっちりやろうとすると、一度、QUERY_STRINGをパラメタごとに分解して、パ
ラメタの値ごとにURLエンコードし、組み立てなおすのが最も正しいですが、
それは面倒なことになりますね…。

(QUERY_STRINGで意味を持つ記号である)「&」「=」「+」と「%」、それ以外
の全部の記号(のうちURLエンコードすべき記号)を「%」でエンコードしなお
す、というのが単純かつ確実かもしれません。

        ***

…と書いているうちに、やっぱり「&quot;」でいいような気もしてきました。

ソースを拝見したのですが、この部分は、外部から与えられた QUERY_STRING 
をそのまま引き継ぐように渡しているわけですね。プログラムが生成した正常
な query ならば、「%」エンコードは正しくされているはずで、それをそのま
ま渡せばよく、今回のように「不正に」与えられた query の場合には、元々
不正なので「%」エンコードの必要は無いと。その代わり、「"」で括っている
のだから「&quot;」に変換するということで、セキュリティ的には解決と。

独り言のようですみません。最近、この種の処理をどのようにするのが最も適
切なのかを考えているところです。おそらく、

  1. URLを生成する個所では、値に対して「%」エンコードを施す。
  2. 「"」「'」などの引用符で括った中身を出力中は、その引用符をエスケー
     プする。
  3. 引用符の外では、「<」「>」「&」を「&lt;」「&gt;」「&amp;」に変換
     する。

という手順をこの順で全部施すのが正しいかもしれません。1を施せば2, 3は
セキュリティ的には冗長な処理ですが、ロジックとしては全部やるのが正しい
ように思います。

        ***

> このセキュリティ上の問題を修正した namazu 2.0.8 リリースの
> 準備に早速取り掛かりたいと思うのですが、よろしいでしょうか?

外野からのコメントですが、他にも同様の問題が残っているかもしれませんの
で、ゆっくり、一度、全体を再確認なさった方がよいかもしれないと思います。


高木 浩光@独立行政法人産業技術総合研究所
http://staff.aist.go.jp/takagi.hiromitsu/