SAMLの認証で「反射攻撃を受ける可能性があります」エラーが表示される場合の対応

SAMLによるログイン処理は、ColdFusion 2021で追加されたProcessSAMLResponse関数で行います。この関数は、SAMLのIDPにログイン処理を開始して、その応答を受け取るページで使用します。

そのIDPのログイン処理を経由せず、直接ProcessSAMLResponse関数を呼び出した場合、「このリクエストに関連するログイン情報またはログアウト情報がないので、反射攻撃を受ける可能性があります。」エラーが発生します。

しかし、IDPにログイン処理を開始して、その応答を受け取る処理を行っているにも関わらずこのエラーが発生する場合があります。それは、ブラウザ側でSAML認証の入力・選択のダイヤログボックスが表示された際に、そのままの状態でしばらく放置した時です(すぐに操作をすると正常に動作します)。
ダイヤログボックスを表示したままの状態でしばらく放置していると、ColdFusion側でIDPからの応答待ちのタイムアウトを起こしてしまい、結果、後からダイヤログに入力や選択の操作をしても、ColdFusion側で上記のエラーが発生することがあります。

ColdFusion側でエラーは発生したものの、ブラウザとIDPとのSAML認証処理自体は実行されるため、そのブラウザでリロードを行うと、SAML認証済の状態を受け取り、そのままSAML認証が完了するという動作にもなります

ですので、SAML認証を実装する場合は、ダイヤログボックスが表示された際のユーザーの入力や選択待ちの時間を考慮する必要があります。

  • InitSAMLAuthRequest関数のlifetimeを指定して、一定時間の入力・選択待ちはエラーにならないようにする
    • 例:lifetime="600" を指定すると、10分間は応答待ちの状態になります
       
  • cftry~cfcatchでエラーをハンドリングし、再びSAML認証の処理ページにcflocationでリダイレクトするようなリカバリ動作を追加する
    • ただし、別の障害によってProcessSAMLResponseがエラーになる可能性も考慮しないと、エラー処理が無限ループする恐れがあります。ですので、cfcatchのエラー処理の中でSession変数などでフラグを立てて何度も同じ処理がループしないようにハンドリングするなどを合わせて行ってください

 


記事公開日:2022年03月30日
最終更新日:2022年03月31日


x

Sample Modal Window

This is just a sample…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.

Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.