セキュリティ

松屋の不正アクセス:237万件の対象確認と窓口、漏れたパスワードの守り方

松屋の不正アクセス:237万件の対象確認と窓口、漏れたパスワードの守り方

牛丼チェーンの松屋を運営する松屋フーズホールディングスは2026年10月30日、松屋公式アプリの管理システムが第三者から不正アクセスを受け、松弁ネット・モバイルオーダー・松弁デリバリーの利用者2,377,127件と、アプリ会員2,000件(最大3,000件)の情報が漏えいしたと公表しました。クレジットカード情報は同社が持っていないため含まれません。前半では公表文をもとに、自分が対象かどうか、注意すべきSMSや電話、問い合わせ窓口を整理しました。後半では、公表文にある「暗号化されたパスワード」の保存方式によって、漏れた後に解読される件数がどう変わるかをPythonで確かめます。

まとめ:松屋公式アプリの不正アクセスで漏えいした情報と利用者の対処

松屋フーズホールディングスのお詫びとお知らせによると、漏えいが判明したのは2026年10月28日です。対象は2つに分かれ、松弁ネットなどの利用者は住所・氏名・電話番号が、アプリ会員はそれに加えて生年月日・メールアドレス・暗号化されたパスワードが含まれます。原因と、不正アクセスが可能になった経緯は調査中です。

利用者が今すぐ気をつけるのは、松屋を名乗るSMSや電話です。住所と電話番号がそろって漏れているため、メールだけでなく電話や郵便を使った詐欺にも使われえます。同社がパスワードやカード情報をメールや電話で尋ねることはありません。

項目 公表内容(2026年10月30日時点)
判明日 2026年10月28日
入口 松屋公式アプリの管理システム
利用者の件数 2,377,127件(松弁ネット等の利用者)
会員の件数 2,000件(最大3,000件の可能性)
カード情報 同社で保持しておらず対象外
知らせ方 漏えいした人へ順次連絡
補償 アプリ会員へ利用停止期間中の補償を予定
未公表 侵入経路・原因・再開日

利用者が確かめること:対象の2区分と不審なSMS・電話、問い合わせ窓口

松弁ネット・モバイルオーダー利用者237万件とアプリ会員2,000件の違い

1つ目の区分は、松弁ネット・モバイルオーダー・松弁デリバリーを使ったことのある人で、2,377,127件です。漏えいした項目は会員ID・お届け先住所・氏名・電話番号・松屋ポイントの5つです。持ち帰りの予約や宅配を一度でも頼んだ人は、この区分に入る可能性があります。

2つ目は松屋公式アプリに登録した会員で、確認できたのは2,000件、最大で3,000件です。項目は会員ID・都道府県・氏名・電話番号・生年月日・メールアドレス・暗号化されたパスワード・松屋ポイントの8つです。件数は少ないものの、パスワードとメールアドレスが含まれる点でこちらの区分のほうが対処が多くなります。店頭の券売機で買っただけの人は、公表文の書き方ではどちらにも入りません。

住所と電話番号がそろって届く、松屋を名乗るSMSと電話の見分け方

公表文は、漏えいした情報がなりすまし等に使われるおそれがあるとして、不審なメール・SMS・電話に注意するよう呼びかけています。237万件の区分にはメールアドレスが無く、電話番号と住所があります。そのため狙われやすいのは、電話番号あてのSMSと、本人の住所や名前を読み上げる電話です。

「お詫びのポイントを付与するので本人確認を」「補償の振込先を教えてください」という連絡が来ても、SMSのリンクは開かず、電話口でカード番号や口座番号を言わないでください。名前と住所を知っていることは、本物の証拠になりません。偽の連絡が成り立つ仕組みはフィッシング詐欺の成立の仕組みと技術的対策で解説しています。

暗号化されたパスワードの変更要否と、使い回しているほかのサービス

アプリ会員の区分には、暗号化されたパスワードが含まれます。公表文はパスワードの変更を求める記述をしていません。ただし、松屋公式アプリと同じメールアドレスとパスワードの組み合わせをほかの通販や会員サイトでも使っているなら、そちらは別のパスワードに変えてください。

暗号化の方式によっては、時間をかければ元のパスワードに戻される可能性があるからです。その差は後半のPythonで確かめます。使い回しの点検の手順は、同じ10月に公表された花キューピットの情報漏洩とパスワードの点検手順にまとめました。

個人情報お問い合わせ窓口の電話番号と受付時間、アプリ停止中の補償

本件の専用窓口は「株式会社松屋フーズホールディングス 個人情報お問い合わせ窓口」で、電話番号は0422-38-1121です。受付は平日の10時から16時までで、土日祝日は休みです。音声案内の後に「1」を押します。専用のメールアドレスも公表文のPDFに載っています。SMSや電話で伝えられた別の番号ではなく、PDFに書かれた番号を使ってください。

アプリ会員には、利用停止期間中の補償を予定しているとしています。内容は「別途告知」とされ、10月30日時点では決まっていません。日本経済新聞の報道によると、同社は10月28日の午後9時ごろに不正アクセスを検知してホームページとアプリを止め、アプリのクーポンが使えない間は公式Xでクーポンを配っています。

公表文から読む事案の構造:管理システム経由の漏えいと報告義務、続く会員アプリ事案

アプリ本体でなく管理システムが入口になった意味と237万件の規模

公表文が入口として挙げたのは、アプリそのものではなく「松屋公式アプリの管理システム」です。管理システムは、運営する社員や委託先が会員を検索したり、注文やポイントを直したりする画面と、その裏のデータベースを指すのが一般的です。利用者向けの画面と違い、会員の全件をまとめて見られる権限を持っています。

アプリ会員の2,000件に対し、松弁ネットなどの利用者が237万件と、件数の桁が3つ違うのも、このつながりで説明がつきます。公式アプリと、持ち帰りや宅配の注文の仕組みが、同じ管理システムで会員情報を扱っていたと読める構成です。原因が公表されていないので、管理画面のアカウントが乗っ取られたのか、管理システムの不備を突かれたのかは分かりません。

不正な目的の漏えいは件数を問わず報告対象、施行規則7条と本人への連絡

個人情報保護法施行規則の第7条は、不正の目的をもって行われたおそれがある行為による漏えいを、件数にかかわらず委員会への報告の対象にしています。第三者からの不正アクセスはこれにあたり、1,000人を超える漏えいとしても対象です。第8条により、知った後に速やかに速報を出し、この類型では60日以内に確報を出します。公表文の「個人情報保護委員会への報告など、必要な対応を進めております」は、この手続きにあたります。

本人への通知は個人情報保護法の第26条第2項が求めており、公表文の「順次ご連絡」がそれにあたると読めます。手続きの全体は個人情報保護委員会への報告義務の実務で解説しました。委員会の案内は漏えい等の対応とお役立ち資料にあります。

10月の無印良品・花キューピットと比べた漏えい項目と件数の違い

2026年10月は会員サービスの事案が続いています。無印良品のMUJIアプリの情報漏洩は最大約2,726万件で、項目はメールアドレス・生年月日・性別の3つでした。花キューピットは423万件です。松屋の件は件数で無印良品を下回りますが、住所と電話番号と氏名がそろっている点で、郵便や電話の詐欺に結びつきやすい事案です。

開発側の教訓:暗号化とハッシュの違いと、漏れたパスワードの戻され方をPythonで確認

原因は調査中、「暗号化されたパスワード」が指しうる2つの保存方式

ここから先は、松屋の保存方式を推測するものではありません。漏えいの公表文でいう「暗号化されたパスワード」は、実際には2つの方式のどちらかを指すことが多い言葉です。1つは鍵で戻せる可逆の暗号で、もう1つは元に戻せないハッシュです。

OWASPのPassword Storage Cheat Sheetは、暗号化は双方向の処理なので攻撃者が平文を取り出せるとして、パスワードの保存にはハッシュを使うよう求めています。推奨はArgon2id(メモリ19MiB・反復2・並列1が下限)で、使えなければscrypt(N=2^17・r=8・p=1)です。両者の違いはハッシュ化と暗号化の違いとパスワード保管の仕組みで解説しています。同じ2026年10月に、給食サイト「たのしい給食」会員の暗号化されたパスワードが漏えいしたと公表された事案は、ヤクルトの不正アクセスで利用者の対処とあわせて整理しています。

可逆暗号・ソルトなしSHA-256・scryptの3方式で戻る件数を比べるPython

次のコードは標準ライブラリだけで動きます。架空の会員2,000件のうち約3割が、よくあるパスワード100語のどれかを選んだと仮定しました。同じ会員テーブルを3つの方式で保存し、漏れた後に攻撃者が100語の辞書で何件のパスワードを戻せるかを数えます。scryptはPythonのhashlibの実装を使い、128MiBを使うのでmaxmemを既定より広げています。

# 漏れた会員テーブルから、保存方式ごとに何件のパスワードが辞書攻撃で戻るかを比べる
# (Python 3.8以上・標準ライブラリのみ。可逆方式は仕組みを見せるための学習用で実運用不可)
# 使い方: python password_store.py
import hashlib, hmac, os, random, time

rnd = random.Random(1028)
COMMON = ["123456", "password", "matsuya", "gyudon1", "qwerty"] + [f"pass{i:04d}" for i in range(95)]
users = []                                   # 2,000人中およそ3割がよくあるパスワードを選ぶ想定
for uid in range(1, 2001):
    pw = rnd.choice(COMMON) if rnd.random() < 0.3 else os.urandom(9).hex()
    users.append((uid, pw))

KEY = b"same-server-key"                     # 可逆方式: 鍵がDBと同じサーバーにある想定
def enc(uid, pw):
    pad = hashlib.sha256(KEY + str(uid).encode()).digest()
    return bytes(a ^ b for a, b in zip(pw.encode(), pad))
def dec(uid, ct):
    pad = hashlib.sha256(KEY + str(uid).encode()).digest()
    return bytes(a ^ b for a, b in zip(ct, pad)).decode()

def scrypt(pw, salt):                        # OWASP推奨の下限 N=2^17, r=8, p=1(約128MiB)
    return hashlib.scrypt(pw.encode(), salt=salt, n=2**17, r=8, p=1,
                          maxmem=256 * 1024 * 1024, dklen=32)

leak_rev = [(u, enc(u, pw)) for u, pw in users]
leak_sha = [(u, hashlib.sha256(pw.encode()).hexdigest()) for u, pw in users]
sample = [x for x in users if x[1] in COMMON][:3]   # 辞書で当たるはずの3人だけで試す(scryptは重い)
leak_scr = [(u, s, scrypt(pw, s)) for u, pw in sample for s in [os.urandom(16)]]

print("[reversible] recovered:", sum(1 for u, ct in leak_rev if dec(u, ct)), "/ 2000")
table = {hashlib.sha256(w.encode()).hexdigest(): w for w in COMMON}   # 辞書100語を1回ハッシュ
print("[sha256]     recovered:", sum(1 for u, h in leak_sha if h in table), "/ 2000")

t, tries, hit = time.perf_counter(), 0, 0
for u, s, h in leak_scr:                     # ソルトが1人ずつ違うので、辞書を人数分やり直す
    for w in COMMON:
        tries += 1
        if hmac.compare_digest(scrypt(w, s), h):
            hit += 1
            break
sec = (time.perf_counter() - t) / tries
print("[scrypt]     recovered:", hit, "/ 3 sampled")
print(f"[scrypt]     {sec*1000:.0f} ms per guess -> 2000 users x 100 words = {sec*2000*100/3600:.1f} h")

Python 3.14.7(OpenSSL 3.5.7・Windows)で実行した結果です。1〜3行目は乱数のシードを固定しているので同じ値になり、4行目の時間は計算機の性能で変わります。

$ python password_store.py
[reversible] recovered: 2000 / 2000
[sha256]     recovered: 590 / 2000
[scrypt]     recovered: 3 / 3 sampled
[scrypt]     645 ms per guess -> 2000 users x 100 words = 35.9 h

実行結果の読み方、同じ辞書でも1回の照合が645ミリ秒になるscryptの効き目

1行目の可逆方式は、鍵がデータベースと同じサーバーにあれば、パスワードの強さに関係なく2,000件すべてが戻ります。2行目のソルトなしSHA-256は、辞書の100語を1回ハッシュして突き合わせるだけで590件が一瞬で戻りました。同じパスワードの会員は同じハッシュ値になるので、1語を当てると全員分が一度に割れます。

3行目のscryptでも、辞書に載る弱いパスワードはいずれ当たります。違いは時間で、1人ごとにソルトが違うため辞書を人数分やり直す必要があり、1回の照合に645ミリ秒かかりました。2,000人に100語を試すと約36時間で、SHA-256の一瞬との差が、漏えいから利用者がパスワードを変えるまでの猶予になります。ハッシュの値とは別の場所に置くペッパーを足すと、データベースだけを取られた段階では照合そのものができなくなります。

管理システムの守り方:運営画面の多要素認証と一括出力の上限で被害を絞る条件

管理画面のログインと全件出力に重ねる5つの点検項目と優先順位

今回の入口は管理システムでした。利用者向けの画面をどれだけ固めても、全件を見られる管理画面が破られると、件数は利用者全体に広がります。運営会社が先に確かめる項目を、効く順に並べました。

順 点検項目 抜けていたときの被害
1 管理画面ログインの多要素認証 漏れた社員のパスワードで全件に届く
2 接続元IPの制限 社外のどこからでも試行される
3 全件出力の件数上限と承認 1回の操作で全会員を持ち出せる
4 委託先アカウントの棚卸し 退職者や契約終了のIDが残る
5 操作ログの保存と通知 持ち出しに気づくのが遅れる

1番目と3番目が抜けている管理画面は、ほかの対策より先に直してください。OWASPのMultifactor Authentication Cheat Sheetは、管理者など権限の高いアカウントに多要素認証を求めています。方式の選び方は多要素認証(MFA)の3要素と実装方式で解説しました。管理画面がアプリと同じAPIを使っている場合の入口の固め方はAPI不正アクセス対策の実装手順にあります。

外部診断を優先すべき運営会社と、年1回の定期診断で足りる運営会社

次のどれかに当てはまるなら、会員アプリと管理システムを外部の脆弱性診断で優先して見てもらってください。管理画面がインターネットからIDとパスワードだけで開けること。会員データを全件まとめて出力でき、件数の上限も承認もないこと。パスワードを可逆の暗号か、ソルトなしのハッシュで保存していることです。

どれにも当てはまらず、管理画面への接続を社内網か多要素認証に絞り、操作ログを毎日見ているなら、年1回の定期診断で足ります。診断の種類と費用の考え方は脆弱性診断の種類・費用相場と外注の判断基準にまとめました。自社の会員アプリや管理画面に同じ弱点が残っていないかを第三者に確かめてもらいたいなら、脆弱性診断・セキュリティ診断で相談できます。

よくある質問

松屋の不正アクセスについて、利用者から出やすい質問をまとめました。

自分が松屋の情報漏えいの対象かどうか、どうすれば分かりますか?

松弁ネット・モバイルオーダー・松弁デリバリーを使ったことがある人と、松屋公式アプリに登録した人は、対象の可能性があります。同社は漏えいした人に順次連絡するとしています。待たずに確かめたいときは、公表文に載っている個人情報お問い合わせ窓口(0422-38-1121、平日10時から16時)に電話してください。SMSや電話で案内された番号には電話しないでください。

パスワードの変更やクレジットカードの停止は必要ですか?

クレジットカード情報は同社が保持しておらず、漏えいの対象に入っていません。カードを止める必要はありません。パスワードは、アプリ会員の区分で暗号化されたものが漏えいしています。公表文は変更を求めていませんが、同じメールアドレスとパスワードをほかのサービスでも使っているなら、そちらを別のパスワードに変えておくと安心です。

松屋を名乗るSMSや電話が来たらどうすればいいですか?

SMSのリンクは開かず、電話ではカード番号・口座番号・パスワードを答えないでください。同社は、メールや電話でパスワードやクレジットカード情報を尋ねることはないとしています。今回は氏名・住所・電話番号がそろって漏れているため、相手が自分の名前や住所を知っていても本物とは限りません。気になる場合は電話を切り、公表文の窓口にかけ直してください。

アプリが使えない間の補償やクーポンはありますか?

同社はアプリ会員に、利用停止期間中の補償をする予定としています。内容は別途告知とされ、10月30日時点では決まっていません。報道によると、アプリのクーポンが使えない間は松屋の公式Xでクーポンを配っています。補償をうたうSMSやメールが届いても、リンクは開かず、同社の公式サイトに同じ告知があるかを先に確かめてください。

原因やアプリが再開する時期はもう分かっていますか?

どちらも公表されていません。公表文は、第三者による不正アクセスであることは確認したものの、原因と、不正アクセスが可能になった経緯は調査中としています。システムは関係各社の協力のもとで早期の復旧に取り組んでいる段階で、再開日は10月31日時点で示されていません。続報は同社のお知らせで確認してください。

関連記事

お気に入りに入れた記事の一覧

一創の公式 SNS

X では毎朝の新着記事と IT ニュースの速報を、YouTube・TikTok・Instagram では記事の解説動画を配信しています。

この記事は以下の記事からリンクされています

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.10.28 テックブログ リンツ不正アクセス:314万件の対象確認とパスワード強制リセット後の対処
  2. 2026.10.29 テックブログ ソニー生命の不正アクセス:38.5万件の対象確認と窓口、停止中の手続き
  3. 2026.10.27 テックブログ Brotli 脆弱性:CVE-2026-111497の影響確認とNode.js・Python・.NETの更新手順
  4. 2026.01.30 コラム 税務調査は個人と法人で何が違う?担当部署・件数・調べられる点と追徴税額を比較【令和6事務年度】
  5. 2026.09.26 コラム 価格転嫁とは?価格交渉促進月間の調査に回答義務はあるか・取適法の協議記録まで

RELATED POSTS 関連記事

目次