evil.example.comは、非表示のフレームを使用して、corporation.example.netにCASチケットを要求し、それを検証して、不幸なユーザーのユーザー名を受け取ることができます。これにより、CASユーザーはアクセスする悪意のあるサイトに匿名化されます。
CAS(中央認証サービス) は、リダイレクトベースのフローを備えたシングルサインオンシステムです。
service
パラメータを使用してCASサーバーにリダイレクトします。service
パラメータが追加されたticket
URLにリダイレクトします。corporation.example.net
のCASサーバーで認証されており、ブラウザーにはそのドメインのチケット許可Cookieがあります。http://evil.example.com/dancing-bunnies.html
にアクセスすると、http://corporation.example.net/cas/login?service=http://evil.example.com/attack.html
がフレームとして埋め込まれます。 (フレーミングはリダイレクトよりも目立ちません-セキュリティの違いはありません。)/login
エンドポイントは、ユーザーエージェントがすでにログインCookieを保持していることを認識しているので、サービスURLとチケットに盲目的にリダイレクトします:http://evil.example.com/attack.html?ticket=ST-abc123
evil.example.com
はクエリ文字列からチケットを読み取り、http://corporation.example.net/cas/validate?service=http://evil.example.com/attack.html&ticket=ST-abc123
を取得してyes\nalice\n
で応答します。evil.example.com
は、ユーザーがalice
@ corporation.example.net
であることを認識しました。service
パラメータURLのドメインを既知の安全なセットに制限するこれらのいずれかの欠点はありますか?他の解決策はありますか?
service
パラメーターを一連の既知の安全なURLの文字列一致に制限することは、リダイレクトプロセスを通じて状態を伝えるためにクライアントによって使用されるため、おそらく実用的ではありません。ここに記載されているように、CAS 3にはサービスホワイトリストの拡張ポイントがあるようです https://wiki.jasig.org/display/CAS/well-known+modifications
メモで述べたように、これはあなたの懸念を解決し、あなたが利用できるはずです。
免責事項:CASはわかりませんが、CASの機能と仕組みを理解したと思います。
企業のWebサイトにフレーム無効化ヘッダーがない場合でも、攻撃シナリオはこの方法では不可能です。これらのフレーム無効化ヘッダーはクリックジャッキングを回避するためのものですが、それは別のトピックです。
フレームがリダイレクトを行う場合、フレームのコンテンツのみがリダイレクトされます。
悪意のあるサイトは別のサイトにあるため、埋め込まれたフレームのすべて(URLでさえも)にアクセスできません。可能であれば、そのようなシナリオは可能ですが、すべての最新のブラウザーは(IE4以降だと思いますが)クロスサイトアクセスを許可しないため、悪意のあるサイトは新しいURLにアクセスできず、IFRAMEの識別されたユーザーにアクセスできません。
ユーザーは常にログアウトすることで身を守ることができ、疑わしいサイトが許可を求めた場合は認証しないでください。
このシナリオの良い例はFacebookです。多くのサイトがFacebookのコメント機能やその他のものを組み込んでいます。ただし、ユーザー名は取得されません。どういうわけかFacebookユーザー名を取得できる場合(Facebookユーザーはめったにログオフしない)、これは大きなセキュリティホールになります。バグ報奨金を取得する方法、またはログオンしてユーザーの名前で投稿または投票する方法が見つかった場合は、申請することができます。
それは良い質問です。ただし、CASプロトコルについての私の理解は、/ serviceValidate URIを呼び出すと、CASはリクエストパラメータから取得したサービスチケットがサービスレジストリで使用可能かどうかをチェックし、さらにサービスが登録済みサービス。
あなたの例では、evil.example.comは登録されないため、CASサーバーが不正なサービス例外をスローするため、ユーザーIDを取得できません;).