2022/06/11 Podcastはしばらくお休みします。
『【重要】EC-CUBE 4.0系における緊急度「高」の脆弱性発覚と対応のお願い』に対処した話(XSERVER)
こんにちは。安慶名勇子(アゲナユウコ)です。
毎日行うルーティンの中にはメールチェックも含まれるのですが、明らかに不要とわかるメール以外はすべて内容をチェックしています。EC-CUBE運営チームから届くメールの多くはセミナーの案内やプロモーションなので、タイトルを見てアーカイブするのがこれまでの流れだったのですが…、今回ばかりは何やら雰囲気が違う。【重要】、【緊急度「高」】、【脆弱性】と、中身を見るまでもなく「何かヤバいことが起きたのだな…」とわかるメールでした。↓

EC-CUBEとは、簡単に言うとネットショップを自分で構築できるアプリケーションのこと。私のサイトには電子ペーパー用テンプレートを販売するネットショップを設けていますが、このEC-CUBEを使って構築しています。自分で構築するので、出店料だの販売手数料だのかからず、手軽にネットショップが作れる便利ツールなのです。
しかし、自分で構築するということは、メンテナンスも自分で行わなければならないわけです。今回のような脆弱性への対応なんて、サイト運営の知識がない方にとってはなかなかハードルが高いのでは…と思い、参考までにと対処方法を記事にしました。
クロスサイトスクリプティングとは何か
クロスサイトスクリプティングとは、Wikipediaによるとこう書かれています。
クロスサイトスクリプティング(英: cross site scripting)とは、Webアプリケーションの脆弱性[1]もしくはそれを利用した攻撃。脆弱性をツリー型に分類するCWEではこの攻撃を不適切な入力確認(CWE-20)によるインジェクション(CWE-74)のひとつとして分類している(CWE-79)[2]。略称はXSS。かつてはCSSという略称も使われていたが、Cascading Style Sheetsと紛らわしいのでこの略称はあまり使われなくなった[1]。 「クロスサイト(サイト横断)」という名称は歴史的なもので、初期に発見されたXSSでは脆弱性のあるサイトと攻撃者のサイトを「サイト横断的」に利用して攻撃を実行する事から名づけられたものだが[3][4]、XSSの定義は新しいタイプの攻撃が見つかるたびに拡張され、サイト横断的なものでなくともXSSと呼ぶようになった[3]。 この拡張された定義においてXSS攻撃とは、攻撃者の作成したスクリプトを脆弱性のある標的サイトのドメインの権限において閲覧者のブラウザで実行させる攻撃一般を指す[3]。斜体で書いた部分がXSS攻撃の重要な特徴であり、この特徴により標的サイトの権限がないと実行できないようブラウザが制限している(同一生成元ポリシー)はずの行動を、攻撃者に実行可能にしてしまう[5]。
Wikipedia「クロスサイトスクリプティング」から引用
「これを読んでも何のことやらさっぱり!」と思うほど専門用語たっぷりなので、できる限り簡単に説明しますと…悪意を持った人が作成したあるプログラム(スクリプト)をコメント等に埋め込み、それをクリックさせることで、偽サイトに誘導し、そこから個人情報やクレジットカード情報等を盗むといった類の手法のことを指します。フィッシング詐欺も似たような手口です。
EC-CUBE運営チームからの情報によると、

「不正な受注情報が作成された状態で、特定の管理画面操作をするとクロスサイトスクリプティングが発生する可能性があります。」とのことなので、何らかの受注が発生(もちろん釣り目的の偽発注)し、その情報を確認しようとショップ運営者が管理画面を操作した際に発動するプログラムが仕掛けられているのかもしれませんね(怖っ)。
EC-CUBE運営チームから推奨された修正方法は2種類
脆弱性が発生しているファイルを修正しなければならないわけですが、方法としては2つ。
- ファイルごと置き換える
- ファイルの一部を書き換える
ファイルの格納場所にアクセスし、そのファイルを置き換えるなり、書き換えるなりすれば、処置は完了します。どちらでも構わないのですが、EC-CUBEのプログラムをカスタマイズしている私は2の方法で実施しました。1でも2でも、途中までの方法は変わらないので下記に手順を示します。ちなみに、私はXSERVER(エックスサーバー)を利用しているのですが、ファイルマネージャーが便利すぎて、最近はFTPツールを使用していません。今回の手順もXSERVERファイルマネージャーでの操作手順ですのであしからず。
【共通】XSERVERのファイル格納場所にアクセス
XSERVERのファイルマネージャーからログイン。

ECサイトを設置しているドメイン配下の、EC-CUBEが指定する場所までひたすら辿ります。このファイルを探します。
/src/Eccube/Resource/template/admin/Order/mail_confirm.twig
EC-CUBE運営チームからの情報
こんな感じでたどり着いたら準備OK。↓

あとは、ファイルを上書きするか、ファイルの中身を書き換えるかで方法が異なるので、ご自身に合ったやり方を選んで実施してください。
【方法1】ファイルを上書きする場合
基本的には、EC-CUBE運営チームのサイトに詳しく書いてある手順で行えばOKなのだけれど、ステップとして少々面倒。
- 試用しているEC-CUBEのバージョンを確認
- EC-CUBEファイルのバックアップ
- 修正ファイルをダウンロード
- ダウンロードしたzipファイルを解凍する
- 1で確認したバージョンのファイルをサーバーにアップロード(上書き)
- キャッシュの削除(キャッシュ削除の方法は方法2参照)
- 確認作業
という手順。詳しくはEC-CUBE運営チームの情報をご確認ください。一応キャプチャも貼っておきます。

【方法2】ファイルの中身を書き換える場合

私はEC-CUBEのプログラムをカスタマイズしているため、こちらにて対応しました。手順としては
- 「mail_confirm.twig」の中身をコピーし、テキストエディタに貼り付ける
- 「{{ form.tpl_data.vars.data|trans|raw|nl2br }}」を探し出し「{{ form.tpl_data.vars.data|trans|nl2br }}」に書き換える
- 書き換えた全データを貼り付けて更新
- キャッシュ削除
- 確認作業
という感じ。
それではXSERVERでの具体的な手順の説明をば。
1.「mail_confirm.twig」の中身をコピーし、テキストエディタに貼り付ける
XSERVERのファイルマネージャーで該当ファイルを選択し、編集ボタンを押します。

すると、ポップアップ画面でファイルの中身が表示されるので、全部コピー(Ctrl + Aで全選択後、Ctrl + Cでコピーすると楽)し、テキストエディタに貼り付けます(Ctrl + V)。テキストエディタはメモ帳でもなんでもOK。

2.「{{ form.tpl_data.vars.data|trans|raw|nl2br }}」を探し出し「{{ form.tpl_data.vars.data|trans|nl2br }}」に書き換える
私が使用しているエディタはVisual Studio Codeです。Ctrl + Hで置換画面がでてきます。メモ帳だと「編集」「置換」と辿っていけばOK。
検索窓に「{{ form.tpl_data.vars.data|trans|raw|nl2br }}」
置換窓に「{{ form.tpl_data.vars.data|trans|nl2br }}」
をEC-CUBE運営チームの情報サイトからコピペで貼り付けて(手打ちでの入力はミスの元!)、検索。114行目にそのコードが見つかりました。確認後置換。

3.書き換えた全データを貼り付けて更新
先ほど書き換えたエディタのデータを全選択(Ctrl + A)し、コピー(Ctrl + C)。XSERVERのポップアップ画面内に貼り付け(Ctrl + Aで全選択後、Ctrl + Vで貼り付けると楽)、更新ボタンを押します。

4.キャッシュの削除

EC-CUBEの管理画面にアクセスし、「コンテンツ管理」→「キャッシュ管理」内の「キャッシュ削除」をクリックします。
5.確認作業
あとは、管理画面やECサイトの画面が正しく表示されているかを確認すれば完了です。
難しいからと言って放置すると危険
「難しそうだから」「よくわからないから」「放っておいてもなんとかなるだろう」と先延ばしにするのはダメですよ。個人情報やクレジットカード情報が盗まれた後に何をされるかわからないですし、そのサイトを踏み台にさらに被害が拡大するなんてことも考えられるわけなので…。面倒でも早急な対処を。