※ブコメとかに対するフィードバックを色々追記しています
牛角サブスクに22日通った。
その中で、色々な脆弱性が見受けられたため、詳しく書く。
※この記事で紹介する脆弱性を実際に突いてサービスを不正利用すると、詐欺罪に問われる可能性があるので、絶対にやらないこと。また、この記事は啓蒙を目的としており、システムの悪用を推奨していない。
最初に、牛角サブスクのシステムについて説明する。
・monster pass というサービスに登録し、クレカでサブスクパスに課金する。
・店でパスの画面を見せる。画面には1日1回だけ押せるボタンがあり、ボタンを店員の目の前で押すことで、サービス権を行使する。食べ放題が無料になる
・最後にレジで会計するが、食べ放題対象メニューの代金はすべて0円となる。追加メニューなどはここで普通に支払う
このシステムだが、はっきり言ってザルザルのザルすぎて、正直金をとって運用するレベルに達していない。
本人確認の不徹底
monster pass には名前や顔写真の入力項目があるが、未設定でも店員からは一度も咎められなかった。プロフが未設定だと店員には客の本人確認ができない。これにより、規約で禁止されているにもかかわらず、複数人でアカウントを共有できる。これだけでも問題だが、このことは、次に説明する脆弱性の危険度を増幅する。
※追補 もちろんプロフに嘘を入力するのも可能なので、そもそもプロフによる本人確認は完全に形骸的なものである
また、試していないのでわからないが、プロフィールの変更が何度でも可能な場合、当然、アカウントの使いまわしは防げない。
システムに対する現場の理解不足
前述のように、牛角サブスク(というか、monster pass)は、パスの画面を店員に提示して、目の前で当日の利用権を行使する、という確認作業が必要であるが、それが適切に行われていない店が複数あった。
具体的には、パスの画面を見せるだけで、ボタンをタップしなくても注文が通るケースがあった。これが通ると、1日に何度でもサービスを受けることができる。例えばA店で食べ放題を楽しんだあと、別のB店でまた食べ放題を楽しめる。さすがにそれは非現実的だが、自分が食べ放題を楽しんだ後、友人知人に食べ放題をプレゼントすることは現実的であり、知らない人間に食べ放題権を販売することすら可能である。
なお、monster pass は不正防止にSMS認証を採用しているが、認証コードさえ共有できれば、アカウントは共有できる。
それどころか「サブスクで」と言うだけで、スマホの画面を見ることもなく通されるパターンもあった。もはや、サブスク権を購入していなくても無銭飲食ができてしまう。さすがにこれはやばすぎる。
※はてブで「顔覚えられたのでは?」と指摘があったが、これは初めて行った店舗だった。ちなみに顔パスになったとして、サブスク解約すれば無銭飲食できる
どれだけシステムがうまく作られていても、しょせん運用するのは現場のバイトである。現場の運用ができていなければあらゆるシステムは無為となる。今回は炎上対策で多店舗展開が急だったため、本部→店長→バイトスタッフ への説明が不十分な店が多かったのではないか。
それに、バイトにしてみれば、客がサブスク契約してようが無銭飲食だろうが関係ないんですよね。
monster pass の根本的な脆弱性
牛角サブスクでの monster pass の利用方法は、スマホ画面を店員に見せ、目の前でボタンをタップして利用権の行使を見せるというものだった。
これ、画面、偽造し放題じゃね?????
店員はスマホの画面をちらっと見るだけ。QRなどの認証もない。自前の鯖に適当に丸ごとコピーした偽造サイトを掲示しても、おそらくまったく気づかれないと思われる。
ちなみに、私が今月から利用しているクラフトビールサブスク、ラーメンサブスクのプラットフォームであるfavyでは、画面をタップするとバーコードが表示され、それを店側の機械で読み取ることで利用権の行使が完了する。これはセキュアである。
※訂正 ラーメンサブスクは店員目視だった。牛角サブスクと同じ問題を抱えているが、比較的きちんと運用されている模様
モンパスやばくね????
※追補 上記のようにfavyや、その他の多くのサブスクシステムも同じ問題を抱えている
ということで、この問題について monster pass に問い合わせたところ、monster pass としてはQRやバーコードによる認証システムは実装しており、使うか使わないかは店側の判断とのこと。
monster pass「店によってはヤバヤバだけど、店の自己責任だからプラットフォームには責任ないよ! 設備投資渋る店にも無理やり導入したいからセキュリティは置いといてゴリゴリ営業するよ!」
これにはワイもニッコリ
これは脆弱性ではないのか?
「脆弱性ではない」「Qiitaでやるな」「Qiita荒らし」のような趣旨のブコメが一定数あるが、私はこれは脆弱性であると考える。
サービスは、コンピュータで動くプログラムだけでなく、運用してはじめて完結する。目の前のエディタをこちょこちょするだけでなく、運用する人間、利用する客の動きをデザインするところまでがエンジニアの仕事である。
プログラムのバグがなくても、運用で悪用できるシステムはそもそも設計がおかしい。たまたま日本だから許されているが、日本国外に出た瞬間に憤死することは目に見えている。(まあ出る気もないだろうけど)
トピックの性格や粒度の問題で具体的なプログラミング技術の話はしていないが、これは設計の話であり、qiitaの視野がそこまで狭いとは思っていない
ゼロデイ的な話
「脆弱性を発見した!共有!」が嫌われるという話について、まず、この記事は悪用防止のため牛角サブスク終了まで公開を待った。
また、事前に、monster pass運営に「これどうなん? あかんのちゃう? 顧客企業と利用者に経済的被害出るで? 対策取るなら待つで?」と問い合わせたところ「うちは対策済なんで、店が使うかどうかや」という返答だったので公開に差支えがないと判断した。
現状でも、セキュアな認証を導入していない店については悪用できるが、多くのサブスク運営はITベンチャーであり、リテラシーの低い企業が、セキュリティについて十分な理解のない状態で営業に口八丁でゴリ押しされて導入する場面もあろうと推測するので、本記事はそういったサブスク導入企業に対する注意喚起の面もある。
いずれにしても、エンジニアとしてある程度のモラルは保ったうえで記事を公開したつもりである。
コストガーとか言ってる人向け
ええか?
- 客がボタンをタップしたらワンタイムQRを出す
- 店はスマホカメラでQRを読み、認証完了
- コードの発行と照合はサーバで行うので、偽装サイト・アプリでは認証通らない
たったこれだけの実装と運用に、なんぼほどのコストがかかるんじゃ 専用の機械なんかいらん、中古のスマホ用意すれば済む話や たったこれだけで無銭飲食をほぼほぼ駆逐でき、しかも顧客の行動を厳密に取れる やらん意味がわからん
※店がQR提示→客が読み込み だと、客側端末で偽装の可能性があり、どっちみち店側に認証完了通知が必要なので、客がQR提示→店が読み込みのほうがフローが少ない
結論
サブスクから解き放たれた牛角が半額セールで闘牛のごとく猛り荒ぶっていますので、みなさん牛角に行きましょう
3月1日までだからみんな早く牛角半額期間に牛角に行くんだ!!!!!!半額がどのくらい凄いかというとアラサー女が胸焼け寸前まで肉食ってビール飲んでやっと加減の3000円に行く感じだ!!!!!!みんな期間中に一回は行けよな!!!!!!!
現在おススメのサブスク
毎日仕事が終わると無条件でクラフトビールが約束されており、QOLが地味に高まっている 他のブルワリーのビールも飲めて懐が大きい
見てる:銀座『BEER TO GO』の月額2,496円のサブスクサービスで、毎日1杯クラフトビールを楽しめる https://www.favy.jp/topics/27183 とんでもないプランだけどサブスクを利用しなくても行ってみたい。