リリース日: 2014-02-20
このリリースは9.1.11に対し、各種不具合を修正したものです。 9.1メジャーリリースにおける新機能については、E.100. リリース9.1を参照してください。
9.1.Xからの移行ではダンプ/リストアは不要です。
しかしながら、9.1.11以前のリリースからアップグレードする場合は、E.89. リリース9.1.11を参照して下さい。
GRANT ... WITH ADMIN OPTION
制限を強化しました。(Noah Misch)
ADMIN OPTION
無しのロール権限では、メンバーの追加や削除が出来ないことになっていますが、
先にSET ROLE
することにより、この制限は簡単にバイパス出来ていました。
セキュリティのインパクトは大体、ロールのメンバーが、権限を譲り受けた他のメンバーの意図に反し、アクセスを取り消すことができることです。
未承認のロールメンバー追加はあまり重要ではありません。
非協力的なロールのメンバーは、いずれにせよ、ビューを作ったりSECURITY DEFINER
機能によって、
他者に多くの権限を提供することができるからです。(CVE-2014-0060)
PLバリデータ関数を手動呼び出し経由の権限昇格を防止しました。(Andres Freund)
PLバリデータ関数の主な役割はCREATE FUNCTION
の中で黙示的に呼び出されますが、
明示的に呼び出すことができる通常のSQL関数でもあります。
実際に幾つか他の言語で書かれた機能で呼び出されているバリデータはチェックされておらず、
プロセスの権限昇格に悪用される可能性がありました。
もし同様の可能性があれば、必須ではない手続き言語でも独自のバリデーション機能にこの変更を加える必要があります。(CVE-2014-0061)
テーブルとインデックスDDLでの名前の多重検索を防止しました。(Robert Haas、Andres Freund)
が実行中の名前検索で異なる結果が出た場合、DDLのある部分をその他の部分とは違ったテーブルで実施することがありました。
少なくともCREATE INDEX
では、権限チェックがインデックス作成とは異なるテーブルに対して実施されることにより、権限昇格攻撃を許す可能性があります。(CVE-2014-0062)
長い日付時刻文字列によるバッファオーバーランを防止しました。(Noah Misch)
MAXDATELEN
定数はinterval
型の取りえる最長の値に対して小さ過ぎたため、interval_out()
関数内でバッファオーバーランを許していました。
日付時刻の入力関数はバッファオーバーラン防止に対して慎重でしたが、非常に長いタイムゾーン名を含むような、有効な入力値を拒否するほど、制限は短いものでした。
ecpgライブラリには、これらを含む幾つか固有の脆弱性を含んでいました。
サイズ算出での整数オーバーフローによるバッファオーバーランを防止しました。(Noah Misch、Heikki Linnakangas)
幾つかの関数、多くはデータ入力関数で、オーバフローをチェックせずにメモリの割り当てサイズを計算していました。 オーバーフローが発生した場合、小さすぎるバッファが割り当てられ、それを越えて書かれていました。(CVE-2014-0064)
固定サイズのバッファのオーバーランを防止しました。(Peter Eisentraut、Jozef Mlich)
固定サイズのバッファがオーバランしない明確な保証を提供するために、strlcpy()
や関連する関数を使いました。
前項とは違い、これらのケースが実際に問題を引き起こすかどうかは不明です。というのは、ほとんどの場合、入力文字列のサイズは事前に制限されている様に思われるからです。
とはいえ、コベリティ(Coverity)のこのタイプの警告はすべて黙らせた方が賢明と思えます。(CVE-2014-0065)
crypt()
関数がNULLを返した場合のクラッシュを防止しました。(Honza Horak、Bruce Momjian)
crypt()
がNULLを返す比較的まれなシナリオがあり、その場合、 contrib/chkpass
はクラッシュしていました。
問題が起こる可能性の中で、一つの実際的なケースは、libcが承認されていないハッシュアルゴリズムの実行を拒否するよう設定されてる(例えば「FIPS モード」)場合です。(CVE-2014-0066)
再帰テスト(regression testing)命令におけるmake check
のリスクを文書化しました。(Noah Misch、Tom Lane)
make check
によって起動した一時サーバは「trust」認証を使うため、
同一マシン上の他のユーザがデータベースのスーパーユーザとして接続でき、
そして、テストを起動したオペレーティングシステムのユーザ特権を悪用できる可能性があります。
将来のリリースでは、おそらくこのリスクを防ぐためにテスト手順の変更が盛り込む予定ですが、その前に公開議論が必要です。
そこで差し当たりは、同一マシン上に信頼されていないユーザが居る場合、make check
を使っている人に対して、警告を発するに留めています。(CVE-2014-0067)
リレーションのセグメントが一杯でない時に、WALレコードが誤再生する場合があったのを修復しました。
WAL更新は、本来あるべき場所から多くのページを通り過ぎて、間違ったページに適用されることがありました。 データ破壊とは別に、ファイル終端であるべき場所をずっと越えてアップデートが適用されてしまうため、 このエラーはマスタサーバと比べてスタンバイサーバで著しい「肥大化(bloat)」をもたらすことが報告されています。 この故障モードはクラッシュリカバリ中の重大なリスクとは思われません。 更新が頻発するマスタから得たベースバックアップで作られたスタンバイサーバの初期同期の時にのみリスクが発生します。
リカバリによって整合性がとれたか判定する箇所の不具合を修正しました。
WALのリプレイ開始時にデータベースの整合性が既に取れていると誤った結論を得てしまう場合があり、 そのためにデータベースが実際に整合性が取れる前にホットスタンバイのクエリを許可している可能性がありました。 その他の症状として、「PANIC: WAL contains references to invalid pages」が発生する可能性もありました。
ホットスタンバイモードのVACUUM
操作によるWALリプレイで、Btreeインデックスページの不適切なロック処理を修正しました。 (Andres Freund、Heikki Linnakangas、Tom Lane)
このエラーは「PANIC: WAL contains references to invalid pages」障害をもたらす可能性がありました。
非リーフのGINインデックスページへの挿入によって、ページ全体のWALレコードに適宜書き込むことを保証します。(Heikki Linnakangas)
これまでのコードでは、部分ページ書き込みのイベント中にシステムがクラッシュした場合、インデックスが破損する恐れがありました。
pause_at_recovery_target
とrecovery_target_inclusive
が両方セットされた場合、リカバリターゲットのレコードは停止後ではなく停止前に適用される事を保証します。(Heikki Linnakangas)
サーバプロセス終了中の競合状態を修正しました。(Robert Haas)
シグナルハンドラが、既に無効となったプロセスのMyProc
ポインタを利用しないことを保証します。
walsenderの終了ロジックとwalreceiverのSIGHUPシグナルハンドラの競合状態を修正しました。(Tom Lane)
エラー出力ロジックの中で、errno
の安全でない参照方法を修正しました。(Christian Kruse)
これは、主にHINT
フィールドが欠如或いは不適切であるという奇妙な現象を引き起こしていました。
サーバ起動時に早すぎるereport()
関数使用によって、クラッシュする可能性があったのを修正しました。(Tom Lane)
クラッシュが観察された主なケースは、読み取り権限を持たないディレクトリでサーバが起動された場合です。
OpenSSLのソケット書き込み関数で、リトライフラグを適切に消去しました。(Alexander Kukushkin)
この消去が省かれると、SSLで暗号化された接続が突然切れた場合、サーバのロックアップを引き起こす可能性がありました。
エスケープを含むユニコードの識別子(U&"..."
構文)の長さチェックを修正しました。(Tom Lane)
識別子がエスケープされたフォームが長すぎた場合、誤った切り捨て警告が出力されていました。 しかし実際には、エスケープをデコードした後、識別子に切り捨ては不要でした。
ロールのリストで、型名をキーワードに使うことができるようにしました。(Stephen Frost)
以前のパッチで使えるようになった型名キーワードは、定位置のクオート無しでロール識別子として使うことができるものですが、
DROP ROLE
のように、許されたロール識別子のリストから漏れていたケースがありました。
EXISTS(SELECT * FROM zero_column_table)
でパーサがクラッシュする障害を修正しました。(Tom Lane)
WHERE (... x IN (SELECT ...) ...) IN (SELECT ...)
のような、入れ子になったサブセレクトの誤ったプランによって、クラッシュする可能性があるのを修正しました。(Tom Lane)
テーブル列の全ての値の分布が「広すぎる」場合であっても、ANALYZE
コマンドが統計情報を作る事を保証しました。(Tom Lane)
ANALYZE
コマンドはヒストグラムと算出した中央値より大幅に離れた値は意図的に除外していますが、
全てのサンプリングされたエントリが広すぎる場合、極端な値を排除するのは正常なことです。
ALTER TABLE ... SET TABLESPACE
内で権限チェック無しにデータベースのデフォルトテーブルスペース使用を許可するようにしました。(Stephen Frost)
CREATE TABLE
は常に使用を許可していましたが、ALTER TABLE
ではそれをしていませんでした。
CASE
の戻り値が複数行のものと、そうではないものが混ざっている場合に、「cannot accept a set」エラーが発生してしたのを修正しました。(Tom Lane)
pgstat関数の中でクライアントアドレスが全てゼロの場合のチェックを修正しました。(Kevin Grittner)
テキストサーチのパーサでマルチバイト文字を誤判別する可能性を修正しました。(Tom Lane)
マルチバイトエンコーディングでロケールにCを使用している場合、非ASCII文字は誤判別される可能性がありました。 Cygwinでは非Cロケールでも同様に誤判別する可能性がありました。
plainto_tsquery()
関数が誤作動する可能性があったのを修正しました。(Heikki Linnakangas)
メモリ領域が重なっている場合のコピーでmemcpy()
関数ではなくmemmove()
関数を使うようにしました。
これによる具体的な障害報告はありませんが、これは確かに危険性がありました。
pg_start_backup()
とpg_stop_backup()
の権限チェックの配置を修正しました。(Andres Freund、Magnus Hagander)
以前のコーディングではカタログアにクセスにすべきではない時に、アクセスしようとすることがありました。
ロケールチェック用のエンコーディング名として、SHIFT_JIS
を受け付けるようにしました。(Tatsuo Ishii)
Windows上のPQhost()
関数の誤作動を修正しました。(Fujii Masao)
ホストが定義されていない場合、localhost
を返すべきでした。
COPY TO STDOUT/FROM STDIN
中の障害用にlibpqとpsqlのエラーハンドリングを改善しました。(Tom Lane)
この修正を具体的にいうと、COPY FROM STDIN
中にサーバとの接続が切れた場合、9.2以上のサーバでは無限ループに陥る可能性がありました。
これより古いバージョンのサーバや、他のクライアントアプリケーションでも、これに類する状況が起こるかもしれませんでした。
pg_basebackupの冗長モードで、正しくないファイル名が出力される可能性があるのを修正しました。(Magnus Hagander)
ベースバックアップ内に2重に含ないように、PGDATA内のテーブルスペースに含まれることを避けました。(Dimitri Fontaine、Magnus Hagander)
ecpgの記述子の並びが間違っているのを修正しました。(MauMau)
ecpgで、接続パラメータにホスト名が欠如している場合の処理を適切に修正しました。(Michael Meskes)
contrib/dblink
の接続開始時におけるパフォーマンス退行を修正しました。(Joe Conway)
クライアントとサーバのエンコーディングが一致する場合、不必要な二重設定を止めました。
contrib/isn
で、ISMN値のチェックディジットの間違った演算を修正しました。(Fabien Coelho)
ドキュメント通りの手順でクライアントのみのコードをインストールできることを保証しました。(Peter Eisentraut)
MingwとCygwin環境でビルドする場合、libpq DLLをbin
ディレクトリにインストールするようにしました。(Andrew Dunstan)
MSVCビルドに於いて、このコピーは長らく行われてきました。 psqlのようなプログラムが、DLLを見つける事が出来ずに起動に失敗する問題は修正すべきです。
Cygwin環境で廃止予定のdllwrap
ツールの使用を止めました。(Marco Atzeri)
プレインテキストのHISTORY
ファイルとsrc/test/regress/README
ファイルは今後、生成されません。(Tom Lane)
これらのテキストファイルは、メインHTMLとPDFドキュメントフォーマットで重複していました。
それらの保守に関する問題は、読者が好むプレインテキストフォーマットより大幅に上回ります。
配布用tarボールにはまた、これらの名前でファイルが含まれていますが、メインドキュメントを参照してもらうための指標となるスタブにすぎません。
プレインテキストのINSTALL
ファイルは、そのためのユースケースとして、まだ保守されています。
タイムゾーンデータファイルをtzdataリリース2013iに更新しました。 ヨルダンでの夏時間の変更およびキューバの歴史的な地域データの修正が含まれます。
それに加え、Asia/Riyadh87
、Asia/Riyadh88
とAsia/Riyadh89
は、
もはやIANAによって保守されず、実際の常用時計として表示されることが無いため、削除されました。