2011年7月28日

[Namazu-devel-ja 1881] Re:stable-2-0 に 2.0.21 を反映

臼田です

On 2011/07/27, at 23:30, Tasamasa Teranishi wrote:
>
> (2011/07/27 21:56), Yukio USUDA wrote:
>>> なぜUnicode の正規化の話を持ち出しているのかということを
>>> ご理解ください。
>>

>> セキュリティ対策の話と検索精度の話はとりあえずわけて
>> ひとつづつ片付けていきたいと思っています。
>
> Unicode の正規化は、検索精度の話だけではありません。
> 持ち出しているのは、セキュリティ対策の話とからむからです。

UTF-8を正規化しないことによるセキュリティ面の問題について
Webで調べてみましたがそれらしい情報を見つけられませんでした。
たぶんここが一番整理されていると思います
http://www.nic.ad.jp/ja/materials/iw/2010/proceedings/s6/iw2010-s6-02.pdf

正規化により U+00A5 の円記号「\」が危険な文字になるという話題
が気をつける点として見つかりましましたが
特定の正規化形式での表現が問題になるとか
複数の正規化形式が混在することで問題になる
といったものは見つかりませんでした。

Unicodeの正規化が不完全なことに起因する一般に公開されていない
脆弱性の情報をなにかお持ちでしょうか?


>
>> 今回のパッチでは
>> RFC3629 UTF-8, ISO 10646 を変換したフォーマット
>> http://www.akanko.net/marimo/data/rfc/rfc3629-jp.txt
>> (日本語訳もありました)に書かれている範囲を愚直に
>> チェックして範囲外の文字を削除してしまっているので
>> UTF-8の非最短形式で表現されている文字も不正なものとして
>> 除去されるはずです。
>
> チェックして範囲外の文字をスペース変換することは良いと
> 思います。(それはする必要がある)
> ただ、それだけでは不十分だと思われるので...。
>
> 話はそれますが、そのチェックの方ですが
> ざっとコードを見ただけなんで、勘違いかもしれませんけど、
> 5バイト、6バイト文字がきちんとスペース変換できていない
> のではないかと思います。
> 大丈夫ですかね? 5バイト、6バイト文字の次の文字が文字化け
> したりしそうでしたが...。

UTF-8 は4バイトまででそれ以上のものは不正文字コード扱いで
よいでしょう。
RFC3629 の UTF-8 の定義に 1オクテットから4オクテットの連鎖で
符号化されると書かれており、
Wikipedia でも 5,6バイト表現がなくなったことが参照できます。
http://ja.wikipedia.org/wiki/UTF-8

今回のチェックに仮に古い定義にある 6バイトの UTF-8 に該当する
バイト列を与えたとすると4バイトまでに定義されている UTF-8 の
1バイト目として判定されるものが一つもないので6つのスペースに
変換されるはずです。

UTF-8 では先頭バイトを表現するバイトデータと同じものは2バイト目
以降に現れることがないので削りすぎることはないはずです。

>
> 仕組みをきちんと作り直すのを先にしてください。
> いろいろ増えてからやり直すと手間が増えます。それを懸念して
> います。

文字コードに起因するWebアプリケーションの脆弱性についていろいろ
と読んだ結果 HEAD の namazu.cgi の仕様は安全側にしておくべき
だろうと思いました。

・namazu.cgi では文字コードの自動判別を避ける。
・上記の為に namazu.cgi では入力も出力も UTF-8 だけにする。

これぐらいに絞ってしまうのがよいですかね。

臼田幸生

_______________________________________________
Namazu-devel-ja mailing list
Namazu-devel-ja@xxxxx
http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-devel-ja


投稿者 xml-rpc : 2011年7月28日 22:15
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/105227
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。