Pgpool-II 4.6.1 文書 | |||
---|---|---|---|
前のページ | 上に戻る | 付録 A. リリースノート | 次のページ |
リリース日: 2025-05-15
このリリースには、セキュリティ修正が含まれています。
Pgpool-IIのクライアント認証メカニズムには認証バイパスの脆弱性があります。 本来であれば認証が必要な場合でも、認証処理がスキップされてしまう可能性があります。 この脆弱性を悪用することで、攻撃者が任意のユーザとしてログインし、データベース内の情報を参照・改ざんしたり、データベースを停止させたりすることができる可能性があります。(CVE-2025-46801)
なお、本脆弱性の影響を受けるのは、下記のパターン1から3いずれかの条件を満たす場合に限られます。
パターン 1:次の条件をすべて満たす場合、本脆弱性の影響を受ける可能性があります。
pool_hba.confでpassword認証方式を使用している
allow_clear_text_frontend_auth = off
pool_passwdに対象ユーザのパスワードが設定されていない
pg_hba.confでscram-sha-256またはmd5認証方式を使用している
パターン 2:次の条件をすべて満たす場合、本脆弱性の影響を受ける可能性があります。
enable_pool_hba = off
pg_hba.confでpassword、pam、ldapのいずれかの認証方式を使用している
パターン 3:次の条件をすべて満たす場合、本脆弱性の影響を受ける可能性があります。
rawモードを使用している (backend_clustering_mode = 'raw')
pool_hba.confでmd5認証方式を使用している
allow_clear_text_frontend_auth = off
pool_passwdに対象ユーザのパスワードがテキストまたはAES形式で登録されている
pg_hba.confでpassword、pam、ldapのいずれかの認証方式を使用している
この脆弱性の影響を受けるのは、Pgpool-II 4.0系および4.1系のすべてのバージョン、4.2.0-4.2.21、4.3.0-4.3.14、4.4.0-4.4.11、4.5.0-4.5.6、4.6.0です。 Pgpool-II 4.6.1、4.5.7、4.4.12、4.3.15、4.2.22以降へのアップグレードを強くお勧めします。 それができない場合は、発生条件パターンに当てはまらない設定の組み合わせに変更してください。
設定ファイルにメジャーバージョンを追加しました。 (Bo Peng)
クライアント認証が正しく実行されない場合があるのを修正しました。(Tatsuo Ishii)
enable_pool_hbaがonで、auth methodが"password"、pool_passwdにパスワードが登録されておらず、pg_hba.confの認証方式が"scram-sha-256"か"md5"の場合、クライアントが最初にpgpoolに接続したときには認証が期待通りに実行されます。 しかし、クライアントがキャッシュされたコネクションに接続すると、任意のパスワードが通ってしまいます。
また、enable_pool_hba = offのいくつかのケースでは、本来パスワードが聞かれるはずが、最初からパスワードが聞かれない、あるいはキャッシュされたコネクションに接続した時にはパスワードが聞かれないことがありました。
上記を修正するのに加え、以下の変更を行いました。
認証コードを単純化するために、PostgreSQLが1台の時のコードパスを削除しました。
crypt認証のサポートをフロントエンドとバックエンドから削除しました。 この機能はドキュメントに書かれておらず、テストもされていませんでした。 また、crypt認証はPostgreSQLではだいぶ以前(8.4, 2009)に削除されています。
新しい回帰テストの"040.client_auth"を追加しました。 このテストは、CSV形式のテスト設定ファイルを使って、包括的なクライアント認証のテストを実施します。
クエリキャッシュにおける、古くからあるバインド時のバグを修正しました。(Tatsuo Ishii)
名前付きステートメントを準備すると、バインド後にパースメッセージなしで実行することが可能です。 問題は、実行時またはCOMMIT時にクエリキャッシュを無効化するために必要なテーブルOIDが、パースメッセージ処理(Parse())でのみ収集されていたことです。 そのため、前回の実行後にパースなしでバインドを実行すると、テーブルOIDが収集されず、pgpoolはクエリキャッシュの無効化に失敗していました。 バインド時にもテーブルOIDを収集するよう修正しました。 006.memqcacheに回帰テストを追加しました。
この問題はEmond Achilleas Mantziosによって報告され、テストプログラムが提供されました。
ディスカッション: [pgpool-general: 9427] Clarification on query results cache visibility
クエリキャッシュの無効化に失敗する問題を修正しました。 (Tatsuo Ishii)
実行メッセージを受信すると、pgpoolは最大行数パラメータをチェックします。この値が0でない場合、pgpoolはpool_handle_query_cache()にクエリキャッシュを作成しないよう指示するために、"partial_fetch"フラグを設定します。 問題は、コミット2a99aa5d1が、INSERT/UPDATE/DELETEであっても実行メッセージパラメータが0以外(ほとんどの場合1)に設定されpgpoolがSELECT以外の場合でもこのフラグを設定することを見落としていることです。 この結果、このフラグがtrueの場合、pool_handle_query_cache()内の後続のコードでキャッシュの無効化がスキップされるため、クエリキャッシュの無効化に失敗していました。 フラグを設定する前にクエリが読み取り専用のSELECTであるかどうかを確認するようにExecute()を修正しました。
この問題はEmond Achilleas Mantziosによって報告され、テストプログラムが提供されました。
ディスカッション: [pgpool-general: 9427] Clarification on query results cache visibility
OpenBSDへ移植する際の問題を修正しました。 (Tatsuo Ishii)
ディスカッション: [pgpool-hackers: 4582] Make pgpool build on OpenBSD
このパッチはMartijn van Durenによって作成されました。
json_writerが特殊文字を正確にエンコードできない問題を修正しました。(Bo Peng)
wd_authkeyが特殊文字を含んでいる状態でwatchdogを起動するとPgpool-IIがクラッシュしていました。
このパッチはMartijn van Durenによって作成され、Bo Pengによって微修正されました。
リロード時にpool_passwdを開くようにストリーミングレプリケーションチェックとヘルスチェックプロセスを修正しました。(Tatsuo Ishii)
ストリーミングレプリケーションチェックとヘルスチェックはリロード前にpool_passwdを開いていませんでした。 もしsr_check_passwordかhealth_check_passwordが空文字列の時は、pool_passwdからパスワードを得ます。 そのためこれらのプロセスはリロード時にpool_passwdの古いコンテンツを読み取ります。
IPv6が無効化されている環境におけるハートビート処理の不具合を修正しました。(#99) (Tatsuo Ishii)
Pgpool-II 4.6.0からは、ハートビートプロセスはIPv6受信機ソケットに対応しています。 しかし、IPv6が機能していないときこれらのプロセスは機能しません。 Pgpool-IIのメインプロセスやPostgreSQLのように、IPv4でも通常通り稼働するべきです。
クエリキャッシュのドキュメントをを改善しました。(Tatsuo Ishii)
Pgpool は、TIMESTAMP WITH TIMEZONE、TIME WITH TIMEZONEを返す関数を呼び出すクエリのキャッシュを拒否します。 同じ名前の関数が複数あり、そのうちの 1 つがTIMESTAMP WITH TIMEZONE、TIME WITH TIMEZONEを返す場合、たとえそのうちの 1 つがこれらのデータ型を返さなくても、Pgpoolはキャッシュを拒否します。 そのため、この問題に関するメモと回避策を追加しました。
connection_life_timeの説明を改善しました。(Tatsuo Ishii)
connection_life_timeが計算されるタイミングは、接続キャッシュを保持しているプロセスからクライアントが切断されたときであることを追記しました。
ディスカッション: [pgpool-hackers: 4577] Doc: enhance the description on connection_life_time
sr_check_userについての説明を改善しました。 (Tatsuo Ishii)
スーパーユーザーかpg_monitorグループであるべきです。
回帰テストで複数のソケットディレクトリを使用できるように修正しました。(Taiki Koshino, Tatsuo Ishii, Bo Peng)