世界を動かす技術を、日本語で。

マイクロソフトによる example.com の不適切な取り扱い

概要

  • Microsoft Autodiscover サービスの設定ミスにより、 example.com ドメインが誤って Sumitomo Electric Industries のメールサーバーにルーティングされている問題
  • Outlook でダミーアカウントを設定すると、IANA予約ドメインにも関わらず実在サーバー情報が自動入力される現象
  • DNS側には関連レコードが存在せず、 Microsoftの内部データベース のみで発生している構成ミス
  • この問題は 2020年2月から少なくとも6年間 継続
  • テスト用認証情報 が意図せず外部サーバーへ送信されるリスク

Microsoft Autodiscoverによるexample.com誤ルーティング問題

  • Outlookemail@example.com のようなダミーアカウントを設定時、IMAP/SMTPサーバーとして imapgms.jnet.sei.co.jp および smtpgms.jnet.sei.co.jp が自動入力される現象
  • example.comIANA により予約されており、実際のサービスに解決されるべきでないドメイン
  • 複数のPC・ネットワーク・DNS環境で同様の挙動を確認
  • Windows 365 Cloud PC でも再現性あり

DNS検証結果

  • MX・CNAME・SRVレコード を確認するも、sei.co.jp への関連レコードは一切存在しない
  • example.com の MXレコードはnull (メール受信不可設定)
  • Autodiscover関連DNSレコードも未設定

Autodiscover APIレスポンス

  • curl等で prod.autodetect.outlook.cloud.microsoft にリクエストすると、IMAP/SMTPサーバーとして sei.co.jp 側のホスト情報が返却される
  • レスポンスJSON例:
    • imap: imapgms.jnet.sei.co.jp:993
    • smtp: smtpgms.jnet.sei.co.jp:465
    • username: email@example.com
    • validated: false(認証未検証)

デバッグヘッダ情報(x-debug-support)

  • Provider ID: seeatest
  • 登録日: 2020-02-03
  • 更新日: 2020-02-03
  • IsCrowdsourced: false(手動登録)
  • この誤設定は クラウドソース由来ではなく、手動でMicrosoftデータベースに追加されたもの と推測

セキュリティ・運用上のリスク

  • テストや検証用に入力した 認証情報が第三者サーバーへ送信される可能性
  • Outlook の自動設定機能利用時、意図しない外部サーバーへのアクセス・情報漏洩リスク
  • 6年以上 修正されていない長期的な構成ミス

関連情報・参考文献

総括

  • Microsoft Autodiscover の内部データベースにおける手動設定ミスが原因で、 example.com 利用時にSumitomo Electric Industriesのサーバー情報が自動適用される構成不備
  • テストや開発用途で example.com を利用する運用者は、 認証情報流出リスク に注意が必要
  • 今後の修正・情報公開が求められるセキュリティ課題

Hackerたちの意見

驚かないよ。以前、Active Directoryの領域用にプロフェッショナルに.localをTLDとして使うように促すトレーニング資料があったんだ。これはマルチキャストDNS用に予約されたドメインなんだよね。Linuxの自動化システムを扱っていると、イメージ内のAvahi関連のものを無効にしないと、名前解決ができなくなることがあるから注意が必要だった。

うちの会社はすべてに.localを使ってたんだ。その時は普通だと思ってたけど、VMWARE製品で問題が起きてからは違うって気づいた。サポートが根気よく.localは他の目的のために予約されてるって説明してくれて、Wikipediaのリンクも教えてくれたけど、彼らがドキュメントやトレーニング、ウェビナーで.localを使ってた理由には一切答えてくれなかったよ :)

それって、予約される前から人にそうするように言ってたんじゃない?そうだとしたら、広く使われているものを「予約」できないっていうのが問題だよね。mdnsは.mdnsみたいな別のものを使うべきだった。.devがgTLDになったときみたいに、見栄と金儲けのために多くの設定を壊してしまったんだ。エンジニアリングの面では明らかにミスったね。

.localの使用はADよりもmDNSの前からあったんだよね。そのアドバイスはmDNSが登場してから「corp..」に変わった。

だから、.testや.example、.invalid、.localhostみたいなIANA予約ドメインは絶対使わないんだ。いつもドメイン.tmptestみたいなあり得ないドメインを考えるよ。そうじゃないと、DNSの「設定ミス」で開発ログや認証トークンがランダムなサーバーに送信される危険があるからね。 > 2020年2月以降、MicrosoftのAutodiscoverサービスがIANA予約のexample.comを住友電気工業のメールサーバー(sei.co.jp)に誤ってルーティングして、テスト用の認証情報がそこに送信される可能性があるんだ。

.exampleはexample.comよりずっと安全だと思うよ。https://www.akamai.com/blog/security/autodiscovering-the-gre... それによると、もし誰かがautodiscover.comを登録したら、autodiscover.example.comがないexample.comはOutlookがautodiscover.comにエントリーがあるか確認しようとするみたい。ほんとに頭の悪いシステムだよね。

楽しいことばかりじゃないよ、ドーナツが.tmptestを買ったりしたらどうするんだろうね。

ちょっと待って、.tmptestのgTLD申請の書類を出してくるね /s

それって本当にこの場合に影響あるのかな?これはマイクロソフトの発見サーバーの設定ミスやバグだし、「不明なアドレスにはこの.jpアドレスを返す」みたいなフォールバックがあってもいいと思うんだけど。

まあ、この特定のケースでは明らかに悪い選択が悪化させてないってだけで、それが良い選択だとは限らないよね。「ああ、欠陥トラックは高速でハンドルを握っている人にだけ怪我をさせるけど、俺は高速でハンドルを握ることなんて気にしないから、YOLOで大丈夫」みたいな感じ。もし人々がIANAの予約済みTLDを使っていたら、Windowsが例えばautodiscover.exampleに接続しようとしてもポリシー上存在しないから、試みは常に失敗するから影響を受けなかったはず。

それで100k通のメールを送信したら、全部バウンスして、メールサービスが停止されるんだ…

他の人も指摘してるけど、'tmptest'を使うのは、誰かがtmptestを買うまで有効だよね。まあ、あり得ないけど、最近は何でも売れるからね。俺はいつもISO-3166の「ユーザー指定」の2文字コード(AA, QM-QZ, XA-XZ, ZZ)を使ってる。ISO-3166メンテナンス機関がそのコードを通常の国コードに戻すための国際的合意を得るのに、宇宙の熱的死よりも時間がかかるだろうって理論だから、内部ドメインに使うのは多分安全だと思う。

だからexample.comには「運用での使用を避けること」って書いてあるんだよ。そうすることで、不要なトラフィックを生むだけじゃなく、こういう状況で情報が漏れる可能性もあるからね。

うん、意図的に使うっていうよりは、安全ネットみたいな感じだね。

なんで彼らのAutodiscover APIを使うときにパスワードを送る必要があるの?Outlookは各メールアカウントのパスワードをMicrosoftに送信するの?

彼らはログインしてIMAPの設定を逆解析しようとしてるんじゃないかな。

curl -uはフィールドがあるだけでいいと思う。認証は行われないから、どんなパスワードを送っても出力は変わらないよ。

MicrosoftのAutodiscoverサービスの設定ミスは、curl -v -u "email@example.com:password" "https://prod.autodetect.outlook.cloud.microsoft/autodetect/d..." で確認できるよ。ちょっと待って、彼らの自動検出はドメインだけじゃなくて、メールとパスワードをサーバーに送信するの?

同じような質問への返信をここで見てみて(まだ見てなかったらね): https://news.ycombinator.com/item?id=46732623

MicrosoftのAutodiscoverサービスの設定ミスは、curl -v -u "email@example.com:password" "https://prod.autodetect.outlook.cloud.microsoft/autodetect/d..." で確認できるよ:ちょっと待って、これってOutlookアカウントを設定しようとするときに、あなたの全認証情報をMicrosoftに送信するってこと?彼らはきっとあなたの認証情報を安全に保つって約束してるだろうけど、これはセキュリティやプライバシーの期待を完全に壊してる気がする。

思ってるより一般的だよ。少なくとも、マルチアカウント同期やスケジュール送信の機能を実現するために、認証情報をサーバーに保存する人気のメールクライアントを知ってる。

今のOutlookって、ほぼSaaS製品みたいなもんだよね。

そうだね、誰も気にしてないと思う。何年も前に、スマホにファイアウォールをインストールした時、Outlookが自分のプライベートメールサーバーに全然接続できてなくて、代わりに自分の認証情報をクラウドに送って、そこからメッセージをダウンロードしてるのに驚いたのを覚えてる。あの頃、ランダムにクラウドサーバーにアクセスしないAndroidのメールクライアントはK-9 Mailだけだった。

そうだね、Windows 11の2023h2アップデート以降だよ。

それだけじゃなくて、新しいOutlookアプリはMicrosoftをあなたのメールアカウントの完全な中間者にしちゃうよ。https://www.xda-developers.com/privacy-implications-new-micr...

基本的に、マイクロソフトが作るHTTPに関わるものは、基本認証を要求するサーバーにあなたのユーザー名とパスワードを送信するんだ。Microsoft Edgeには2020年か2021年にこれを無効にする機能が追加されたみたいだけど、今はデフォルトじゃないし、グループポリシーも直感的じゃなくて、暗号化されていないHTTP接続にしか適用されないんだよね。

ちょっと待って、これってOutlookアカウントを設定しようとすると、Microsoftにフルクレデンシャルを送信するってこと?「Outlookアカウント」だけじゃなくて、Outlookのデフォルト設定であればどのアカウントでも。俺はメールサーバーを運営してて、自分用がメインだけど、友達も何人かアカウント持ってるんだ。で、少し前に友達がロックアウトされたって報告してきて、原因はOutlookのバージョンを切り替えたせいで、ホワイトリストが期待してたアドレスとは全然違うアドレスに接続してたことが判明したんだ。しかも、その時はOutlookを使ってなかったのに。アクティブな接続はその友達の操作がプロキシされてたせいだし、IMAPのクレデンシャルも保存されてたから、MSサーバーが好きな時にログインしてチェックできる状態だった(多分、意図されてるのは、メールを使ってない時でもスマホやデスクトップに新着メールの通知を送れるってことだと思う)。> でも、これはセキュリティやプライバシーの期待を壊してる気がする。確かにそうだね。この挙動はある程度抑えられるけど(最近の変更がなければ)、新しいOutlookのバージョンではデフォルトで完全に有効になってる。上記の友達は、俺が「MSが運営するどんなホストにもホワイトリストを開放したくない」って言ったから、急いで他のサービスにメールを移行したんだ。彼は「ローカル接続のみ、クレデンシャルをどこかに送信しない」っていう以前の挙動に戻す方法を探りたくなかったみたい。

ずっとそうだったよね。

curl -uスイッチはパスワードフィールドが埋まってればいいだけだと思うけど、test@example.comっていう正当なユーザーアカウントはMicrosoftにも日本のIMAPサーバーにも存在しないよね。

sei.co.jpってどこから来たの?なんでマイクロソフトがそのドメインを使うの?

ドメイン自体じゃなくて、MS Office Cloudでの登録が問題なんだよね。example.comのメールの所有者を調べると、その会社が出てくる。

彼らが最初にexample.comをOutlookアカウントに追加しようとしたユーザーだったんじゃないかな。で、マイクロソフトがそのドメインの所有を確認せずに割り当てちゃったんだと思う。

これって「example.com」とはあんまり関係なくて、自動発見サブドメインがないドメインの話だよね。

ドメインにはnull MXレコードがある(メールを受け付けないことを示している) それはちょっと違うよ。MXがない場合、SMTPはAレコードを使うから。

この場合、「null MXレコード」っていうのはMXは存在するけど、有効なサーバーを指定してないってことだよ:$ host -t mx example.com 例として、メールは0で処理される。送信者はこの場合、Aレコードにフォールバックしちゃダメだよ。

ただの推測だけど、sei.co.jpをAzure Entra(いわゆるAzure AD)で設定した人が、どうにかして「example.com」ってドメインを自分のテナントに追加したんじゃないかな。DNSレコードを使って発見してるわけじゃないし、存在しないからね。他に考えられるのは、変なフォールスルーかハードコーディングされた値だけど、それにしても選ぶのは変だよね。