徳丸浩の日記 - PHP - PHP:session_set_save_handlerリファレンスマニュアルのサンプルにパス・トラバーサル脆弱性(情報元のブックマーク数)

徳丸さん!!!!!!w

PHPのsession_set_save_handlerのリファレンスを眺めていて、ふと、これはパス・トラバーサルの脆弱性があるのではないかと思いました。

session_set_save_handlerリファレンスマニュアルのサンプルにパス・トラバーサル脆弱性 | 徳丸浩の日記

問題は、PHP処理系にてセッションIDの値がどの程度チェックされるかです。よく知られているように、PHPにはSession Adoptionの問題があり、素のままの状態では外部からCookie PHPSESSIDにより指定されたセッションIDをそのまま受け入れます。私が色々な文字で試した範囲では、「<」、「>」、「'」、「"」に関してはチェックが行われており、これらの文字がPHPSESSIDに含まれていた場合には、セッションIDの再設定が行われました。一方、それ以外の文字、とくに「/」、「.」、「\」などは特にチェックされないまま素通ししてしまうので、パストラバーサル脆弱性となります。

session_set_save_handlerリファレンスマニュアルのサンプルにパス・トラバーサル脆弱性 | 徳丸浩の日記

対策は妥当性チェックてか、入力値チェックですね。

対策について。Webアプリケーション側でこの問題に対応するには、さしあたっては、セッションIDの妥当性確認を行えばよいと思います。セッションIDが英数字のみで構成されているか、あるいは16進文字列として妥当であるかをチェックすれば、パストラバーサルは防げます。
また、この問題はPHPがSession Adoptionの問題があることに起因していますから、Strict Sessin Patchを適用すれば、上記問題も解消されると思います。しかし、その場合でも、防衛的意味でパス・トラバーサル対策としての文字種チェックはしておくべきでしょう。

session_set_save_handlerリファレンスマニュアルのサンプルにパス・トラバーサル脆弱性 | 徳丸浩の日記

IPAがサンプルは現場でコピペされているんだ!を無視して不受理ということらしいです。

オレオレPHPサンプルではなく、PHP本体なのだから対応してくれてもいいのに

なお、この問題を一応脆弱性情報としてIPAに届出ましたが、独立したソフトウェア製品ではないという理由で不受理となりましたので、ここに公開し、PHPの開発者に注意を喚起するものです。

session_set_save_handlerリファレンスマニュアルのサンプルにパス・トラバーサル脆弱性 | 徳丸浩の日記

screenshot