エンジニアブログ

エンジニアブログ
MT技術情報

MovableType のパスワードは最初の8文字しか認識しません

ぴろり上西 2011年02月01日

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なので、英数大文字小文字、記号を入り交えて設定されることを強くオススメします。