Session Fixation 脆弱性の修正パッチ
Blog 3月 6th, 2007ZenCart日本語公式サイトで
* v1.3.0.2-l10n-jp-1用
* v1.2-l10n-jp-6用
のSession Fixation 脆弱性に対するパッチがリリースされました。
ダウンロードは、こちら
v1.3.0.2-l10n-jp-1用
オーバーライド対応で、コアファイルを修正する必要はないので
(もちろんオーバーライドされるファイルに手を加えている場合は修正が必要ですが)
raadmeに記載されている通りに作業をすれば簡単に導入することができます。
v1.2-l10n-jp-6用
v1.2-l10n-jp-6用の場合は、コアファイルを修正する必要があります。
patchコマンドが使える環境用にパッチファイルが同梱されてますが、
ここでは、patchコマンドが使えない環境の方向けに、
session_fixation.patchの中身(変更前と変更後)を紹介します。
Step 1
—————
admin/includes/application_top.php 20行目付近
[code lang=”php”]
// Start the clock for the page parse time log
define(‘PAGE_PARSE_START_TIME’, microtime());
[/code]
↓
[code]
ini_set(“session.use_only_cookies”, “1”);
ini_set(“session.use_cookies”, “1”);
ini_set(“session.use_trans_sid”, “0”);
// Start the clock for the page parse time log
define(‘PAGE_PARSE_START_TIME’, microtime());
[/code]
admin/includes/functions/sessions.php 90行目付近
[code lang=”php”]
function zen_session_start() {
return session_start();
}
[/code]
↓
[code lang=”php”]
function zen_session_start() {
$result = session_start();
if (!isset($_SESSION[‘initiated’])) {
session_regenerate_id();
$_SESSION[‘initiated’] = true;
}
return $result;
}
[/code]
includes/application_top.php 100行目付近
[code lang=”php”]
// Load the database dependant query defines
if (file_exists(DIR_WS_CLASSES . ‘db/’ . DB_TYPE . ‘/define_queries.php’)) {
include(DIR_WS_CLASSES . ‘db/’ . DB_TYPE . ‘/define_queries.php’);
}
[/code]
↓
[code lang=”php”]
// force cookie
if (SESSION_ALWAYS_FORCE_COOKIE == “True”) {
ini_set(“session.use_only_cookies”, “1”);
ini_set(“session.use_cookies”, “1”);
ini_set(“session.use_trans_sid”, “0”);
}
// Load the database dependant query defines
if (file_exists(DIR_WS_CLASSES . ‘db/’ . DB_TYPE . ‘/define_queries.php’)) {
include(DIR_WS_CLASSES . ‘db/’ . DB_TYPE . ‘/define_queries.php’);
}
[/code]
includes/functions/sessions.php 110行目付近
[code lang=”php”]
function zen_session_start() {
if (defined(‘DIR_WS_ADMIN’)) {
ini_set(‘session.gc_maxlifetime’, (SESSION_TIMEOUT_ADMIN < 900 ? (SESSION_TIMEOUT_ADMIN + 900) : SESSION_TIMEOUT_ADMIN));
}
return session_start();
}
[/code]
↓
[code lang="php"]
function zen_session_start() {
if (defined('DIR_WS_ADMIN')) {
ini_set('session.gc_maxlifetime', (SESSION_TIMEOUT_ADMIN < 900 ? (SESSION_TIMEOUT_ADMIN + 900) : SESSION_TIMEOUT_ADMIN));
}
$result = session_start();
if (!isset($_SESSION['initiated'])) {
session_regenerate_id();
$_SESSION['initiated'] = true;
}
return $result;
}
[/code]
Step 2
—————
ブラウザで管理画面URL/sqlpatch.phpにアクセスし、
session_fixation.patch.sqlを実行すれば完了です。