Dark Reading

Darkreadingは5月9日(現地時間)、「PHP Hash Comparison Weakness A Threat To Websites, Researcher Says」において、WhiteHatの研究者であるRobert Hansen氏が、特定の条件下においてPHPで記述された認証コードが回避される危険性があると指摘していることを紹介した。この問題は以前から知られているが、具体的に該当する数字のサンプルが掲載されている点、問題が発生するための確率が示されている点が興味深い。

PHPでは比較に==または!=を使った場合、比較対象が0eから始まりそこに数字が続いている場合は、その値を0として処理するという特徴がある(この表記は0の累乗を意味)。このため、パスワードが数字で構成されており、かつ、その数字をハッシュ化した場合にハッシュ値が0eで始まっている場合、そのパスワードは0として評価されることになる。

つまり、たとえ異なる数値で構成されたパスワードだったとしても、==または!=でそのハッシュ値を比較するコードになっている場合、それらは0として処理されるため同じパスワードであると評価されることになる。今回、Robert氏はそうした問題が発生する数字の例を具体的に紹介しているという。この問題を回避する方法も示されており、比較に==または!=ではなく、それぞれ===または!==を使って比較すればよいとのことだ。