Hatena::ブログ(Diary)

EC-CUBEのカスタマイズならクロスキューブ!サイト制作メモ このページをアンテナに追加 RSSフィード Twitter

2011-05-11

EC-CUBE2.4.4以前のバージョンに存在するクロスサイトリクエストフォージェリの脆弱性への対応

2011年5月10日JVNからEC-CUBEの2.4.4以前のバージョン存在するCSRF脆弱性に関する情報が公開されました
JVN#37878530 EC-CUBE におけるクロスサイトリクエストフォージェリの脆弱性

f:id:xross-cube:20110511021528p:image*1

CSRF*2とは、簡単に言うと、どんなサイトHTMLメールからでも、ユーザ意図しない情報ターゲットサイトに送信させて、望まない操作をさせる事が出来るという物です。*3

特にサイト管理者の方はEC-CUBE管理画面にログインしたままの状態で、よく解らないリンクボタンクリックしない様にしましょう。*4

2.11.0以降のバージョンには存在しませんので、2.11.0以降を利用されている方は大丈夫です。*5

2.4系から2.11系へのデータ移行ツールもリリースされていますが、2.11系は2.4系とは大きく変わり、簡単にはバージョンアップ出来ないのも事実です。

特に多数のカスタマイズを加えていると、より作業量は増えてしまいます。
とりあえず2.4系をそのまま使って、この脆弱性対応する為のやり方を今回はご紹介します。

全てのフォームにトークンを加える。

EC-CUBEには、元々CSRF対応する為の機能が備わっています。

ただ、2.4系よりも前のバージョンでは一部の画面でしか利用されていない為、脆弱性存在してしまっています。

これに対応する為には全てのフォームにトークンを追加します。

例:

<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />

次に、トークンを追加したページに該当するLC_Page系のクラスのinit()*6に下記を追加します。

$this->transactionid = $this->getToken();

追加したトークンを受け取る画面に該当するLC_Page系のクラスのinit()に下記を追加します。

if (!$this->isValidToken()) {
    SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, "", true);
}
結構大変です。

作業自体は簡単ですが、とにかく追加しないといけない箇所が多いので結構大変だと思います。
サイトの状態によっては2.11.1にバージョンアップした方が早いかもしれません。

サイトのカスタマイズ状況を見極めて、どちらの方が良いか早めに検討される事をオススメします。

*1クリックしなくても開いただけで攻撃も可能です

*2クロスサイトリクエストフォージェリ

*3:具体的にどんな事が出来るかは、ここで書く事は控えさせて頂きます。

*4管理画面にログインしている時は、ブラウザで他のウィンドウやタブを開かない様にして、コマメにログアウトすれば平気です。

*5:2.11の開発中にこの辺の話や作業をしました。

*6モバイルの方にも足します。

やまだやまだ 2011/05/11 12:53 非常に早い情報の公開にて非常に参考になります。ありがとうございます。こちらの対応ファイルの具体的な箇所を教えていただくことはできませんでしょうか。

xross-cubexross-cube 2011/05/11 13:10 いっぱいありすぎて書ききれませんw
下記が参考になると思います。
http://svn.ec-cube.net/open_trac/changeset/20328

やまだやまだ 2011/05/11 16:08 早速の回答ありがとうございます。個別の対応はかなり難しそうですね。ありがとうございます。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証