先日 Office 365 のこんな記事見つけたので、一応まとめておきますかね。
The road to hell is paved with SAML Assertions
タイトルだけ見るとまた SAML is DEAD 案件かと思いきや、Office 365 の脆弱性の話です。
SAML 悪く無いです。
SAML isn’t vulnerable, just DEAD.
SAML SP としての Office 365
Office 365 は SAML Service Provider (SP) として動作するので、みなさんがお持ちの Identity Provider (IdP) を SAML IdP として動作することができれば、みなさんの IdP に登録されてるアカウントを使って Office 365 にログインすることができます。
みなさんの社内の ADFS とか、Ping Federate / Okta / OneLogin … みたいな IDaaS とか、そういうのは大抵 SAML IdP として動作するので、そういう製品を使ってるなら、みなさんの会社のアカウントでそのまま Office 365 にログインできます。
通常 SAML SP は、IdP から返ってくる SAML Response に含まれる IdP 側のユーザー識別子 (Subject Identifier) と IdP 自身の識別子 (Issuer Identifier) のペアを元に、SP 側のアカウントにログインさせます。
がしかし、Office 365 の場合は、IdP が渡してくる Email アドレスと Office 365 がローカルで持ってる Email アドレスの一致だけを見て Office 365 ローカルのユーザーを認証していたようです。Subject Identifier も Issuer Identifier も無視していた、と。
(実際には、SAML IdP と Office 365 の間に Azure AD が介在しており、SAML Assertion の検証は Azure ADがやるようなアーキテクチャになっていて、Azure AD では Subject Identifier & Issuer Identifier をちゃんと見ているようですが、全体として見ると Office 365 が SAML IdP の Issuer と Subject をガン無視した形になってます。この辺の話しだすとややこしい割に MS 以外の人にはあまり関係無い話になっちゃうので、今回はスルー)
Office 365 の脆弱性概要
これで何が起こっていたかというと、nov@victim.example.com
という Email アドレスを持つ Office 365 ユーザーのアカウントにログインする際に、attacker.example.com
という IdP が nov@victim.example.com
という Email アドレスを含んだ SAML Assertion を発行すると、Office 365 がその Assertion を受け入れて nov@victim.example.com
の Office 365 アカウントへのログインを許可してしまっていました。
よって、以下の2つのパターンが、どちらも同じ Office 365 アカウントにログイン可能になっていました。
|
Issuer Identifier |
Subject Identifier |
Email Address |
|
attacker.example.com |
58df3c9b2c32ca86f.. |
nov@victim.example.com |
|
victim.example.com |
20166f0c077c1f6c1.. |
nov@victim.example.com |
うん、これは最悪ですね。
Read on →