SuExecのセキュリティなバグ:DocumentRootのセキュリティチェックが微妙

例えば、AP_DOC_ROOT="/var/www"だと、/var/www/test.cgiだけでなく、/var/www-FAKE/test.cgiもセキュリティチェックを通り抜けてしまうというバグがずいぶん前から放置されていた・w・;。
コードを読んでいると、ものすごく気になったので、Bugzillaで探してみたところ、すでにパッチがあるではないか。だがちょっと、やり方が悪いというか・・なんだかなぁ・w・;。パッチがあるのに放置されていたのは「変な設定をしない限り問題ない」からなのだろうか?それとも・・。
とりあえず、このパスのチェックに関するバグのみを補正する、シンプルなパッチを作ったので、投げてみた。
44752 – Suexec does not correctly check that scripts are inside the docroot


パッチ投げるのは2回目(1回目はGentooでrubyがコンパイルできない問題)のものであった。)なので、どきどきモノである(なんでやねん・w・;)。


http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=511
Bugzillaに載っていたこのページには、最初は気づかなかった問題が他にも。こんな解析をすることができるようになりたいなぁ。というか、投げたパッチはこのページの指摘のうち、2つめのやつしか直さないけど、まぁいいか・w・;。

この「まぁいいか」には、後付けだが、一応根拠がある。
1つめの「シンボリックリンクのチェックに問題がある」は、「書き込み権限」が奪取されないと問題ない。
3つめの「ユーザがグループに所属しているかチェックしてない」は、ファイルのgidとの一致チェックがあり、ファイルのgidが間違っているというのがそもそもおかしい状態なので無視できるかな?
ところが2つめの「DocumentRootのパスのチェックがおかしい」は、無視できない点がある。
コード自体にあまりにも明らかなミスがあり、無視できなかったというのがパッチを投げた理由だが、セキュリティ的にも悪い。
/var/wwwと/var/www_bakが存在して(っていうところはありえる範囲?)、この2つのディレクトリでファイルのUID・GIDが同じであったとする。
Apache本体のやDocumentRootの設定が、SuExec側のDocumentRoot外にも及んでいるということは明らかな設定ミスなので、これも無視できると思う。
しかし、Apacheの実行権限が奪取され、suexecが自由に使えるようになった状態を想定すると、/var/www_bak内のファイルも自由にsuexecでき、もしも「setup.php」みたいなものが残っていたとすると何が起こるかわからない。
という感じで、「後付け」な根拠を考えてみた。
間違っていたり偏見だったりするのなら(その可能性は高いかも・w・;)、ぜひとも指摘していただきたい。