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