Microsoft Exchange Autodiscover のバグにより 10万件の Windows 認証情報が流出

Microsoft Exchange Autodiscover bugs leak 100K Windows credentials

2021/09/22 BleepingComputer — Microsoft Exchange の Autodiscover 機能実装におけるバグにより、世界中の Windows ドメインの約10万件のログイン名/パスワードが流出した。Guardicore の AVP of Security Research である Amit Serper のレポートによると、Microsoft Exchange のバグではなく、Autodiscover プロトコルの誤った実装が原因であり、Windows の認証情報が信頼できない第三者の Web サイトに送信されていることが明らかになったとのことだ。

この問題の本質に触れる前に、Microsoft Exchange の Autodiscover プロトコルと、その実装方法について簡単に説明する。

Microsoft Exchange の Autodiscover とは?

Microsoft Exchange では、Autodiscover 機能を用いて、Microsoft Outlook などのメール・クライアントを、組織の定義済みメール設定を用いて自動的にコンフィグレーションする。Exchange ユーザーが、Microsoft Outlook などのメール・クライアントに電子メールアドレスとパスワードを入力すると、メール・クライアントは各種の Exchange Autodiscover URL に対して認証を試みる。

この認証プロセスでは、ログイン名とパスワードが、自動的に Autodiscover URL に送信される。接続される Autodiscover URL は、クライアントで構成された電子メールアドレスから導き出される。たとえば、Amit Serper が amit@example.com という電子メールを使ってAutodiscover 機能をテストしたところ、メール・クライアントが、以下の Autodiscover URL に認証しようとすることが分かった。

・https://Autodiscover.example.com/Autodiscover/Autodiscover.xml
・http://Autodiscover.example.com/Autodiscover/Autodiscover.xml
・https://example.com/Autodiscover/Autodiscover.xml
・http://example.com/Autodiscover/Autodiscover.xml

このメール・クライアントは、Microsoft Exchange サーバーとの認証に成功し、コンフィグレーション情報がクライアントに送り返されるまで、各 URL を試行していた。

外部ドメインへの認証情報の漏洩

クライアントが上記の URL で認証できなかった場合、Microsoft Outlook を含む一部のメール・クライアントが Back-Off プロシージャを実行することを、Serper は発見した。このプロシージャでは、autodiscover.[tld]ドメイン (TLDはユーザーの電子メールアドレスに由来) など、認証先となる追加の URL を作成しようとする。

このケースでは、生成された URL は以下となる。

・http://Autodiscover.com/Autodiscover/Autodiscover.xml。

Autodiscover プロトコルの、この不適切な実装により、メール・クライアントはautodiscover.com などの信頼できないドメインに対して認証を行うが、ここに問題の始まりがある。メールユーザーが所属する組織が、このドメインを所有しておらず、認証情報が自動的に URL に送信されるため、このドメインの所有者は、送られてきた認証情報を収集できてしまう。それを確認するために、Guardicore は以下のドメインを登録し、それぞれに Web サーバを設置し、どれだけの認証情報が Microsoft Exchange の Autodiscover 機能から漏れるかを調べた。

• Autodiscover.com.br – Brazil
• Autodiscover.com.cn – China
• Autodiscover.com.co – Columbia
• Autodiscover.es – Spain
• Autodiscover.fr – France
• Autodiscover.in – India
• Autodiscover.it – Italy
• Autodiscover.sg – Singapore
• Autodiscover.uk – United Kingdom
• Autodiscover.xyz
• Autodiscover.online
• Autodiscover.online

これらのドメインが登録され使用された後に、Microsoft Outlook を含む電子メール・クライアントが、多くのアカウント認証情報を Basic 認証を使用して送信し、容易に閲覧できる状態になっていることを、Serper は発見した。NTLM や Oauth を使用して認証情報を送信する Microsoft Outlook クライアントに対して、Serper は The ol’s switcheroo と呼ばれる攻撃を仕掛け、クライアントのリクエストを Basic 認証に格下げさせた。これにより、再び、ユーザーの平文パスワードへのアクセスが可能になる。

2021年4月20日〜2021年8月25日の間に、これらのテストを行ったところ Guardicoreのサーバーが受け取ったものは、以下のようになった。

• 648,976 HTTP requests targeting their Autodiscover domains.
• 372,072 Basic authentication requests.
• 96,671 unique pre-authenticated requests.
Guardicore says the domains that sent their credentials include:
• Publicly traded companies in the Chinese market
• Food manufacturers
• Investment banks
• Power plants
• Power delivery
• Real estate
• Shipping and logistics
• Fashion and Jewelry

Microsoft Exchange Autodiscover リークを軽減するには

Serper は、Microsoft Exchange Autodiscover による漏洩を軽減するために、組織や開発者が利用できる、いくつかの提案を行っている。Microsoft Exchange を使用している組織では、ファイアウォールまたは DNS サーバーで、すべての Autodiscover.[tld] ドメインをブロックして、デバイスが接続できないようにする必要がある。Guardicore では、アクセス・ルールの作成に使用できる、すべての Autodiscover ドメインを含むテキスト・ファイルを作成している。また、Basic 認証は基本的に認証情報を平文で送信するため、これを無効にすることを推奨する。

ソフトウェア開発者に対しては、メール・クライアントが Autodiscover.tld ドメインに接続しないよう、Autodiscover の URLを作成する際に、upwards で失敗しないようにすることだ。信頼できない autodiscover.[tld] ドメインに戻ってしまう理由は謎のままであり、Microsoft Autodiscover プロトコルのドキュメントには、これらのドメインについての記述がない。

Serperは、「多くの開発者は、同じ問題を抱えたサードパーティのライブラリを使用している。そして、大多数の開発者は、この問題に気づいていないだろう」と BleepingComputer に語っている。BleepingComputer では、このレポートについて Microsoftに質問をしているが、回答は得られていない。

文中にある「Back-Off プロシージャが実行され、認証先となる追加の URL を作成しようとする」という点が問題なのでしょうか?Back-Off の意味は、「後ずさり」とか「撤退」なので、URL を作成するというのは問題ですよね?そして、作成された URL の所有者に、認証情報が送られてしまうようです。Microsoft の Web には Autodiscover について、「自動検出 サービスにより、クライアントは、Exchange の機能にアクセスにできるようになり、ユーザーによる構成手順と展開手順は最小限に抑えられます。Exchange Web サービス (EWS) クライアントの場合、通常、自動検出 は EWS エンドポイント URL を見つけるために使用されます」と記されています。

%d bloggers like this: