ニフティ株式会社は2026年10月19日、回線の申込情報を扱う社内の「回線申込・受付管理システム」が外部から不正アクセスを受けたと発表しました。第一報では3サービス・最大542,513件とされていた範囲は、10月21日の第二報で「@nifty光」の最大18,000件に絞り込まれています。本記事の前半では、自分は対象か、何が漏れたのか、届いた電話やSMSは本物か、パスワードを変えるべきかという会員の疑問に、公式発表の文言に沿って答える構成です。後半では、社内の管理用ツールが狙われる構造と、アクセスログから影響範囲を確定する手順をPythonのコードで示します。
まとめ:ニフティ不正アクセスの対象は@nifty光の申込者で最大18,000件に縮小
対象は、2019年以降に「@nifty光」を申し込んだ人のうち、ニフティのWebサイト以外から申し込んだ人です。漏えいした可能性がある項目は会員ID、氏名、性別、生年月日、住所、電話番号の6つです。第一報に含まれていたメールアドレスは、第二報で対象外と確認されました。パスワード、銀行口座、クレジットカードの情報はこのシステムに保有されていません。
会員がやることは1つに絞れます。ニフティや関係者を名乗る電話、SMS、メールで、暗証番号やパスワード、カード番号を聞かれても答えないことです。ニフティは、これらを尋ねることは無いと明言しています。運営する側にとっての教訓は、最大範囲の54万件から実数の1万8千件へ2日で絞れたのは、アクセスログ等を精査できたからだという点にあります。
| 項目 | 公表されている内容(2026年10月21日時点) |
|---|---|
| 狙われたシステム | 回線申込・受付管理システム |
| システムの性格 | 社内で情報を登録する管理用ツール |
| 件数 | 最大18,000件(第一報は最大542,513件) |
| 対象サービス | @nifty光のみ |
| 対象者 | 2019年以降の申込者(Webサイト経由を除く) |
| 対象の項目 | 会員ID・氏名・性別・生年月日・住所・電話番号 |
| 対象外 | メールアドレス・パスワード・口座・カード |
| 窓口(毎日10時〜18時) | @nifty専用ダイヤル 0120-924-719 |
| 未公表 | 原因・手口・本人への通知方法・補償 |
@nifty会員が最初に確かめること:対象かどうか、漏れた項目、不審な連絡
対象は2019年以降にWebサイト以外から@nifty光を申し込んだ人
ニフティの第二報によると、対象は「2019年以降に回線をお申し込みいただいたお客様」で、「当社Webサイトからお申し込みのお客様は対象外です」とされています。対象サービスは「@nifty光」だけです。第二報は「@nifty MAX光」「@nifty auひかりプラス」「@nifty auひかり」「@nifty with ドコモ光」などを対象外と明記しました。
ニフティのWebサイト以外とは具体的にどの窓口か、発表は挙げていません。店頭や電話、販売の窓口で申し込んだ覚えがある@nifty光の利用者は、対象になりうると考えて備えるのが安全です。2018年以前に申し込んだ人と、他の回線サービスの利用者は、今回の発表の範囲に入っていません。
漏えいの可能性は会員IDなど6項目、メールアドレスは第二報で対象外に
対象の項目は、会員ID、氏名、性別、生年月日、住所、電話番号です。メールアドレスについて、第二報は「漏えい対象でないことを確認いたしました」と書いています。漏れた可能性があるのが住所と電話番号なので、今後に増えやすいのはメールより電話、SMS、郵便による偽の連絡です。会員IDと氏名を名乗られると本物らしく聞こえますが、その2つはすでに漏れた可能性がある情報だと考えてください。
ニフティはパスワードもカード番号も尋ねない:電話・SMSの見分け方
第一報は「当社からお客様個別に電子メールやお電話等でご連絡し、暗証番号やパスワード、クレジットカード情報等をお尋ねすることはございません」としています。したがって、これらを聞いてくる連絡はすべて偽物と判断してよい内容です。SMSやメールに書かれたURLは開かず、確かめたいときは自分で調べた公式サイトか、下記の専用ダイヤルにかけ直します。偽の連絡が成り立つ仕組みはフィッシング詐欺の仕組みと技術的な対策で解説しました。
パスワード変更は必要か:システムに無かった情報と使い回しの点検
パスワードはこのシステムに保有されておらず、漏えいの対象に入っていません。ニフティも会員にパスワードの変更を求めていません。ただし、生年月日や電話番号をパスワードや秘密の質問に使っている場合は、その組み合わせを他のサービスも含めて変えておく価値があります。変更は、SMSやメールのリンクからではなく、自分で開いた@niftyの会員ページで行ってください。
第一報と第二報で変わった3点:542,513件から18,000件への絞り込み
10月19日10時20分の不正アクセス確認から10月21日の第二報まで
- 10月19日(月)10時20分頃:外部からの不正アクセスを確認し、当該の通信元からのアクセスを遮断
- 10月19日:第一報を公表。最大542,513件・3サービス・7項目を「漏えいした可能性のある情報の全項目」として示す
- 10月19日以降:外部の専門機関と詳細調査。個人情報保護委員会への報告手続きを進める
- 10月21日(水):第二報を公表。対象を@nifty光・最大18,000件・6項目に絞り込む
第一報は、確認したその日のうちに出ています。件数は「漏えいの可能性のある最大範囲」として、システムが持っていた申込データ全体を数えたものでした。第二報は、絞り込みの理由を「アクセスログ等の精査を進めた結果」と説明しています。この差が何を意味するかは、後半の技術章で扱います。
第一報と第二報の比較表:件数・対象サービス・漏えい項目の変更点
| 項目 | 第一報(10月19日) | 第二報(10月21日) |
|---|---|---|
| 件数 | 最大542,513件 | 最大18,000件 |
| 対象サービス | 光・MAX光・auひかりプラス | @nifty光のみ |
| メールアドレス | 対象に含む | 対象外と確認 |
| その他6項目 | 対象に含む | 対象に含む |
| 対象者の条件 | 2019年以降・Web経由を除く | 変更なし |
| 窓口の受付 | 10月19日は20時まで | 毎日10時〜18時 |
第一報を見て「@nifty MAX光」や「@nifty auひかりプラス」の利用者が身構えたなら、第二報で対象外になったことを確かめてください。逆に、@nifty光の利用者で対象者の条件に当てはまる人にとっては、範囲が絞られても対応は変わりません。
2026年6月のKDDI系メールサービスの漏えいとは別の事案
@niftyでは2026年6月にも、KDDIのISP事業者向けメールシステムへの不正アクセスで、メールアドレスなどが漏えいした事案が公表されています。今回の回線申込・受付管理システムの件とは、狙われたシステムも対象の項目も異なる別件です。6月の件の「本人確認のお願い」というメールや電話の真偽はKDDI系メール漏えいの記事で扱いました。2つの件を名乗る連絡が同時期に届くこともありえますが、見分け方は同じで、パスワードを聞く連絡には応じません。
10月21日時点で未公表の原因・申込の窓口・本人への通知方法
原因と手口は公表されていません。どの窓口からの申込データだったのか、対象者に個別の通知を送るのか、送るならどの手段か、補償があるかも、10月21日時点の発表には書かれていません。本記事で扱うのは公表済みの内容だけで、これらを推測で補う記述は対象外です。以降の技術章は本件の原因を特定するものではなく、社内の管理用ツールが外部から触れられる一般的な型と、運営者が影響範囲を確定する手順を整理したものです。新たな事実はニフティのニュースリリースで順次公表されます。
社内の管理用ツールが外部から触れられる構造:申込フォームとは別の登録画面
第二報が強調した「申込フォームとは異なるシステム」と担当者向け画面
第一報と第二報はどちらも、このシステムを「当社側で情報登録をするための管理用ツール」と説明し、利用者が直接申し込むWebサイトとは別だと書いています。Webサイト以外から入った申込を、担当者が登録して工事や開通の手配につなぐ種類の画面だという読み取りが可能です。Web経由の申込者が対象外になったのも、この性格と合います。
この種の管理用ツールは、社内の担当者だけでなく、販売や受付の窓口を担う社外の人が使う設計になることがあります。社外から使うためにインターネットからログイン画面へ届く状態にしていると、IDとパスワードが盗まれた時点で、外部の誰でも申込データを開けます。本件がこの型かどうかは公表されていません。
接続元を限り多要素認証を必須にする:管理画面の入口で止める2つの設定
管理用ツールの入口で最初に効くのは、接続できる場所を限ることです。社内ネットワークか、利用者と端末を確かめてから通すZTNAの経路からしか届かないようにしておけば、パスワードが盗まれても外部からは開けません。考え方はZTNAとVPNの違いと製品選定で整理しました。
2つめは、社外の利用者を含めて多要素認証を必須にすることです。共有アカウントを使っていると、誰の操作かをログで追えなくなるため、1人1アカウントにします。方式の選び方は二段階認証と多要素認証の違いで解説しています。入口の制限は大量取得の検知と組み合わせて使うもので、検知のSQLは焼肉きんぐ不正アクセスの記事で示しました。
アクセスログで影響範囲を確定するPythonコード:最大範囲から実数へ絞る
「保持している範囲」と「表示された範囲」を分けて数える理由と報告期限
個人情報保護委員会の案内は、漏えいが発覚したら発覚日から3〜5日以内に速報、30日以内に確報を出し、不正な目的で行われたおそれがある場合は確報の期限を60日以内としています。速報の段階で範囲が分からなければ、システムが持つデータ全体を最大範囲として出すしかありません。ニフティの第一報の542,513件がこの数え方です。
確報までに範囲を実数へ絞れるかは、ログに何が残っているかで決まります。OWASP Logging Cheat Sheetは、記録する属性を「いつ・どこで・誰が・何を」に分けて挙げています。管理用ツールでは「何を」に、開いた画面と表示した申込の番号まで入れておくことが絞り込みの条件です。報告書の書き方は個人情報保護委員会への報告義務の実務にまとめました。
監査ログから不正なセッションが表示した申込と項目を数えるコード
次の例は、管理用ツールの監査ログを1行1操作のJSON Linesで残している前提で、不正な通信元のセッションが表示した申込と項目だけを数えます。件数・画面名・IPアドレスはすべて架空で、ニフティのシステムを再現したものではありません。追加のインストールなしで動きます。
# 管理用ツールの監査ログから、不正アクセスで実際に表示・出力された申込データの範囲を確定する最小例(Python 3.10以上・標準ライブラリのみ)
import json
import random
from collections import Counter
random.seed(7)
# 管理用ツールが保持する申込データ(例として6万件。サービスと申込経路を持つ)
SERVICES = ["光", "MAX光", "auひかりプラス"]
RECORDS = {
f"app-{i:06d}": {
"service": random.choices(SERVICES, weights=[6, 2, 2])[0],
"channel": random.choice(["web", "代理店", "量販店"])
}
for i in range(60_000)
}
# 監査ログ(1行1操作のJSON Lines)。どの画面で、どの申込の、どの項目を表示・出力したかを残している前提
SCREEN_FIELDS = {
"申込詳細": ["会員ID", "氏名", "性別", "生年月日", "住所", "電話番号", "メールアドレス"],
"申込一覧": ["会員ID", "氏名", "性別", "生年月日", "住所", "電話番号"],
}
log_lines = []
staff = [r for r in RECORDS if RECORDS[r]["channel"] != "web"]
for rid in random.sample(staff, 3_000): # 正規の担当者の操作
log_lines.append(json.dumps({"session": "s-staff", "src": "10.0.0.5", "screen": "申込詳細", "ids": [rid]}, ensure_ascii=False))
hikari = [r for r in staff if RECORDS[r]["service"] == "光"]
targets = random.sample(hikari, 1_250)
for n in range(0, len(targets), 50): # 外部の通信元が申込一覧を50件ずつ表示した操作
log_lines.append(json.dumps({"session": "s-x91", "src": "203.0.113.24", "screen": "申込一覧", "ids": targets[n:n + 50]}, ensure_ascii=False))
# 1) ログを見ずに「保持している範囲」で数えた最大範囲
max_scope = [r for r, v in RECORDS.items() if v["channel"] != "web"]
print("最大範囲(Web以外の経路の申込すべて):", len(max_scope), "件")
print(" サービス別:", dict(Counter(RECORDS[r]["service"] for r in max_scope)))
# 2) 不正な通信元のセッションを特定し、そのセッションが表示・出力した申込と項目だけを数える
bad_src = {"203.0.113.24"}
bad_sessions = {e["session"] for e in map(json.loads, log_lines) if e["src"] in bad_src}
touched, fields = set(), set()
for e in map(json.loads, log_lines):
if e["session"] in bad_sessions:
touched.update(e["ids"])
fields.update(SCREEN_FIELDS[e["screen"]])
print("ログで確定した範囲:", len(touched), "件 / セッション:", sorted(bad_sessions))
print(" サービス別:", dict(Counter(RECORDS[r]["service"] for r in touched)))
print(" 表示された項目:", [f for f in SCREEN_FIELDS["申込詳細"] if f in fields])
print(" 表示されていない項目:", [f for f in SCREEN_FIELDS["申込詳細"] if f not in fields])
Python 3.14.7の実行結果:ログ精査で最大39,957件から1,250件へ
最大範囲(Web以外の経路の申込すべて): 39957 件
サービス別: {'光': 24091, 'MAX光': 8024, 'auひかりプラス': 7842}
ログで確定した範囲: 1250 件 / セッション: ['s-x91']
サービス別: {'光': 1250}
表示された項目: ['会員ID', '氏名', '性別', '生年月日', '住所', '電話番号']
表示されていない項目: ['メールアドレス']
1行目は、ログを見ずにシステムが持つ範囲で数えた最大範囲です。Web以外の経路の申込が3サービス分すべて入り、39,957件になりました。ログで不正なセッションを特定して数え直すと、範囲は1,250件、サービスは1つに絞れます。そのセッションが開いたのは申込一覧の画面だけなので、一覧に出ないメールアドレスは「表示されていない項目」に分かれました。
この絞り込みが成り立つのは、ログに「どの画面で、どの申込番号を表示したか」が残っている場合だけです。ログが「誰がいつログインしたか」までしか無ければ、ログイン後に何を見られたかは分からず、確報も最大範囲のまま出すことになります。通知や問い合わせの対応も、その件数で準備しなければなりません。
絞り込みに要る監査ログの4項目と、改ざんされない場所への保管
管理用ツールの監査ログに入れておく項目は、次の4つです。
- 利用者ID(共有アカウントを使わず、1人1つ)
- 接続元のIPアドレスとセッションID
- 開いた画面と操作の種類(表示・検索・CSV出力など)
- 表示または出力した申込の番号
4つめが抜けやすい項目です。一覧画面やCSV出力では1回の操作で数十〜数千件が出るため、番号の配列をそのまま記録します。ログはツールと同じサーバーに置くと侵入者に消されるので、別の保管先へ転送する設計が必要です。NIST SP 800-92はログの生成から保管・保護までを含むログ管理の進め方を示した文書で、実装の例はFluentdで監査ログ基盤を作る記事に、残ったログから痕跡を探す手順は不正アクセスの調べ方にまとめています。
申込情報の管理用ツールを持つ事業者が点検する4項目と作り込みが過剰な場面
社外から入力する管理画面を持つ事業者が今週中に確かめる4項目
判断は言い切れます。販売や受付の窓口から申込を入力させる管理画面を自社で持っているなら、次の4つを今週中に確かめてください。
- ログイン画面がインターネットから誰でも開ける状態になっていないか
- 社外の利用者を含めて多要素認証が必須になっているか
- 共有アカウントが残っていないか
- 監査ログに、表示・出力した申込の番号まで残っているか
1と2のどちらかが欠けていれば、パスワード1つで外部から全件に届きます。4が欠けていれば、事故が起きたときに範囲を絞れず、最大範囲の件数で報告と通知をすることになります。外から触れられる入口が残っていないかは、実際に攻撃者の立場で確かめるのが確実です。社内で判断がつかない場合は、脆弱性診断・セキュリティ診断で管理画面の入口とログの点検から相談を受け付けています。
SaaSの管理画面だけを使う小規模事業者で作り込みが過剰になる場面
申込や顧客の管理を外部のSaaSに任せ、自社で管理画面を持っていない場合、ログ基盤を自前で作る必要はありません。確かめるのは、SaaSの管理画面で多要素認証を必須にしているか、操作ログを何日分、どの項目まで保存できるかの2点です。保存期間が短いプランなら、ログを定期的に書き出す設定だけで足ります。対策の全体像はIPA・JPCERTの注意喚起に沿った不正アクセス対策で確認できます。
よくある質問
ニフティの回線申込・受付管理システムへの不正アクセスについて、@nifty会員から出やすい質問をまとめました。
自分が対象かどうか確認する方法はありますか?
10月21日時点で、会員が自分で対象かを調べる照会ページは案内されていません。対象の条件は、2019年以降に@nifty光を申し込み、かつニフティのWebサイト以外から申し込んだことです。条件に当てはまるか分からない場合は、@nifty専用ダイヤル(0120-924-719、毎日10時〜18時)に問い合わせてください。電話番号は、SMSやメールに書かれたものではなく、公式発表に載っている番号を使います。
ニフティを名乗る電話やSMSが届きました。本物ですか?
ニフティは、メールや電話で暗証番号、パスワード、クレジットカード情報を尋ねることは無いとしています。これらを聞かれたら偽物と判断して切ってください。SMSやメールのURLは開かず、個人情報も入力しません。会員IDや氏名、住所を言い当てられても、それらはすでに漏れた可能性がある情報なので、本物の証明にはなりません。
メールアドレスは漏れていますか?
第一報ではメールアドレスも漏えいの可能性がある項目に入っていましたが、10月21日の第二報で「漏えい対象でないことを確認いたしました」とされました。対象の項目は、会員ID、氏名、性別、生年月日、住所、電話番号の6つです。なお、2026年6月に公表されたKDDI系メールシステムの件では、@niftyのメールアドレスが漏えいしています。こちらは別の事案です。
@niftyのパスワードは変えたほうがいいですか?
パスワードは今回のシステムに保有されておらず、漏えいの対象ではありません。ニフティも変更を求めていません。ただし、生年月日や電話番号をパスワードや秘密の質問に使っているなら、変えておくと安心です。変更は、SMSやメールのリンクからではなく、自分で開いた@niftyの会員ページから行ってください。
問い合わせ先はどこですか?補償はありますか?
窓口は@nifty専用ダイヤルで、電話番号は0120-924-719、受付は毎日10時から18時までです。補償やお詫びの品について、10月21日時点の発表に記載はありません。補償を名目に、振込やカード番号の入力を求める連絡には応じないでください。新しい情報はニフティのニュースリリースで公表されます。
関連記事
- KDDI系メール漏えい:BIGLOBE・@niftyの「システムアップグレードに伴う本人確認のお願い」と電話は本物か:2026年6月に@niftyのメールアドレスが漏えいした別の事案
- 焼肉きんぐ不正アクセスで1,078万件の情報漏洩|対象の確認方法・原因と運営側のAPI点検:全件に近い取得をログで検知するSQL
- API不正アクセス対策の実装手順:JPCERT注意喚起に沿うレート制限・認可・トークン失効:管理画面の裏で動くAPIの対策
- 個人情報保護委員会への報告義務|対象4類型・速報3〜5日と確報30日の実務:速報と確報で何を報告するか
- 不正アクセス対策とは:IPA・JPCERTの2026年10月注意喚起に沿った企業の点検手順:運営者として点検する範囲の全体像