その1激ニコぷんぷん丸のソースコード公開カテゴリーActionScript(Flex)DBLinuxObjective-CPerlPHPRubyお知らせその他ネットワーク電子工作アーカイブ2024年6月2015年12月2015年6月2013年10月2013年9月2013年7月2013年5月2013年2月2012年12月2012年9月2012年8月2012年7月2011年2月2010年9月2010年7月2010年6月2010年4月2010年3月2009年11月2009年10月2009年9月2009年8月2009年7月MT4iのDoS攻撃されるセキュリティホールMT4iのベータ版である3.1系をのぞく全てのバージョンで、DoS攻撃されうるセキュリティーホールがあるようです。細工されたリクエストを送信するか、もしくは特定の状況下で無限ループしてしまう事が原因で、HTTPプロセスが常駐し続けてしまいます。関数の欠陥が原因のようです。分割位置をGETパラメータとして渡すため、「記事本文の文字数より大きい値が渡された時」に分割が終了せずに無限ループに陥ります。記事本文を分割するバイト数として、初期値では「4096」バイトが設定されています。分割位置がカンマ区切りで渡されます。http://www.example.com/m/mt4i.cgi?mode=individual&eid=1&sprtpage=1&sprtbyte=0,4096どういう状況でおこりうるかMT4iはMovableTypeを携帯で見やすいように変換・表示するためのプログラムです。携帯向けに表示するため、記事本文の表示を分割する必要があります。記事本文が分割バイト数ずつ分割表示されるわけですが、それぞれの分割された記事の位置をGETパラメータで制御しているため、後から記事本文を更新した場合に分割位置が一致せずに、無限ループする可能性があります。クローラーなどが更新前のURLでアクセスしてきて...なんて事もあるかもしれません。パラメータに記事本文より大きい値を渡すことで再現できます。関数のコードを抜き出したものです。2系、3.0系ともに同様の関数が使われているようです。関数で、開始位置と終了位置が記事本文より大きい場合、常に空文字を返すので無限ループしてしまいます。$lstr;}対応方法3.1系では問題となっている関数が置き換わっているため、3.1系を利用することで回避できるようですが、まだベータ版なのでそのあたりも考慮する必要がありそうです。対するパッチを作ってみました。文で記事本文より大きい場合と、空文字の場合にループを抜ける処理を追加しただけです。文でループする意味がよく分からなかったので、一度で抜けるように変更しました。$llen3;実はそんなにたいした事じゃないのかも共有サーバのほとんどは、長時間実行されているプロセスは強制終了されるものかと思われますので、それほど影響はないのかもしれません。デタラメ書いてるんじゃねーってことがあれば連絡ください。コメントをキャンセルメールアドレスが公開されることはありません。