tDiary.org - 日記コミュニケーションを加速する


tDiary 2.0.2、2.1.2リリース

Last Update: 2005-08-10 12:00:59

tDiary 2.0.2(安定版)、2.1.2(開発版)をリリースしました。

このリリースの目的は、主に脆弱性対策です。脆弱性の内容については脆弱性に関する報告(2005-07-20)をご覧下さい。対象となるバージョンをお使いの方は、最新版へのバージョンアップを強く推奨します。

ダウンロード

CSRF攻撃対策に伴なって必要な利用者の対応

(以下の解説は、今回の脆弱性の報告者である産業技術総合研究所 情報セキュリティ研究センターの大岩寛氏によるドキュメントをベースにしています)

tDiary 2.0.2、tDiary 2.1.2以降では、クロスサイト・リクエスト・フォージェリ(CSRF)攻撃に対する対策が導入されています。対策内容は以下の3点です:

  • 日記の更新・設定の変更がPOSTメソッドで行われていること
  • Refererの値が正当なものであること
  • フォームに埋め込まれた(攻撃者が知りえない)CSRF防止キーが正しいこと

利用者の対応が必要になる可能性があるのは、後の2点に関してです。通常の利用では標準的な設定のままでもユーザが特に意識する必要はないように設計されていますが、ユーザ側・Webサーバ側で特殊な設定をしている場合、日記の更新、設定の変更などができなくなる場合があります。

具体的には、以下の場合に問題が生じます。

  1. ブラウザからRefererを送出しない設定を行っている場合
  2. Webサーバにreverse proxyなどが導入された結果、ユーザに見えるupdate.rbのURLと、サーバの認識するURLが一致しない場合
  3. 今回の対策に対応しない、ブラウザ以外のクライアントを使っている場合

まずは一回、いつもの環境で日記を書いてみてください。問題なく更新できれば、以下を読む必要はありません。もし更新に不具合があり、上記の場合に当てはまるときには、以下にそれぞれの場合の対策を説明しますので、対応してください。なお、対策の実施にあたっては、設定画面に新たに加わった「CSRF(乗っ取り)対策」ページを使います。

ブラウザからRefererを送出しない設定を行っている場合

ブラウザの設定を変更してRefererヘッダを送出しないようにしている場合、あるいは一部のパーソナル・ファイヤウォールソフトが「プライバシー対策」と称してRefererヘッダを削除している場合、CSRF対策の設定変更を含む、全設定の変更・日記の更新ができなくなります。

この場合、設定変更をしようとすると、以下のようなエラーが出ます。

Security Error: Possible Cross-site Request Forgery (CSRF)

   Diagnostics:
      - Protection Method is 1
      - Mode is saveconf
           - GET is not allowed
      - Request Method is POST
      - Referer is empty     ←←←←←[ここ注目]
           - Given referer:
           - Expected base URI:   http://www.example.jp/~user/tdiary/
           - Expected update URI: http://www.example.jp/~user/tdiary/update.rb
      - CSRF key is nothing

この場合は、次のいずれかの対策を取ってください。

  1. 一時的にRefererを送出する設定にした上で、"CSRF(乗っ取り)対策" 設定項目で以下に設定を変更する。
    • Refererを送らないブラウザを拒否「しない」
    • CSRF防止キーの検査「する」
    • CSRF防止キーは、他人の知らない適当な文字列
  2. tdiary.conf.sampleを参考にして、tdiary.confで以下の設定をする。
    • @options['csrf_protection_method'] を 2 に、
    • @options['csrf_protection_key'] は 他人の知らない適当な文字列

いずれの場合も、「他人の知らない適当な文字列」を何らかの方法で推測・入手されると、CSRF攻撃対策がすべて無意味になってしまいますので、十分気をつけて管理してください。パスワードではないので、覚えられる文字列にしておく必要はありません。

Reverse Proxy、URL Rewritingの問題

プロバイダによっては、Reverse Proxyといって、実際のWebサーバとインターネットの間にキャッシュサーバを導入している場合があります。この場合、実際のWebサーバが認識する「日記のURL」と、ユーザに提示される「日記のURL」が一致しません。また、自分でmod_rewrite等を導入して、URLを書き換えている場合も同様な状態になります。

このような設定になっている場合に、日記の更新や設定の変更をしようとすると、以下のようなメッセージが出ます。

Security Error: Possible Cross-site Request Forgery (CSRF)

   Diagnostics:
       - Protection Method is 1
       - Mode is saveconf
           - GET is not allowed
       - Request Method is POST
       - Referer is another page ←←←←←[ここ注目]
           - Given referer:       http://www.example.jp/~user/tdiary/update.rb
           - Expected base URI:   http://www01.example.jp/~user/tdiary/
           - Expected update URI: http://www01.example.jp/~user/tdiary/update.rb
       - CSRF key is nothing

このようなメッセージが出た場合、Given refererに表示されたURLをまずチェックしてださい。このURLが本当に自分の日記のURLだった場合に限り、次のような設定をtdiary.confに書き加えてください。

def base_url
   'http://www.example.jp/~user/tdiary/'
end

この値には、tDiaryの設置されたディレクトリまでのURLを(最後の / 付きで)指定します。update.rbのURLをtdiary.conf中で絶対URLで指定している場合は、特にこの変更は必要ありません。

今回の対策に対応しない、ブラウザ以外のクライアントを使っている場合

今回の対策で、tdiary-mode、posttdiary.rbなど、周辺ツールも更新されています。これらのツールを使っている場合は、今回の対策に対応したバージョンに更新が必要です。

CSRF攻撃対策に伴なって必要な開発者の対応

プラグインの開発において、いくつかの留意点が増えています。パッケージに付属の、doc/HOWTO-make-plugin.htmlを参照してください。

Tags: release
コメント(10) [コメントを投稿する]
tito (2005-07-21 12:12)

cvsにタグを忘れてます?

ただただし (2005-07-21 12:42)

あぁ……また忘れた _| ̄|○

yananob (2005-07-21 13:45)

tdiary-2.0.2.tar.gz中のdoc/HOWTO-make-plugin.htmlが文字化けしてるようですが、うちだけでしょうか?

ただただし (2005-07-21 14:05)

おっしゃるとおりです。誤った文字コードになってしまっていました。ごめんなさい。<br>ブラウザの文字コードを、「ISO-2022-JP」か「自動認識」等にすれば読めると思います

yananob (2005-07-21 14:54)

ISO-2022-JPだけ試してませんでした。無事読めました、ありがとうございました。最新バージョン、早速使わせていただきます。

(2005-07-22 02:32)

rpmやdebパッケージの扱いはどうなってます?<br>パッケージの管理者に連絡は行ってるのかな?<br>誰に頼めばいいのかしら

ただただし (2005-07-23 13:56)

debは作業中だと思います。こちらとしてはディストリビュータすべてを把握しているわけではないので、こちらから連絡するのは無理です。ニュースになっているので、それを見て気づいてもらうしか……

yoosee (2005-07-26 07:04)

deb は既に 2.0.2-1 に上がっていますね。deb, rpm などはパッケージ情報の中にメンテナのメールアドレス等がありますし、deb ならば気づいた利用者が BTS に上げるなどしてメンテナにアップデートを喚起できると思います。メンテナ自身も当然このあたりのニュースはチェックしているので大丈夫な事が多いでしょうけど。

ogawa (2005-08-10 11:58)

使用しているサーバの推奨でtDiaryを利用しています。今回、更新できなくなりインストールし直しました。最初の1回目はできるのですが、2回目からまた同じエラーメッセージがでて更新ができなくなってしまいます。サーバもサポート外と言われて聞く事ができません。原因がわかる方はいないでしょうか?<br>技術者ではないので、全く技術的な事を理解していません。

ただただし (2005-08-10 12:00)

ogawaさん、ここはサポートの場ではありません。tDiary-usersのMLか掲示板でお尋ねください。なお、エラーの内容くらいは書かないと、誰にもわからないと思いますよ。


«tDiaryの脆弱性に関する報告(2005-07-20) 最新 最近多発しているツッコミspamへの対策» 編集
Fork me on GitHub