l'essentiel est invisible pour les yeux

Saturday, April 26, 2008

OpenID再利用問題

ドメインの更新忘れもOpenIDにおける脆弱性の一つ。

URLやXRIを入力するだけで、Yadisプロトコルに基づきOpenIDプロバイダーやi-Brokerを発見し、認証が行えるシステムは、とてもシンプルでありながら、WWWの分散アーキテクチャの上に構築された強力なエコシステムだ。しかし、問題は、私達自身の識別子として利用可能なURLやXRIは、永遠ではないことだ。

もしも、私達が利用しているOpenIDプロバイダがドメインの更新を忘れて、第三者にドメインが取得された場合、私達のアカウントがこの第三者により不正に使用される可能性が出てくる。myOpenIDや、多くのプロバイダでは、単純なルールに基づいた、Human FriendlyなOP-Local Identifierを提供してくれているが、ユーザは、セキュリティ的、高可用性の両方の側面からRelying Partyでのユーザ登録に、OP-Local Identifierを使用すべきではない。

もう少し、現実的に起こりえそうな問題は、OpenIDプロバイダにより特定のアカウントの持ち主が変更されたケースである。初めは、Aというユーザが、a.example.comというOP-Local Identifierを保持していたが、Aが退会して同じOP-Local IdentifierがBというユーザに渡った場合、Bは、AがOP-Local Identifierを用いて会員登録したRPにサインインして登録された情報に自由にアクセスすることができる。

もう一つの問題は、自分のHPのURLを識別子として利用した場合のリスクである。この場合、自分がドメインの更新を忘れて(または意図的に)、ドメインが第三者の手に渡ると、Relying Party上に残した私達の情報が、第三者に再利用される可能性が生まれる。

どちらの問題も、OPでのアカウントのExpireや移行がRPと同期できないために発生する問題である。
既存のOpenIDライブラリ(といっても、ruby-openidしか見ていない)では、OpenID URLの変更とアクティベーションのサンプルはついていないが、RPはこの機能を用意すべきだろう。

OpenID再利用問題一つとっても認証をOpenIDのみに踏み切るには、まだまだリスクが高い。

P.S.
念のため補足すると、XRIでは再利用の問題が起きない。これは、XRIが取得される度にi-Numberと呼ばれる全世界で一意な値を割り当てるからである。XRIでは、このi-NumberがClaimed Identifier(aka XRDS::XRD::CanonicalEquivID)になるからである。

myOpenIDなどユーザのセキュリティに対して十分な対応をしているプロバイダでは、一度取得されたアカウントは、退会した後も再利用される事は無いのでここに書いた問題は発生しない。ただし、退会後のアカウントについて明記していないプロバイダは要注意である。