必須項目が空のまま注文が入ったEC-CUBEのサイトで、何が起きていたか|止められたままの「合言葉」
EC-CUBEでお店を運営しているお客様から、クマひよ工房に調査の依頼がありました。「郵便番号も電話番号もない会員から、注文が入っている」という内容です。
この記事では、入力必須のはずの項目が、なぜ空のまま登録できたのかを調べた流れと、その根にあった問題をまとめます。最後に、運営者が今日からできることを紹介します。お客様が特定されないよう、細かな情報はぼかしています。
何が起きたか
郵便番号と電話番号が空のまま、会員が登録されていました。そして、その会員で購入が行われていました。住所の一部も連絡先も分からないため、商品を送ることも、確認の連絡をすることもできない注文です。
会員登録の画面では、郵便番号と電話番号は入力必須です。空のままでは「入力されていません」と表示され、先へ進めません。お店の方も、なぜこんな会員がいるのか分からない状態でした。
なぜ空のまま登録できたのか
画面のチェックは効いていた
会員登録は「入力画面 → 確認画面 → 登録完了」の3つの段階で進みます。入力画面の必須チェックは正しく働いていて、普通に画面から操作している限り、空のまま登録されることはありません。
最後の段階で確かめていなかった
問題は、最後の登録完了の段階にありました。保存に使う値は確認画面の時点で作られ、お客様のブラウザを経由して受け渡されていました。最後の段階では、受け取った値に中身があるかを確かめず、そのまま保存していました。
そのため、画面を通さずに送信の内容を直接用意して送ると、必須チェックを素通りできました。特別な道具は要らず、簡単にできてしまう状態でした。工房の検証環境でも、同じことが起きるのを確かめています。
たとえるなら
受付で「申込書に記入漏れがないか」を確かめたあと、担当者が別の用紙を受け取って保管しているような状態です。受付で見た用紙はきちんと書かれていても、保管される用紙が空欄かどうかは、誰も見ていませんでした。
お問い合わせフォームにも届いていたもの
調べを進めると、お問い合わせフォームにも不審なメールが届いていました。お名前やお問い合わせ内容の欄に、メールの宛先を増やすための命令と、外部の確認用サービスの宛先が入っていたものです。
これは、フォームの弱点を探す自動ツールによる試し送信と見られます。このお店を狙ったものとは限らず、インターネット上の多くのサイトに、同じような送信が届いています。
宛先を増やす攻撃は成立しなかった
試し送信の狙いは、お店のフォームを使って、別の宛先にメールを送らせることです。今回は、メールアドレスの欄の形式チェックが厳しく、不正な文字は通りませんでした。ほかの防御も働いていて、この攻撃は成立しない見込みです。
それでも残っていた問題
- 画面を通さずに送れる - 会員登録と同じく、確認画面を経由しなくてもメールが送られました。
- 自動返信メールを悪用できる - 入力した文章がそのまま自動返信メールに載り、入力した宛先に送られます。お店の名前で、他人に好きな文章を送れてしまい、迷惑メールの踏み台になりえます。そうなると、お店のメールが迷惑メール扱いされるおそれがあります。
- 送信の記録がない - 誰が、いつ、どこ宛に送ったのかを、サイトで記録していませんでした。不審な送信が増えても、あとから追えません。
共通の根っこ
会員登録とお問い合わせ、どちらも「画面を通さずに送れた」ことが問題を大きくしていました。調べると、お客様向けのサイト全体で、「正しい画面から送られてきたか」を確かめる仕組みが止められていました。
この仕組みは、窓口の番号札のようなものです。画面を開くたびに、サイトがその画面だけに番号札(合言葉)をこっそり添えます。送信のときに番号札が一致するかを確かめ、当サイトの画面を通さずに送られてきた操作は受け付けません。今回のサイトは、番号札を配ってはいるものの、手続きのときに確かめていない状態でした。
なぜ止められていたのか
プログラムを調べると、何年も前の改修で、この確認が「何もしない」ように書き換えられていました。
この確認は、正しく操作しているお客様でも、次のような場面でエラーになりやすい性質があります。
- 同じサイトを複数のタブで開いて操作した
- ブラウザの「戻る」ボタンを使った
- 外部の決済サービスから戻ってきた
- 画面を開いたまま、長い時間がたってから送信した
こうしたエラーを減らすための一時的な対応が、そのまま残ったと見ています。
止まっているとどうなるか
ログイン中の会員さまが、別のサイトで細工されたページを開いたときに、そのページから当サイトへ操作が送られてしまう余地があります。会員情報の変更、お届け先の変更、退会、購入などが、本人の意図しない形で行われるおそれがあります。
最近の主要なブラウザには、こうした操作を防ぐ仕組みがある程度備わっています。ただ、古いブラウザや設定によっては働かないため、それだけには頼れません。
作った人がいなくなると、理由ごと忘れられる
当時は、何かの不具合を避けるための判断だったのかもしれません。ただ、作った人がいなくなると、なぜ止めたのかを誰も説明できなくなります。止めたことすら知られないまま、何年も残っていました。
工房が行った対策
- 最後の段階で確かめる - 登録完了の段階で、サーバが保存する値を作り直し、中身があるかを必ず確かめるようにしました。画面の見た目や、お客様の操作手順は変わりません。
- 入力内容のチェックを強める - お問い合わせフォームで、改行や特殊な文字が混ざる入力を取り除くようにしました。
- 送信の記録を残す - 誰が、いつ、どこ宛に送ったのかを記録するようにしました。
- 番号札の確認を再開する - 止めた理由を確かめたうえで、確認を再開しました。決済サービスからの戻りや、複数のタブでの操作など、エラーが出やすい場面を中心に動作を確かめています。
運営者が今日からできること
必須項目が空の会員や注文がないか見る
ときどき管理画面で、会員や注文の一覧を見てください。入力必須のはずの項目が空のものがあれば、画面を通さずに送られている可能性があります。
意味の分からないメールは、消さずに渡す
フォームから意味の分からない文字列のメールが届いたら、弱点を探す試し送信かもしれません。消さずに、そのまま保守の担当者に渡してください。どの欄に何が入っていたかが、調べの手がかりになります。
自動返信メールの中身を見直す
自動返信メールに、お問い合わせの内容をそのまま載せる必要があるかを見直してください。載せなければ、お店の名前で他人に好きな文章を送られることはなくなります。
止められている仕組みがないか確かめてもらう
昔のカスタマイズで、安全のための確認が止められていることがあります。作った人がいないサイトほど、気づかれないまま残りがちです。保守の担当者に、止められている仕組みがないかを確かめてもらってください。再開するときは、止めた理由を確かめてからにします。
相談先
不審な注文や送信の調べと対策はセキュリティの対応で、ふだんの見守りと更新は見守り契約で、ご相談を承っています。作ったのが誰でも、どこのサーバでも、お引き受けします。