SAML(セキュリティアサーションマークアップ言語)で重大な脆弱性が発見されました。
認証をバイパスできます。 脆弱性は、さまざまなSSOプロバイダーのソリューションおよびSAML SSO(シングルサインオン)を使用するいくつかのライブラリの影響を受けます。
セキュリティアサーションマークアップ言語(SAML)は、プロセスパーティ間で認証および承認データを交換するためのオープンなXMLベースの標準です。 SAMLプロトコルを使用すると、ユーザーは1つのユーザー名とパスワードで多くのクラウドアプリケーションにアクセスできます。 シングルサインオン(SSO)は、サードパーティのWebアプリケーションとして「サードパーティ」を介してWebアプリケーションにログインできるようにする一般的な技術です。
この実装では、攻撃者がユーザー名フィールド内にコメントを入力できるエラーが存在します。唯一の条件は有効なユーザー名の存在です。
問題は、XMLマークアップのコメント処理方法にあります。 ユーザー名フィールドにコメントコードを配置すると、改行が発生します。 ユーザー名を処理するとき、プリプロセッサはコメントフィールドの後の値を「切り捨て」、チェック時に考慮しません。
import xml.etree.ElementTree as et doc = "<NameID>test<!-- comment -->user</NameID>" data = et.fromstring(payload) return data.text # returns 'testuser'
期待される値は「testuser」ですが、「break」の後には「test」の値のみが返されます。
user@user.com.evil.comアカウントにアクセスできるユーザーによるこの攻撃の実装例では、SP処理中にSAMLを変更してNameIDをuser@user.comに置き換えることができます。
<SAMLResponse> <Issuer>https://idp.com/</Issuer> <Assertion ID="_id1234"> <Subject> <NameID>user@user.com<!---->.evil.com</NameID> </Subject> </Assertion> <Signature> <SignedInfo> <CanonicalizationMethod Algorithm="xml-c14n11"/> <Reference URI="#_id1234"/> </SignedInfo> <SignatureValue> some base64 data that represents the signature of the assertion </SignatureValue> </Signature> </SAMLResponse>
次のソリューションは、この攻撃の影響を受けます。
- OneLogin-python-saml-CVE-2017-11427
- OneLogin-ruby-saml-CVE-2017-11428
- 賢い-saml2-js-CVE-2017-11429
- OmniAuth-SAML-CVE-2017-11430
- Shibboleth-CVE-2018-0489
- Duoネットワークゲートウェイ-CVE-2018-7340
2要素認証(Googleの統計によると、ユーザーの10%に含まれています)で保護されているアカウントに対しては攻撃が機能しないことに注意してください。
このような攻撃を防ぐには、使用するライブラリを更新するか、重要なネットワークのユーザーアカウントのパブリック登録を無効にするか、コメントをスキップしない正規化アルゴリズムを放棄する必要があります。