| Pgpool-II 4.7.3 文書 | |||
|---|---|---|---|
| 前のページ | 上に戻る | 付録 A. リリースノート | 次のページ |
リリース日: 2026-09-29
このリリースには、以下の脆弱性に対するセキュリティ修正が含まれています。
フェイルオーバ時のPgpool-IIのwatchdogのメッセージ処理において、攻撃者が不正なメッセージを渡すことにより、任意のメモリアドレスに任意の32ビット値を書き込むことができる脆弱性があります。(CVE-2026-92867)
Pgpool-IIのwatchdogには、攻撃者が不正なフェイルオーバ要求メッセージを送信することにより、意図しないメモリアドレスに値を書き込み、メモリ破壊を引き起こすことが可能な脆弱性があります。
Pgpool-IIの3.5系から4.2系までのすべてのバージョン、4.3.0から4.3.20、4.4.0から4.4.17、4.5.0から4.5.12、4.6.0から4.6.7、および4.7.0から4.7.2が影響を受けます。 Pgpool-II 4.7.3、4.6.8、4.5.13、4.4.18、4.3.21、または各系列のそれ以降のリリースへのアップグレードを強く推奨します。 サポートが終了している3.5系から4.2系には修正版は提供されません。 これらのバージョンを使用している場合は、修正を含むサポート対象のバージョンにアップグレードしてください。
その他の回避策として、watchdogを無効にする(use_watchdog = off)か、信頼できるネットワークからのみwatchdogに接続できるようにアクセスを制限してください。
Pgpool-IIプロジェクトは、この問題を報告してくださったEmond Papegaaijに感謝します。
クライアントが証明書認証を使ってPgpool-IIに接続する際に、Pgpool-IIがクライアントのX.509証明書のCommon Name (CN)フィールド内のドメイン名にある'\0'を適切に処理しないため、悪意のあるクライアントがパスワードなしに他のユーザ名でPgpool-IIサーバに接続できる脆弱性があります。(CVE-2026-92868)
クライアント証明書認証では、クライアント証明書から取得したCommon Name (CN)を接続ユーザ名と比較して認証を行います。 しかし、CNに埋め込みNUL文字(\0)を含む細工された証明書を適切に検証していなかったため、本来とは異なるCNが正当なユーザ名として扱われる可能性があります。 攻撃者が埋め込みNUL文字を含む細工されたクライアント証明書を提示することで、本来認証されるべきでない利用者が正当な利用者として認証される可能性があります。
Pgpool-IIの4.0系から4.2系までのすべてのバージョン、4.3.0から4.3.20、4.4.0から4.4.17、4.5.0から4.5.12、4.6.0から4.6.7、および4.7.0から4.7.2が影響を受けます。 Pgpool-II 4.7.3、4.6.8、4.5.13、4.4.18、4.3.21、または各系列のそれ以降のリリースへのアップグレードを強く推奨します。 サポートが終了している4.0系から4.2系には修正版は提供されません。 これらのバージョンを使用している場合は、修正を含むサポート対象のバージョンにアップグレードしてください。
その他の回避策として、クライアント証明書認証以外の認証方式を使用してください。
Pgpool-IIプロジェクトは、この問題を報告してくださったEmond Papegaaijに感謝します。
Pgpool-IIのwatchdogのメッセージ処理において、攻撃者が不正なメッセージを渡すことにより、固定長配列の境界を超えてメモリ領域が書き換えられる脆弱性があります。(CVE-2026-92869)
Pgpool-IIのwatchdog機能において、Watchdog peerから受信した設定情報を処理するメッセージ解析処理に境界外書き込みの脆弱性があります。 Watchdog peerから受信したbackend_descおよびwd_nodesのJSON配列長に対する上限チェックが不十分であるため、細工されたメッセージを処理した場合、固定長配列の境界外へ書き込みが発生する可能性があります。 本脆弱性が悪用された場合、Pgpool-IIプロセスの異常終了やメモリ破壊が発生する可能性があります。
Pgpool-IIの3.5系から4.2系までのすべてのバージョン、4.3.0から4.3.20、4.4.0から4.4.17、4.5.0から4.5.12、4.6.0から4.6.7、および4.7.0から4.7.2が影響を受けます。 Pgpool-II 4.7.3、4.6.8、4.5.13、4.4.18、4.3.21、または各系列のそれ以降のリリースへのアップグレードを強く推奨します。 サポートが終了している3.5系から4.2系には修正版は提供されません。 これらのバージョンを使用している場合は、修正を含むサポート対象のバージョンにアップグレードしてください。
その他の回避策として、watchdogを無効にする(use_watchdog = off)か、信頼できるネットワークからのみwatchdogに接続できるようにアクセスを制限してください。
Pgpool-IIプロジェクトは、この問題を報告してくださったEmond Papegaaijに感謝します。
Pgpool-IIのwatchdogにおいて、フェイルオーバ処理メッセージの扱いに脆弱性があり、任意の長さの値を書き込むことによりスタックを破壊し、Pgpool-IIのプロセスをクラッシュさせることができます。(CVE-2026-92870)
wd_authkeyが設定されていない場合、Pgpool-IIのwatchdogには、攻撃者が不正なフェイルオーバ処理メッセージを渡すことによってPgpool-IIメインプロセスのスタックに任意の長さの値を書き込むことが可能な脆弱性があり、それによってPgpool-IIのプロセスをクラッシュさせることができます。
Pgpool-IIの3.5系から4.2系までのすべてのバージョン、4.3.0から4.3.20、4.4.0から4.4.17、4.5.0から4.5.12、4.6.0から4.6.7、および4.7.0から4.7.2が影響を受けます。 Pgpool-II 4.7.3、4.6.8、4.5.13、4.4.18、4.3.21、または各系列のそれ以降のリリースへのアップグレードを強く推奨します。 サポートが終了している3.5系から4.2系には修正版は提供されません。 これらのバージョンを使用している場合は、修正を含むサポート対象のバージョンにアップグレードしてください。
その他の回避策として、watchdogを無効にする(use_watchdog = off)か、信頼できるネットワークからのみwatchdogに接続できるようにアクセスを制限してください。
Pgpool-IIプロジェクトは、この問題を報告してくださったEmond Papegaaijに感謝します。
Pgpool-IIのwatchdogノード間認証において、認証キーが設定されている環境で、認証情報を含まない細工されたwatchdogメッセージを適切に処理できないことに起因するNULLポインタ参照の脆弱性があります。(CVE-2026-92871)
watchdogポートへ接続可能な攻撃者が、認証情報を含まない細工されたwatchdogメッセージを送信することにより、対象ノードのwatchdogプロセスを異常終了させる可能性があります。
Pgpool-IIの3.5系から4.2系までのすべてのバージョン、4.3.0から4.3.20、4.4.0から4.4.17、4.5.0から4.5.12、4.6.0から4.6.7、および4.7.0から4.7.2が影響を受けます。 Pgpool-II 4.7.3、4.6.8、4.5.13、4.4.18、4.3.21、または各系列のそれ以降のリリースへのアップグレードを強く推奨します。 サポートが終了している3.5系から4.2系には修正版は提供されません。 これらのバージョンを使用している場合は、修正を含むサポート対象のバージョンにアップグレードしてください。
その他の回避策として、watchdogを無効にする(use_watchdog = off)か、信頼できるネットワークからのみwatchdogに接続できるようにアクセスを制限してください。
Pgpool-IIプロジェクトは、この問題を報告してくださったEmond Papegaaijに感謝します。
Pgpool-IIのハートビート受信プロセスには、情報を漏洩する可能性がある脆弱性があります。(CVE-2026-92872)
Pgpool-IIのハートビート受信プロセスが不正なメッセージを受信した際に、スタックメモリ上の情報をログファイルを通じて漏洩する可能性がある脆弱性があります。
Pgpool-IIの3.5系から4.2系までのすべてのバージョン、4.3.0から4.3.20、4.4.0から4.4.17、4.5.0から4.5.12、4.6.0から4.6.7、および4.7.0から4.7.2が影響を受けます。 Pgpool-II 4.7.3、4.6.8、4.5.13、4.4.18、4.3.21、または各系列のそれ以降のリリースへのアップグレードを強く推奨します。 サポートが終了している3.5系から4.2系には修正版は提供されません。 これらのバージョンを使用している場合は、修正を含むサポート対象のバージョンにアップグレードしてください。
その他の回避策として、watchdogを無効にする(use_watchdog = off)か、ハートビートの代わりにクエリによる死活監視(wd_lifecheck_method = 'query')を使用してください。
Pgpool-IIプロジェクトは、この問題を報告してくださったEmond Papegaaijに感謝します。
Pgpool-IIのwatchdogの昇格処理において、攻撃者が認証キーチェックをバイパスして、任意のwatchdogノードをリーダーノードに昇格できる脆弱性があります。(CVE-2026-92873)
Pgpool-IIのクラスタ管理モジュールであるwatchdogの昇格処理において、攻撃者が認証キーチェックをバイパスして、任意のwatchdogノードをリーダーノードに昇格できる脆弱性があります。
Pgpool-IIの3.5系から4.2系までのすべてのバージョン、4.3.0から4.3.20、4.4.0から4.4.17、4.5.0から4.5.12、4.6.0から4.6.7、および4.7.0から4.7.2が影響を受けます。 Pgpool-II 4.7.3、4.6.8、4.5.13、4.4.18、4.3.21、または各系列のそれ以降のリリースへのアップグレードを強く推奨します。 サポートが終了している3.5系から4.2系には修正版は提供されません。 これらのバージョンを使用している場合は、修正を含むサポート対象のバージョンにアップグレードしてください。
その他の回避策として、watchdogを無効にする(use_watchdog = off)か、信頼できるネットワークからのみwatchdogに接続できるようにアクセスを制限してください。
Pgpool-IIプロジェクトは、この問題を報告してくださったEmond Papegaaijに感謝します。
拡張クエリのパイプライン処理中にSyncが早期に送信される問題を修正しました。(Taiki Koshino)
拡張クエリのパイプライン処理が進行中であるにもかかわらず、内部のSyncメッセージによって暗黙のトランザクションが早期にコミットされることを防ぐようにしました。 また、バックエンドノード間でエラー処理とトランザクションの終了処理を調整し、パイプライン内の後続処理でエラーが発生した場合に、それ以前の変更がロールバックされるようにしました。
ディスカッション: Pgpool injects Sync before a pipelined Parse and drops temporary tables #174
パイプラインモードで遅延制約エラーが発生するとハングする問題を修正しました。(Taiki Koshino)
バックエンドからErrorResponseを受信した際に、保留中のSyncメッセージを保持し、ReadyForQueryまで処理を継続できるようにしました。 以前は、コミット時に遅延制約違反が発生すると、フロントエンドが既に送信済みのSyncをPgpool-IIが無期限に待つ可能性がありました。
ディスカッション: [PATCH v1] Fix hang on deferred constraint errors in pipeline mode
Parseでの内部トランザクション処理の不整合を修正しました。(Taiki Koshino)
Parse()での内部トランザクションの開始をレプリケーションモードに限定し、Bind()と一致させました。
以前は、rawモードで拡張クエリプロトコルによるUPDATEを自動コミットで実行すると、接続がトランザクション内に残る可能性がありました。
ディスカッション: Pgpool leaves an internal transaction open after autocommitted extended-protocol DML #172
do_error_execute_command()での応答バッファのポインタ更新を修正しました。(Taiki Koshino)
保存した応答のバッファポインタを、長さフィールドのサイズではなく、応答本体の実際の長さだけ進めるようにしました。 これにより、プロトコルv2とv3の両方で、長さが0の応答の後などに後続の保存済み応答が破損する問題を防ぎます。
ディスカッション: Fix response buffer pointer advancement in do_error_execute_command
handle_query_context()で解析木の存在を確認するようにしました。(Tatsuo Ishii)
handle_query_context()で解析木にアクセスする前に、その存在を確認するようにしました。
この問題はCoverityによって検出されました。
PCPワーカーの終了シグナルハンドラではフラグの設定のみを行うようにしました。(Taiki Koshino)
PCPワーカーの終了処理をシグナルハンドラからメインループに移しました。 ハンドラでは終了要求の記録のみを行い、他の処理が進行中に安全でないログ出力や後処理を行わないようにしました。
この問題はEmond Papegaaijによって報告されました。
PCP親プロセスのシグナルハンドラではフラグの設定のみを行うようにしました。(Taiki Koshino)
PCP親プロセスの終了処理と起床処理をメインループに移しました。 シグナルハンドラではワーカー一覧の走査や変更を行わず、フラグを設定するようにしました。 これにより、クラッシュや再利用されたプロセスIDへのシグナル送信につながる競合を防ぎます。
この問題はEmond Papegaaijによって報告されました。
ディスカッション: Convert pcp_exit_handler and wakeup_handler_parent to flag-only.
アイドル接続の後処理をシグナルハンドラからメインループに移しました。(Taiki Koshino)
子プロセスのSIGUSR1ハンドラではアイドル接続の後処理要求を記録し、実際の後処理はメインループで行うようにしました。 これにより、シグナルで中断されたコードが使用中の接続やスタートアップパケットのメモリが解放されることを防ぎます。
この問題はEmond Papegaaijによって報告されました。
ディスカッション: Convert close_idle_connection (SIGUSR1) to flag-only handler with main-loop processing.
ライフチェックの終了シグナルハンドラではフラグの設定のみを行うようにしました。(Taiki Koshino)
watchdogのライフチェックにおける子プロセスの終了、メモリの後処理、およびプロセスの終了処理をシグナルハンドラの外に移しました。 ハンドラではerrnoを保持しながらシグナルを記録してフラグを設定し、シグナルハンドラ内で安全でない操作を行わないようにしました。
この問題はEmond Papegaaijによって報告されました。
ディスカッション: Convert pcp_exit_handler and wakeup_handler_parent to flag-only.
クエリキャッシュのキーに区切りを追加し、衝突を防ぐようにしました。(Taiki Koshino)
クエリキャッシュのキーを構築する際に、ユーザ、クエリ、およびデータベースの各フィールド間にNUL文字の区切りを挿入し、バッファ全体をハッシュ化するようにしました。 以前は、区切りなしでこれらのフィールドを連結していたため、異なる入力から同一のキーが生成され、別のユーザやデータベースのキャッシュ結果が返される可能性がありました。
この問題はEmond Papegaaijによって報告されました。
inject_cached_message()での符号なし整数のアンダーフローを修正しました。(Taiki Koshino)
inject_cached_message()でヘッダサイズを減算する前に、キャッシュされたメッセージの長さを検証するようにしました。
以前は、長さがヘッダサイズより小さい場合にアンダーフローによって大きな符号なし整数値になり、メモリ割り当ての失敗によってセッションが終了する可能性がありました。
この問題はEmond Papegaaijによって報告されました。
pgprotoでのバッファ境界外アクセスを修正しました。(Tatsuo Ishii)
pgprotoで継続行かどうかを判定する前に、入力バッファの長さを確認するようにしました。 これにより、AddressSanitizerによって検出された境界外アクセスを防ぎます。
削除された設定パラメータをデフォルト値に戻すようにしました。(Taiki Koshino)
pgpool.confから削除またはコメントアウトされた再読み込み可能なパラメータを、デフォルト値に戻すようにしました。 以前は、設定を再読み込みしても古い値が保持されていました。 設定ファイルから読み込まれたものではない値は変更しません。
ディスカッション: reload config issue #164
「Fix do_query to send sync rather than flush.」の変更を取り消しました。(Tatsuo Ishii)
do_query()がFlushの代わりにSyncを送信する変更を取り消しました。
この変更により、パイプラインの暗黙のトランザクションが早期にコミットされ、後続の文が失敗しても、それ以前の変更がコミットされたままになる可能性がありました。
ディスカッション: Re: low level protocol, implicit transactions , "idle in transaction" issue
get_health_check_stats()のデバッグメッセージのレベルをDEBUG5に下げました。(Tatsuo Ishii)
get_health_check_stats()に誤って残されていたデバッグメッセージをLOGからDEBUG5に変更しました。
この問題はseoktai-chunによって報告されました。
ディスカッション: Leftover debug log "status_changed_time" floods the log in pool_process_reporting.c #171
pool_temp_tables_delete()のデバッグメッセージのレベルをDEBUG5に下げました。(Tatsuo Ishii)
pool_temp_tables_delete()に誤って残されていたデバッグメッセージをLOGからDEBUG5に変更しました。
認証中の通知メッセージの転送を修正しました。(Tatsuo Ishii)
セッションコンテキストが確立される前の認証段階で、バックエンドからの通知メッセージを安全に転送するようにしました。 これにより、PostgreSQL 19以降が出力するMD5認証の通知メッセージによってFATALエラーが発生する問題を修正しました。
この問題はharudiniによって報告されました。
ディスカッション: Regression test failures against PostgreSQL 19 beta #168
「make do_query send Sync rather than Flush」の変更を取り消しました。(Tatsuo Ishii)
この変更では、Flushの代わりにSyncを送信することで、内部クエリによって開始された暗黙のトランザクションを終了させようとしていました。 しかし、パイプラインのトランザクションが本来の動作をしなくなるため、その後コミット961ce127fで取り消されました。 この動作は最終的なリリースには含まれません。
ディスカッション: low level protocol, implicit transactions , "idle in transaction" issue
不足していたvolatile修飾子を追加しました。(Tatsuo Ishii)
my_backend_statusを介した共有バックエンド状態へのアクセスに、不足していたvolatile修飾子を追加しました。 これにより、コンパイラの最適化によって古い状態値が使用されることを防ぎます。
ディスカッション: Adding volatile qualifier
read_kind_from_backend()で不正なErrorResponseの長さを拒否するようにしました。(Tatsuo Ishii)
read_kind_from_backend()で、バックエンドから受信したErrorResponseの長さが長さフィールドのサイズより小さい場合に拒否するようにしました。
これにより、不正な応答の処理時にヒープバッファの上書きや符号なし整数のアンダーフローが発生することを防ぎます。
この問題はEmond Papegaaijによって報告されました。
ディスカッション: Reject sub-minimum ErrorResponse length in read_kind_from_backend.
pool_do_auth()でセグメンテーション違反が発生する問題を修正しました。(Tatsuo Ishii)
共有メモリ上のメインノードIDを個別にコピーするのではなく、コピーしたバックエンドの状態からローカルのメインノードIDを決定するようにしました。
これにより、フェイルオーバー中の状態の不整合によってpool_do_auth()でNULLの接続ポインタが参照されることを防ぎます。
また、共有メモリからの読み取りにvolatile修飾子を追加しました。
ディスカッション: [PATCH] Segfault in pool_do_auth() when failover races with a new connection
Pgpool-IIのメインプロセスのシグナルハンドラで安全でない操作を行わないようにしました。(Tatsuo Ishii)
メインプロセスの終了処理をSIGTERM、SIGINT、およびSIGQUITのハンドラの外に移しました。 ハンドラでは要求を記録してメインループを起床させ、メインループが通常のプロセス実行コンテキストで終了処理を行うようにしました。 これにより、シグナルハンドラ内の安全でない操作によってクラッシュ、ハング、またはメモリ破壊が発生することを防ぎます。
この問題はEmond Papegaaijによって報告されました。
ディスカッション: Fix signal handler in pgpool main
バックエンドノードの停止後にクエリコンテキストの解放済みメモリを使用する問題を修正しました。(Tatsuo Ishii)
クエリコンテキストをセッションのメモリコンテキスト内に割り当て、セッション単位の送信済みメッセージ一覧と保留中メッセージ一覧からの参照が有効なまま保たれるようにしました。 以前は、バックエンドの停止によってクエリ処理ループがこれらの一覧から参照中のコンテキストを解放し、解放済みメモリの使用やクラッシュにつながる可能性がありました。
ディスカッション: Use-after-free crash
拡張クエリモードでCOPY INがハングする問題を修正しました。(Tatsuo Ishii)
バックエンドからのCopyInResponseを待ってからCOPYデータを転送し、CopyDoneの後にフロントエンドのSyncを処理できるようにしました。 これにより、ストリーミングレプリケーションモードで拡張クエリプロトコルを使ってCOPY FROM STDINを実行するとハングする問題を修正しました。
この問題はliujinyang-highgoによって報告されました。
pcp_node_infoがハングする問題を修正しました。(Tatsuo Ishii)
PCPのノード情報応答の長さを計算して送信する前に、共有メモリ上のレプリケーション状態を表す文字列をローカルバッファにコピーするようにしました。 以前は、同時更新によって宣言されたパケット長と実際のデータ長が一致しなくなり、pcp_node_infoがハングする可能性がありました。
ディスカッション: Race condition in pcp_node_info can cause it to hang
read_kind_from_backend()のコメントの誤字を修正しました。(Tatsuo Ishii)
ディスカッション: Fix comment for read_kind_from_backend
disable_load_balance_on_write使用時のクエリキャッシュ処理を修正しました。(Tatsuo Ishii)
実際の書き込みを、disable_load_balance_on_writeが使用する状態とは別に追跡するようにしました。 これにより、このパラメータをtrans_transaction、dml_adaptive、またはalwaysに設定した場合にクエリキャッシュが誤って使用される問題を修正しました。
ドキュメントの誤ったリンクを修正しました。(Bo Peng)
018.detach_primary回帰テストを改善しました。(Tatsuo Ishii)
018.detach_primaryで、不正なストリーミングレプリケーションのプライマリノードの切り離しをテストする前に、watchdogのクォーラム成立を明示的に待つようにしました。
006.memqcache回帰テストを安定化しました。(Tatsuo Ishii)
006.memqcacheのストリーミングレプリケーションのテストで同期レプリケーションを使用するようにしました。 これにより、新しく作成したロールがスタンバイでまだ利用できない場合など、レプリケーション遅延による断続的な失敗を防ぎます。
regress.shで数値のPostgreSQLバージョン番号を使用するように修正しました。(Tatsuo Ishii)
回帰テストスクリプトで使用するPostgreSQLのバージョンから数値以外の接尾辞を除去し、20develのような開発版のバージョン文字列を数値比較に使用できるようにしました。
テストのタイムアウトを300秒から360秒に延長しました。(Tatsuo Ishii)
006.memqcacheの実行時間の増加に対応するため、回帰テストのタイムアウトを300秒から360秒に延長しました。
sleepの代わりにwait_for_pgpool_startupを使用するようにしました。(Tatsuo Ishii)
110.memory_leakと111.cancel_queryで、固定の1秒間の待機の代わりにwait_for_pgpool_startup()を使用し、起動に関連する断続的なテスト失敗を防ぐようにしました。