[11/15開催: PostgreSQL Conference Japan 2019 参加受付中] 
他のバージョンの文書 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

E.289. リリース7.3.10

リリース日: 2005-05-09

このリリースは、複数のセキュリティ関連の問題を含む、7.3.9の各種不具合を修正したものです。

E.289.1. バージョン7.3.10への移行

7.3.Xからの移行ではダンプ/リストアは不要です。 しかし、7.3.Xのシステムカタログで見つかった重大なセキュリティ問題を突かれる可能性があります。 ダンプ、7.3.10のinitdbを使用したinitdb、リロードを行うことで、自動的にこれらの問題を修正します。

セキュリティ問題は、組み込みの文字セット符号化変換関数により、権限を持たないユーザがSQLコマンドを呼び出すことができるという点です。 このような用途のためにこれらの関数を設計していませんでしたが、悪意のある引数の設定に対する安全性がありませんでした。 この修正により、これらの関数の宣言されたパラメータリストがSQLコマンドから呼び出されないように変更されました。 (通常の符号化変換機構の使用には影響はありません。) initdb、もしくは、後述の手作業による修正手順に従って、すべてのインストレーションにおいてこれらのエラーを修正することを強く勧めます。 これらのエラーにより、少なくとも、権限を持たないデータベースユーザがサーバプロセスをクラッシュさせることができます。 また、権限を持たないユーザがデータベーススーパーユーザ権限を手に入れることができる可能性もあります。

initdbを行いたくないのであれば、スーパーユーザ権限で以下の手続きを行ってください。

BEGIN;
UPDATE pg_proc SET proargtypes[3] = 'internal'::regtype
WHERE pronamespace = 11 AND pronargs = 5
     AND proargtypes[2] = 'cstring'::regtype;
-- このコマンドは90行を更新したと報告するはずです。
-- 異なる場合は、コミットせずにロールバックして調査を行ってください。
COMMIT;

上の手続きを、template1を含むインストレーション内のすべてのデータベースで行わなければなりません。 理想を言えば、template0に対しても実施してください。 テンプレートデータベースで修正を行わなかった場合、この後に作成されるデータベースにこのエラーが含まれてしまいます。 template1は他のデータベースと同じ方法で修正できますが、template0では更に行わなければならないことがあります。 まず、任意のデータベースから以下を実行してください。

UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';

次に、template0に接続し、上記修正手続きを実施してください。 最後に以下を実行してください。

-- 再度template0を凍結させます
VACUUM FREEZE;
-- そして、今後の変更に対し保護します。
UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';

E.289.2. 変更点

  • 誤使用を防ぐために符号化関数のシグネチャを変更しました。

  • ある目的(例えばSELECT FOR UPDATE)用にコミットされるように見えるトランザクションが直後に別の目的用にコミットされるという従来から存在した競合状況を修正しました。

    一貫性が明らかにないデータが短期間アプリケーションから参照できてしまうため、これはきわめて重大な不具合です。

  • リレーションの拡張とVACUUMとの間の競合状態を修正しました。

    理論上、これにより新たに挿入されたページの価値が失われます。 しかしこうした状況が発生する頻度はきわめてまれで、アサートエラー以外に発生した事例はありません。

  • TIME WITH TIME ZONE型の値の比較を修正しました。

    --enable-integer-datetimes設定スイッチが使用されている場合、この比較コードに間違いがありました。 注意: この修正により列値のソート順が正しくなるように変更されましたので、TIME WITH TIME ZONE型の列に対するインデックスを持つ場合、この更新をインストールした後にREINDEXを行う必要があります。

  • TIME WITH TIME ZONE型の値に対するEXTRACT(EPOCH)を修正しました。

  • INTERVAL型の値の秒の小数部分において、負の値が間違って表示される点を修正しました。

    このエラーは、--enable-integer-datetimes設定スイッチが使用された場合にのみ発生します。

  • plpgsqlにおいて更にバッファオーバーランの検査を追加しました。(Neil)

  • %を含むトリガの名前を正しくダンプできるようにpg_dumpを修正しました。(Neil)

  • 月に関連した書式のためにto_char(interval)がコアダンプすることを防止しました。

  • より最近のOpenSSLによる構築のためにcontrib/pgcryptoを修正しました。(Marko Kreen)

  • contrib/intaggに対する更なる64ビット向けの修正を行いました。

  • RECORD型を返す関数の最適化の間違いを修正しました。