昨日のブログエントリ「PHP5.3.7のcrypt関数に致命的な脆弱性(Bug #55439)」にて、crypt関数の重大な脆弱性について報告しました。脆弱性の出方が近年まれに見るほどのものだったので、twitterやブクマなどを見ても、「どうしてこうなった」という疑問を多数目にしました。 そこで、このエントリでは、この脆弱性がどのように混入したのかを追ってみたいと思います。 PHPのレポジトリのログや公開されているソースの状況から、PHP5.3.7RC4までこのバグはなく、PHP5.3.7RC5でこのバグが混入した模様です。RC5はPHP5.3.7最後のRelease Candidateですから、まさに正式リリースの直前でバグが入ったことになります。 バグの入る直前のソースは、ここの関数php_md5_crypt_rから参照することができます。以下に、おおまかな流れを図示します。まずはバ
![PHP5.3.7のcrypt関数のバグはこうして生まれた](https://cdn-ak-scissors.b.st-hatena.com/image/square/5487412c33d5cc6bd5dd10dfb36146ac645366ee/height=288;version=1;width=512/https%3A%2F%2F1.bp.blogspot.com%2F-_qqzeCXYfnE%2FTlPSf_mrGuI%2FAAAAAAAAAP8%2FimIk3XA46-o%2Fw1200-h630-p-k-no-nu%2Fcrypt01.png)