[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.127. リリース8.4.20

リリース日: 2014-02-20

このリリースは8.4.19に対し、各種不具合を修正したものです。 8.4メジャーリリースにおける新機能については、E.147. リリース8.4を参照してください。

PostgreSQLコミュニティは2014年7月に8.4.Xシリーズの更新リリースを終了する予定です。 早めに新しいリリースのブランチに更新することを推奨します。

E.127.1. バージョン8.4.20への移行

8.4.Xからの移行ではダンプ/リストアは不要です。

しかしながら、8.4.19以前のリリースからアップグレードする場合は、E.128. リリース8.4.19を参照して下さい。

E.127.2. 変更点

  • 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)をもたらすことが報告されています。 この故障モードはクラッシュリカバリ中の重大なリスクとは思われません。 更新が頻発するマスタから得たベースバックアップで作られたスタンバイサーバの初期同期の時にのみリスクが発生します。

  • 非リーフのGINインデックスページへの挿入によって、ページ全体のWALレコードに適宜書き込むことを保証します。(Heikki Linnakangas)

    これまでのコードでは、部分ページ書き込みのイベント中にシステムがクラッシュした場合、インデックスが破損する恐れがありました。

  • サーバプロセス終了中の競合状態を修正しました。(Robert Haas)

    シグナルハンドラが、既に無効となったプロセスのMyProc ポインタを利用しないことを保証します。

  • エラー出力ロジックの中で、errnoの安全でない参照方法を修正しました。(Christian Kruse)

    これは、主にHINTフィールドが欠如或いは不適切であるという奇妙な現象を引き起こしていました。

  • サーバ起動時に早すぎるereport()関数使用によって、クラッシュする可能性があったのを修正しました。(Tom Lane)

    クラッシュが観察された主なケースは、読み取り権限を持たないディレクトリでサーバが起動された場合です。

  • OpenSSLのソケット書き込み関数で、リトライフラグを適切に消去しました。(Alexander Kukushkin)

    この消去が省かれると、SSLで暗号化された接続が突然切れた場合、サーバのロックアップを引き起こす可能性がありました。

  • エスケープを含むユニコードの識別子(U&"..."構文)の長さチェックを修正しました。(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()関数を使うようにしました。 これによる具体的な障害報告はありませんが、これは確かに危険性がありました。

  • ロケールチェック用のエンコーディング名として、SHIFT_JISを受け付けるようにしました。(Tatsuo Ishii)

  • Windows上のPQhost()関数の誤作動を修正しました。(Fujii Masao)

    ホストが定義されていない場合、localhostを返すべきでした。

  • COPY TO STDOUT/FROM STDIN中の障害用にlibpqpsqlのエラーハンドリングを改善しました。(Tom Lane)

    この修正を具体的にいうと、COPY FROM STDIN中にサーバとの接続が切れた場合、9.2以上のサーバでは無限ループに陥る可能性がありました。 これより古いバージョンのサーバや、他のクライアントアプリケーションでも、これに類する状況が起こるかもしれませんでした。

  • 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を見つける事が出来ずに起動に失敗する問題は修正すべきです。

  • プレインテキストのHISTORYファイルとsrc/test/regress/READMEファイルは今後、生成されません。(Tom Lane)

    これらのテキストファイルは、メインHTMLとPDFドキュメントフォーマットで重複していました。 それらの保守に関する問題は、読者が好むプレインテキストフォーマットより大幅に上回ります。 配布用tarボールにはまた、これらの名前でファイルが含まれていますが、メインドキュメントを参照してもらうための指標となるスタブにすぎません。 プレインテキストのINSTALLファイルは、そのためのユースケースとして、まだ保守されています。

  • タイムゾーンデータファイルをtzdataリリース2013iに更新しました。 ヨルダンでの夏時間の変更およびキューバの歴史的な地域データの修正が含まれます。

    それに加え、Asia/Riyadh87Asia/Riyadh88Asia/Riyadh89は、 もはやIANAによって保守されず、実際の常用時計として表示されることが無いため、削除されました。