JP Vendor Status Notes - JVN#98836916 : 複数のWiki クローン製品におけるサービス運用妨害 (DoS) の脆弱性は、ページ更新前後の差分を取る際に、あまりにデカいデータだと差分情報が大きくて、サーバのCPU/メモリ等のリソースを食ってしまう。これを連続でやられると、ツライ。という脆弱性。

FreeStyleWiki での対策:

* 差分表示で、ページの行数が極端に多い場合は差分検出を行わないようにした。
* 受信するリクエストのサイズをsetup.datで設定できるようにした。

履歴/2006-7-3 - FreeStyleWiki

Hiki での対策:

Ruby の timeout ライブラリを用いて、Hiki がリクエストを処理する時間に制限を加えました。時間の制限は、デフォルトでは 30 秒となっています。この秒数は、設定ファイル hikiconf.rbの @timeout 変数にて変更可能です。

Hiki - Hiki Advisory 2006-07-03

Wikiもどき での対策:

二通りありますが、前者の方法(機能の無効化)は根本的な対処方法ではありませんので、後者の方法(時間制限を設ける)をお勧めいたします。

MoonRock@MoonRock/wikimodoki/security (Wikiもどき セキュリティ情報) - 差分表示処理中においてDoS状態に陥る脆弱性 (2006-07-03)

それぞれに、いろいろな対策。

対象の Wiki クローンは FreeStyleWiki, Hiki, Wiki もどき の3種類らしいけど、ほかの Wiki にだってこの脆弱性はあるだろうなぁ。
というわけで、自分で調べる前に聞いてみる。誰か親切な人が答えてくれるに違いない。

FreeStyleWiki 等で発覚した脆弱性。

JP Vendor Status Notes: http://jvn.jp/jp/JVN%2398836916/index.html

Diff に時間がかかるとのこと。YukiWiki ではだいじょうぶでしょうか?

YukiWikiの差分表示機能にはDoS脆弱性はありませんか? - FreeStyleWiki 等で発覚した脆弱性。

って YukiWiki のサイトで尋ねてみたら、

* あります。
* この脆弱性(?)は非常に単純で、違いがいっぱいあると差分計算に時間とメモリが必要、というものです。
* 例えば、あるページに3万行ありその全ての行を書き換え更新すると、差分の計算に15分程かかり、メモリは80MB程消費します。
* これを複数のページ(10~20ページ程)に対して同時実行すれば、サーバは最悪ダウンします。

* 対策としては、Webサーバ側でリソース制限を行うか、YukiWiki側で常識外れに巨大な差分が生じる時は、差分の更新をしない処理をするしかないと思います。
o ちなみにFreeStyleWikiでは1000行以上の場合には差分表示を出来ないようにして回避しています。
* YukiWikiならsub do_writeにある差分書込の処理を↓な風に変えればO.K.ですかね。
o $diffbase{$form{mypage}} = &difftext(\@msg1, \@msg2) if (@msg2 < 1000);
* ページ内の行数の方を制限したらだめですか?
o むしろそれが本筋ですね。ただ、私はなるべく制限をしたくないので、difftextを止める方を選んだんです。
* YukiWiki 2.1.3が公開されていますね。

YukiWikiの差分表示機能にはDoS脆弱性はありませんか? - FreeStyleWiki 等で発覚した脆弱性。

参考になるなぁ。

で、1年9ヶ月ぶりに YukiWiki2 がバージョンアップ。

その YukiWiki 2.1.3 での対策:

# 書き込み長さの最大制限
* wiki.cgi: length_reject追加。
* wiki.cgi: $max_message_length追加。
* resource.txt: toolongpost追加。

YukiWiki2作業記録 - YukiWiki作業記録 - 2006-07-06

追記: 2006-07-08

YukiWiki 2.1.3 は、2006-07-07 リリ-ス扱い。

Ref. [結] 2006年7月 - 結城浩の日記 - YukiWiki 2.1.3を公開 / JPCERT/CCの製品開発者リストへの登録


コメント

YukiWiki 2.1.3 では、ページデータ更新時に行数ではなく、文字数(length 関数でチェックしているから環境によってはバイト数?)で制限をかけるようになっている。

tags: zlashdot Zura Wiki YukiWiki

Posted by NI-Lab. (@nilab)