MovableType のパスワードは最初の8文字しか認識しません
Amazon のパスワードを長い間変えていない人は、とりあえず今すぐ変えましょう!
Amazonのセキュリティの欠陥は、パスワードの8文字以降を認識しないというものだそうです。
例えば、パスワードが「password1234567890」でも「passwordpizza」でも、最初の8文字が「password」で同じなので、同じものと認証されてしまうとのこと。
それ何て crypt 関数? と思いましたが、Amazon が Perl で構築されているという話もあるので、あながち間違っていないのかも知れません。
どういうことかというと、Web サービスなどでは、サービス側がユーザのパスワードを平文でそのまま保持せず、何らかの暗号化(一方向関数とかいろいろあるんだけれど、ここでは暗号化と呼びます)を施した上で、パスワードを保存するのが普通の設計です。そうしないと、万が一顧客情報が漏れたりした時に、パスワードが丸見えだと不正ログインされてしまいますからね。その暗号化の処理において、Perl で使われているのが crypt という関数なんです。
ところが、この crypt 関数には、入力されたデータの最初の 8 文字しか使わない、という変な仕様(?)があります。そのため、どれだけ長いパスワードを使っていても、上記の記事のようにパスワードの 9 文字以降が無視されてしまうのです。サービス内部の実装によっては、長いパスワードを使っているから安心、というわけではないのです。
さてさて、ここからが MovableType のお話になるわけですが。実は MovableType も、パスワードの暗号化処理には crypt 関数を使っています。...嫌な予感がしますね。ソースコードを見ると、素直に上記の処理がコーディングされています。早速、実験してみましょう。使ったのは最新の MovableType 5.04 です。
まず、適当にユーザーを作成し、パスワードを「password123」に設定します。ここで、パスワードは全部で 11 文字ありますね? 一度、ログアウトしたら、ログインし直してみましょう。
パスワード | ログイン |
---|---|
password123 | 成功。まぁ当たり前。 |
pass | 失敗。まぁ当たり前。 |
password1234567890 | 成功。あれ!? |
passwordhogehoge | 成功。あれれ!?? |
password | 成功。あれれれ!??? |
...とまぁ、なかなか香ばしい結果になってしまいました。というわけで、MovableType でもパスワードは入力された最初の 8 文字しか認識しないということがわかりました。セキュリティ要件の厳しいお客様だと、問題になったりしませんかね? 何らかの対策がされることに期待したいところです。とりあえず、パスワードは 8 文字の範囲内でOKなので、英数大文字小文字、記号を入り交えて設定されることを強くオススメします。