脆弱性

クロスサイトリクエストフォージェリの脆弱性

  • 情報公開日:2015年 11月 13日
  • 危険度:中
  • 対象:Ver 2.11.0〜2.13.4
【更新:2015年11月13日】 
 修正内容を追記。修正のプルリクエストを追記。
 対象バージョンに2.13.4を追加

------------------------------------------------------------------
■脆弱性の種類
-------------------------------------------------------------------
クロスサイトリクエストフォージェリの脆弱性

-------------------------------------------------------------------
■不具合が存在するEC-CUBEのバージョン
-------------------------------------------------------------------
EC-CUBE 2.11.0〜2.13.4

-------------------------------------------------------------------
■修正方法について
-------------------------------------------------------------------
※詳細、修正ファイルのダウンロードはこちらをご確認ください
https://www.ec-cube.net/info/weakness/201510_02/

※下記のプルリクエストで修正
https://github.com/EC-CUBE/eccube-2_13/pull/66/commits
https://github.com/EC-CUBE/eccube-2_13/pull/70

以下は、2.13.3 の修正となっております。

/data/Smarty/templates/admin/basis/zip_install.tpl
/data/Smarty/templates/admin/mail/history.tpl
/data/Smarty/templates/admin/mail/template.tpl
/data/Smarty/templates/admin/ownersstore/log.tpl
/data/Smarty/templates/admin/order/subnavi.tpl
/data/Smarty/templates/admin/total/index.tpl
/data/Smarty/templates/admin/system/system.tpl
/data/class/pages/LC_Page.php::doValidToken
/data/class/helper/SC_Helper_Session.php::isValidToken
に以下の変更を加えます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
=================================================================================================================
▽data/Smarty/templates/admin/basis/zip_install.tpl
81行目付近を変更下さい。
-----------------------------------------------------------------------------------------------------------------
 変更前
-----------------------------------------------------------------------------------------------------------------
<iframe src="?mode=<!--{$tpl_mode|h}-->&exec=yes&startRowNum=<!--{$arrForm.startRowNum|h}-->" name="progress" height="200" width="750" frameborder="0"></iframe>
-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
<iframe src="?mode=<!--{$tpl_mode|h}-->&exec=yes&startRowNum=<!--{$arrForm.startRowNum|h}-->&<!--{$smarty.const.TRANSACTION_ID_NAME}-->=<!--{$transactionid}-->" name="progress" height="200" width="750" frameborder="0"></iframe>
=================================================================================================================

▽data/Smarty/templates/admin/mail/history.tpl
51行目付近を変更下さい。
-----------------------------------------------------------------------------------------------------------------
 変更前
-----------------------------------------------------------------------------------------------------------------
<td><a href="#script tag escaped#;" onclick="eccube.openWindow('./preview.php?mode=history&send_id=<!--{$arrDataList[cnt].send_id|h}-->', 'confirm', '720', '600', {menubar:'no'}); return false;">確認</a></td>
<td><a href="#script tag escaped#;" onclick="eccube.openWindow('./<!--{$smarty.const.DIR_INDEX_PATH}-->?mode=query&send_id=<!--{$arrDataList[cnt].send_id|h}-->','query','615','800',{menubar:'no'}); return false;">確認</a></td>
-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
<td><a href="#script tag escaped#;" onclick="eccube.openWindow('./preview.php?mode=history&send_id=<!--{$arrDataList[cnt].send_id|h}-->&<!--{$smarty.const.TRANSACTION_ID_NAME}-->=<!--{$transactionid}-->', 'confirm', '720', '600', {menubar:'no'}); return false;">確認</a></td>
<td><a href="#script tag escaped#;" onclick="eccube.openWindow('./<!--{$smarty.const.DIR_INDEX_PATH}-->?mode=query&send_id=<!--{$arrDataList[cnt].send_id|h}-->&<!--{$smarty.const.TRANSACTION_ID_NAME}-->=<!--{$transactionid}-->','query','615','800',{menubar:'no'}); return false;">確認</a></td>
-------------------------------------------------------------------

63行目付近を変更下さい。
-----------------------------------------------------------------------------------------------------------------
 変更前
-----------------------------------------------------------------------------------------------------------------
<a href="index.php?mode=retry&send_id=<!--{$arrDataList[cnt].send_id|h}-->" onclick="return window.confirm('未配信と配信失敗となった宛先に再送信を試みますか?');">実行</a>
-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
<a href="index.php?mode=retry&send_id=<!--{$arrDataList[cnt].send_id|h}-->&<!--{$smarty.const.TRANSACTION_ID_NAME}-->=<!--{$transactionid}-->" onclick="return window.confirm('未配信と配信失敗となった宛先に再送信を試みますか?');">実行</a>
-------------------------------------------------------------------

66行目付近を変更下さい。
-----------------------------------------------------------------------------------------------------------------
 変更前
-----------------------------------------------------------------------------------------------------------------
<td><a href="?mode=delete&send_id=<!--{$arrDataList[cnt].send_id|h}-->" onclick="return window.confirm('配信履歴を削除しても宜しいでしょうか');">削除</a></td>
-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
<td><a href="?mode=delete&send_id=<!--{$arrDataList[cnt].send_id|h}-->&<!--{$smarty.const.TRANSACTION_ID_NAME}-->=<!--{$transactionid}-->" onclick="return window.confirm('配信履歴を削除しても宜しいでしょうか');">削除</a></td>
=================================================================================================================

=================================================================================================================
▽admin/mail/template.tpl
53行目付近を変更下さい。
-----------------------------------------------------------------------------------------------------------------
 変更前
-----------------------------------------------------------------------------------------------------------------
<td><a href="./template_input.php?mode=edit&template_id=<!--{$arrTemplates[data].template_id}-->">編集</a></td>
<td><a href="#" onclick="eccube.moveDeleteUrl('?mode=delete&id=<!--{$arrTemplates[data].template_id}-->'); return false;">削除</a></td>
<td><a href="#" onclick="eccube.openWindow('./preview.php?mode=template&template_id=<!--{$arrTemplates[data].template_id}-->','preview','650','700',{menubar:'no'}); return false;" target="_blank">プレビュー</a></td>
-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
<td><a href="./template_input.php?mode=edit&template_id=<!--{$arrTemplates[data].template_id}-->&<!--{$smarty.const.TRANSACTION_ID_NAME}-->=<!--{$transactionid}-->">編集</a></td>
<td><a href="#" onclick="eccube.moveDeleteUrl('?mode=delete&id=<!--{$arrTemplates[data].template_id}-->&<!--{$smarty.const.TRANSACTION_ID_NAME}-->=<!--{$transactionid}-->'); return false;">削除</a></td>
<td><a href="#" onclick="eccube.openWindow('./preview.php?mode=template&template_id=<!--{$arrTemplates[data].template_id}-->&<!--{$smarty.const.TRANSACTION_ID_NAME}-->=<!--{$transactionid}-->','preview','650','700',{menubar:'no'}); return false;" target="_blank">プレビュー</a></td>
=================================================================================================================

=================================================================================================================
▽admin/ownersstore/log.tpl
45行目付近を変更下さい。
-----------------------------------------------------------------------------------------------------------------
 変更前
-----------------------------------------------------------------------------------------------------------------
<a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->ownersstore/log.php?mode=detail&log_id=<!--{$log.log_id}-->">
-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
<a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->ownersstore/log.php?mode=detail&log_id=<!--{$log.log_id}-->&<!--{$smarty.const.TRANSACTION_ID_NAME}-->=<!--{$transactionid}-->">
=================================================================================================================

=================================================================================================================
▽admin/order/subnavi.tpl
27行目付近を変更下さい。
-----------------------------------------------------------------------------------------------------------------
 変更前
-----------------------------------------------------------------------------------------------------------------
<li id="navi-order-add" class="<!--{if $tpl_mainno == 'order' && $tpl_subno == 'add'}-->on<!--{/if}-->"><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->order/edit.php?mode=add"><span>受注登録</span></a></li>
-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
<li id="navi-order-add" class="<!--{if $tpl_mainno == 'order' && $tpl_subno == 'add'}-->on<!--{/if}-->"><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->order/edit.php?mode=add&<!--{$smarty.const.TRANSACTION_ID_NAME}-->=<!--{$transactionid}-->"><span>受注登録</span></a></li>
=================================================================================================================

=================================================================================================================
▽admin/total/index.tpl
118行目付近を変更下さい。
-----------------------------------------------------------------------------------------------------------------
 変更前
-----------------------------------------------------------------------------------------------------------------
<img src="?draw_image=true&type=<!--{$smarty.post.type|h}-->&mode=search&search_form=<!--{$smarty.post.search_form|h}-->&page=<!--{$smarty.post.page|h}-->&search_startyear_m=<!--{$smarty.post.search_startyear_m|h}-->&search_startmonth_m=<!--{$smarty.post.search_startmonth_m|h}-->&search_startyear=<!--{$smarty.post.search_startyear|h}-->&search_startmonth=<!--{$smarty.post.search_startmonth|h}-->&search_startday=<!--{$smarty.post.search_startday|h}-->&search_endyear=<!--{$smarty.post.search_endyear|h}-->&search_endmonth=<!--{$smarty.post.search_endmonth|h}-->&search_endday=<!--{$smarty.post.search_endday|h}-->" alt="グラフ" />
-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
<img src="?draw_image=true&type=<!--{$smarty.post.type|h}-->&mode=search&search_form=<!--{$smarty.post.search_form|h}-->&page=<!--{$smarty.post.page|h}-->&search_startyear_m=<!--{$smarty.post.search_startyear_m|h}-->&search_startmonth_m=<!--{$smarty.post.search_startmonth_m|h}-->&search_startyear=<!--{$smarty.post.search_startyear|h}-->&search_startmonth=<!--{$smarty.post.search_startmonth|h}-->&search_startday=<!--{$smarty.post.search_startday|h}-->&search_endyear=<!--{$smarty.post.search_endyear|h}-->&search_endmonth=<!--{$smarty.post.search_endmonth|h}-->&search_endday=<!--{$smarty.post.search_endday|h}-->&<!--{$smarty.const.TRANSACTION_ID_NAME}-->=<!--{$transactionid}-->" alt="グラフ" />
=================================================================================================================

=================================================================================================================
▽admin/system/system.tpl
40行目付近を変更下さい。
-----------------------------------------------------------------------------------------------------------------
 変更前
-----------------------------------------------------------------------------------------------------------------
<iframe src="?mode=info" height="500" frameborder="0" style="width: 100%;"></iframe>
-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
<iframe src="?mode=info&<!--{$smarty.const.TRANSACTION_ID_NAME}-->=<!--{$transactionid}-->" height="500" frameborder="0" style="width: 100%;"></iframe>
=================================================================================================================

=================================================================================================================
▽LC_Page.php::doValidToken
439行目付近を変更下さい。
※2.11系では SC_Response_Ex::actionExit(); は不要です。
-----------------------------------------------------------------------------------------------------------------
 変更前
-----------------------------------------------------------------------------------------------------------------
public function doValidToken($is_admin = false)
{
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        if (!SC_Helper_Session_Ex::isValidToken(false)) {
            if ($is_admin) {
                SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR);
            } else {
                SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, '', true);
            }
            SC_Response_Ex::actionExit();
        }
    }
}

-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
public function doValidToken($is_admin = false)
{
    if ($is_admin) {
        $mode = $this->getMode();
        if ($_SERVER['REQUEST_METHOD'] == 'POST' || !SC_Utils::isBlank($mode)) {
            if (!SC_Helper_Session_Ex::isValidToken(false)) {
                SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR);
                SC_Response_Ex::actionExit();
            }
        }
    } else {
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            if (!SC_Helper_Session_Ex::isValidToken(false)) {
                SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, '', true);
                SC_Response_Ex::actionExit();
            }
        }
    }
}
=================================================================================================================

=================================================================================================================
▽SC_Helper_Session.php::isValidToken
203行目付近を変更下さい。
-----------------------------------------------------------------------------------------------------------------
 変更前
-----------------------------------------------------------------------------------------------------------------
public function isValidToken($is_unset = false)
{
    // token の妥当性チェック
    $ret = $_REQUEST[TRANSACTION_ID_NAME] === $_SESSION[TRANSACTION_ID_NAME];

    if ($is_unset || $ret === false) {
        SC_Helper_Session_Ex::destroyToken();
    }

    return $ret;
}

-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
public function isValidToken($is_unset = false)
{
    // token の妥当性チェック
    $ret = $_REQUEST[TRANSACTION_ID_NAME] === $_SESSION[TRANSACTION_ID_NAME];

    if (empty($_REQUEST[TRANSACTION_ID_NAME]) || empty($_SESSION[TRANSACTION_ID_NAME])) {
        $ret = false;
    }

    if ($is_unset || $ret === false) {
        SC_Helper_Session_Ex::destroyToken();
    }

    return $ret;
}
=================================================================================================================

-------------------------------------------------------------------
■修正後の確認方法について
-------------------------------------------------------------------

以下を御確認ください。
・郵便番号DB登録が行えること。
・メルマガ管理>配信履歴、テンプレート設定の各機能が利用できること。
・オーナーズストア>ログ管理の詳細が確認できること
・売上集計のグラフが表示されること
・受注登録ページ、システム情報ページに遷移できること
・カスタマイズにより追加した管理画面の画面に遷移できること

====================================================================

EC-CUBE公式アドバイザー
ご相談窓口

  • 他社のASPやパッケージとの違いを知りたい
  • BtoCのサイトにBtoB機能を追加したい
  • 何から手をつければよいかわからない
  • オープンソースならではの注意事項を知りたい
  • 自社にマッチした制作会社を探したい
  • サイト制作だけでなく運営もサポートしてほしい

新規構築・リニューアル・取引先向けのWeb受発注システム(BtoB)や事業の拡大など、
今抱えている課題を解決する最適な業者探しを、アドバイザーがお手伝いします。