1件の脆弱性に関しまして(2013年8月29日)
 EC-CUBE 脆弱性に関するお知らせ 
いつもEC-CUBEをご利用いただきまして、誠にありがとうございます。

Windowsサーバー環境下で動作しているEC-CUBE(2.12系)に1件の脆弱性があることが判明いたしました。 (本脆弱性における被害報告は現在ございません。)

脆弱性そのものは該当ファイルのソースコード修正、またはファイルの上書きにより、すぐに解決するものです。

皆様にはお手数おかけしまして誠に申し訳ございませんが、対策を早急に講じていただきますよう、どうかよろしくお願い申し上げます。

 修正方法につきまして 
1.修正ファイルをダウンロードしてください。

修正ファイル
  md5:d7cd382da6b18af94289c1693cb06dc7

2.修正する該当ファイル、もしくはEC-CUBEファイル全体のバックアップをとってください。

3.ダウンロードしたファイルを解凍し、該当ファイルを既存ファイルへ上書きしてください。
  ※ディレクトリ付きファイルですので、ルートディレクトリからそのままファイルの上書きが可能です。
  (EC-CUBEデフォルトのディレクトリ構造以外で使用されている場合、ファイルの上書きができない可能性がございますのでご注意ください)
  ※既存ファイルをカスタマイズしている場合、以下個別の修正方法をご参考に修正をお願いします。

4.動作確認をしてください。

以上となります。
開発環境がある場合は、まず開発環境でお試しください。

本不具合に対する対応方法
-----------------------------------------------------------------------------------------------------------------
■不具合が存在する環境
-----------------------------------------------------------------------------------------------------------------

【危険度:高】Windowsサーバー環境における、ディレクトリトラバーサルの脆弱性

▼対象環境
   Windowsサーバーを利用している環境

▼対象バージョン
 - EC-CUBE 2.12.0
 - EC-CUBE 2.12.1
 - EC-CUBE 2.12.2
 - EC-CUBE 2.12.3
 - EC-CUBE 2.12.3en
 - EC-CUBE 2.12.3enP1
 - EC-CUBE 2.12.3enP2
 - EC-CUBE 2.12.4
 - EC-CUBE 2.12.4en
 - EC-CUBE  2.12.5
 - EC-CUBE  2.12.5en
-----------------------------------------------------------------------------------------------------------------
■個別の脆弱性情報に関しまして
-----------------------------------------------------------------------------------------------------------------
以下、個別の脆弱性情報を記載いたします。
該当ファイルをカスタマイズしている場合は以下をご参考いだだき個別で修正をお願いいたします。

/data/class/api/SC_Api_Operation.php::doApiAction

※行数はバージョン・カスタマイズの内容によって異なりますので、ご注意下さい。

=================================================================================================================
▼Windowsサーバー環境における、ディレクトリトラバーサルの脆弱性
-----------------------------------------------------------------------------------------------------------------
【危険度】
高

【修正方法について】
data/class/api/SC_Api_Operation.php::doApiAction
に以下の変更を加えます。

【修正後の確認方法について】
API機能が正常に動作する事をご確認ください。

▽SC_Api_Operation.php
303行目付近
-------------------------------------------------------------------
 変更前
-------------------------------------------------------------------
$objFormParam->convParam();

$arrErr = $objFormParam->checkError();
if (SC_Utils_Ex::isBlank($arrErr)) {
-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
$objFormParam->convParam();

$arrErr = SC_Api_Operation_Ex::checkParam($objFormParam);
if (SC_Utils_Ex::isBlank($arrErr)) {
=================================================================================================================

▽SC_Api_Operation.php
関数追加
-----------------------------------------------------------------------------------------------------------------
 追加
-----------------------------------------------------------------------------------------------------------------
/**
 * APIのリクエスト基本パラメーターのチェック
 *
 * @param object $objFormParam
 * @return array $arrErr
 */
protected function checkParam($objFormParam)
{
    $arrErr = $objFormParam->checkError();
    if (!preg_match("/^[a-zA-Z0-9\-\_]+$/", $objFormParam->getValue('Operation')) && !SC_Utils::isBlank($objFormParam->getValue('Operation'))) {
        $arrErr['ECCUBE.Operation.ParamError'] = 'Operationの値が不正です。';
    }
    if (!preg_match("/^[a-zA-Z0-9\-\_]+$/", $objFormParam->getValue('Service')) && !SC_Utils::isBlank($objFormParam->getValue('Service'))) {
        $arrErr['ECCUBE.Service.ParamError'] = 'Serviceの値が不正です。';
    }
    if (!preg_match("/^[a-zA-Z0-9\-\_]+$/", $objFormParam->getValue('Style')) && !SC_Utils::isBlank($objFormParam->getValue('Style'))) {
        $arrErr['ECCUBE.Style.ParamError'] = 'Styleの値が不正です。';
    }
    if (!preg_match("/^[a-zA-Z0-9\-\_]+$/", $objFormParam->getValue('Validate')) && !SC_Utils::isBlank($objFormParam->getValue('Validate'))) {
        $arrErr['ECCUBE.Validate.ParamError'] = 'Validateの値が不正です。';
    }
    if (!preg_match("/^[a-zA-Z0-9\-\_\.]+$/", $objFormParam->getValue('Version')) && !SC_Utils::isBlank($objFormParam->getValue('Version'))) {
        $arrErr['ECCUBE.Version.ParamError'] = 'Versionの値が不正です。';
    }
    return $arrErr;
}
=================================================================================================================
 FAQ 
Q. 私のサイトは大丈夫か?
A. まずは対象環境・対象バージョンをお確かめください。
Windowsサーバー環境にて脆弱性対象バージョンのEC-CUBEをお使いの場合、対象ファイルを確認下さい。
修正がされていない場合、修正方法に沿って修正の対応をお願い致します。
オフィシャルホスティングパートナーをご利用の場合・インテグレートパートナーが構築した場合、既に対策されている場合がございます。

この度は、お手数をおかけいたしますことを深くお詫び申し上げます。
 謝辞 
本情報は、EC-CUBEオフィシャルサイトへお問い合わせ頂きました開発者さまよりご提供頂きました。この場をお借りして、厚く御礼申し上げます。