XOOPS、XOOPS Cubeのバグ・セキュリティーホール

セッションクッキーがドメイン全てに発行される

確認バージョン:XOOPS 2.4.0

セッションクッキーを1つのフルドメインに対してではなく、ドメイン全体に明示的に発行しています。

運営しているサイトが複数サブドメインを使用しているなら必要かもしれません。 しかしXOOPSを1つのサブドメインで運営し、さらにドメインの同じ別のサブドメインを使用しているサイトがあったときにクッキーのバッティングが起こります。

XOOPSサイトには影響はありませんが、XOOPS以外のサイトに影響します。

またクッキーの上書きはドメイン指定、パス指定が同じ値でないと上書きされません。
つまり次のようなことです。

Set-Cookie: cookiename=hoge; path=/; domain=.example.com

このセッションは次のヘッダーでは上書きすることはできません。(IE、Fx)

Set-Cookie: cookiename=hoge; path=/

該当コード

/htdocs/include/common.php
define("XOOPS_COOKIE_DOMAIN", ($domain = xoops_getBaseDomain(XOOPS_URL)) == 'localhost' ? '' : '.' . $domain);

/htdocs/kernel/session.php
XoopsSessionHandler::update_cookie
setcookie($session_name, $session_id, $session_expire ? time() + $session_expire : 0, '/', XOOPS_COOKIE_DOMAIN, 0);

ヘッダー情報

POST /user.php HTTP/1.1
……
Cookie: PHPSESSID=nnsqriskhm8hfk8jgsuvbtoat3
……

HTTP/1.x 200 OK
……
Set-Cookie: PHPSESSID=nnsqriskhm8hfk8jgsuvbtoat3; path=/; domain=.example.com
……

対処法

.htaccessやhttpd.confにsession.nameを設定するか、PHPファイルの先頭にsession_name()を設定し、セッション名をPHPSESSID以外にします。

ログイン時にセッションIDの振り直しはされない

確認バージョン:XOOPS 2.4.0

[参考記事] セッション固定攻撃

GETクエリのセッションIDを無視するにはphp.iniを次のようにします。

session.use_only_cookies On

関連記事

スポンサーリンク

Leightbox

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る