Upgrade to Pro — share decks privately, control downloads, hide ads and more …

セキュリティ対策としての PostgreSQL マイナーバージョンアップ

セキュリティ対策としての PostgreSQL マイナーバージョンアップ

PostgreSQL Conference Japan 2025 の発表資料です。
https://www.postgresql.jp/jpug-pgcon2025#E1

Avatar for Yuichiro Narita

Yuichiro Narita

November 19, 2025
Tweet

More Decks by Yuichiro Narita

Other Decks in Technology

Transcript

  1. Copyright (c) The Japan Research Institute, Limited アジェンダ ⚫ 脆弱性情報の確認方法

    ⚫ 脆弱性情報の簡易分析 ⚫ PostgreSQL のライフサイクル ⚫ (参考) 第三者によるパッチサービス ⚫ マイナーバージョンアップの内容 ⚫ マイナーバージョンアップの流れ ⚫ (参考) マイナーバージョンアップ後の戻し ⚫ マイナーバージョンアップ時の追加手順 ⚫ (参考) REINDEX ⚫ ダウンタイムの極小化 ⚫ 周辺ツールのバージョンアップ JPUG-PGCON2025-E1 本資料の最終版は Qiita↓で公開します いいね・ストック・フォローいただけると励みになります
  2. Copyright (c) The Japan Research Institute, Limited 3/15 脆弱性情報の確認方法 ⚫

    PostgreSQL の脆弱性情報は公式サイトの Support > Security > Known PostgreSQL Security Vulnerabilities から確認可能 JPUG-PGCON2025-E1 利用バージョンが 17.6, 16.10, 15.14, 14.19, 13.22 未満の場合はこれらの脆弱性対策が残存! (12以下は Unsupported) 出所:PostgreSQL: Security Information | https://www.postgresql.org/support/security/
  3. Copyright (c) The Japan Research Institute, Limited 4/15 脆弱性情報の確認方法 ⚫

    PostgreSQL の脆弱性情報は公式サイトの Support > Security > Known PostgreSQL Security Vulnerabilities から確認可能 JPUG-PGCON2025-E1 ⚫ CVE-2025-8713~8715詳細 CVEID Detail (原文) Detail (翻訳) CVE-2025-8715 Improper neutralization of newlines in pg_dump in PostgreSQL allows a user of the origin server to inject arbitrary code for restore-time execution as the client operating system account running psql to restore the dump, via psql meta-commands inside a purpose-crafted object name. The same attacks can achieve SQL injection as a superuser of the restore target server. pg_dumpall, pg_restore, and pg_upgrade are also affected. PostgreSQLのpg_dumpにおける改行コードの不適切な無効化により、オリジン サーバーのユーザーが、ダンプをリストアするためにpsqlを実行しているクライアントOSア カウントで、意図的に細工されたオブジェクト名内のpsqlメタコマンドを使用することで、 リストア時に任意のコードを挿入することが可能です。同様の攻撃により、リストア対象 サーバーのスーパーユーザーとしてSQLインジェクションを実行することも可能になります。 pg_dumpall、pg_restore、pg_upgradeも影響を受けます。 CVE-2025-8714 Untrusted data inclusion in pg_dump in PostgreSQL allows a malicious superuser of the origin server to inject arbitrary code for restore-time execution as the client operating system account running psql to restore the dump, via psql meta-commands. pg_dumpall is also affected. pg_restore is affected when used to generate a plain-format dump. PostgreSQLのpg_dumpに信頼できないデータが含まれているため、オリジンサー バーの悪意のあるスーパーユーザーが、psqlメタコマンドを介して、psqlを実行している クライアントOSアカウントでリストア時に任意のコードを挿入し、ダンプをリストアすること が可能です。pg_dumpallも影響を受けます。pg_restoreは、プレーンフォーマット のダンプを生成する際に影響を受けます。 CVE-2025-8713 PostgreSQL optimizer statistics allow a user to read sampled data within a view that the user cannot access. Separately, statistics allow a user to read sampled data that a row security policy intended to hide. PostgreSQL maintains statistics for tables by sampling data available in columns; this data is consulted during the query planning process. Prior to this release, a user could craft a leaky operator that bypassed view access control lists (ACLs) and bypassed row security policies in partitioning or table inheritance hierarchies. Reachable statistics data notably included histograms and most- common-values lists. PostgreSQL オプティマイザ統計により、ユーザーはアクセスできないビュー内のサンプ ルデータを読み取ることができます。また、統計により、行セキュリティ ポリシーで非表示 にすることを意図したサンプルデータを読み取ることもできます。PostgreSQL は、列 で利用可能なデータをサンプリングしてテーブルの統計を維持します。このデータは、ク エリ計画プロセス中に参照されます。このリリースより前は、ユーザーは、ビューのアクセ ス制御リスト (ACL) をバイパスし、パーティションまたはテーブル継承階層の行セキュリ ティ ポリシーをバイパスする漏洩演算子を作成することができました。アクセス可能な 統計データには、特にヒストグラムと最頻値リストが含まれていました。
  4. Copyright (c) The Japan Research Institute, Limited 5/15 脆弱性情報の簡易分析 ⚫

    PostgreSQL 公式サイトに掲載された脆弱性情報を深刻度レベル別に集計 ⚫ 「緊急」はないものの「重要」は定常的に発生 → 特定の脆弱性に対応する個別パッチのようなものは無く、定期的なマイナーバージョンアップが重要 JPUG-PGCON2025-E1 1 1 2 1 3 1 2 2 1 1 2 2 1 4 2 2 1 1 4 6 5 1 2 3 3 3 2 0 1 7 2 0 1 8 2 0 1 9 2 0 2 0 2 0 2 1 2 0 2 2 2 0 2 3 2 0 2 4 2 0 2 5 7.0~8.9 4.0~6.9 0.1~3.9 出所:共通脆弱性評価システムCVSS v3について(付録1) https://www.ipa.go.jp/security/guide/vuln/ug65p90000019bum-att/000081020.pdf ⚫ 脆弱性情報の集計結果と CVSS のレベル分け
  5. Copyright (c) The Japan Research Institute, Limited 6/15 v12 ▼.0

    ▼.1 ▼.2 ▼.3 ▼.4 ▼.5 ▼.6 ▼.7 ▼.8 ▼.9 ▼.10 ▼.11 ▼.12 ▼.13 ▼.14 ▼.15 ▼.16 ▼.17 ▼.18 ▼.19 ▼.20 ▼.21 ▼.22 v13 ▼.0 ▼.1 ▼.2 ▼.3 ▼.4 ▼.5 ▼.6 ▼.7 ▼.8 ▼.9 ▼.10 ▼.11 ▼.12 ▼.13 ▼.14 ▼.15 ▼.16 ▼.17 ▼.18 ▼.19 ▼.20 ▼.21 ▼.22 ▽.23 v14 ▼.0 ▼.1 ▼.2 ▼.3 ▼.4 ▼.5 ▼.6 ▼.7 ▼.8 ▼.9 ▼.10 ▼.11 ▼.12 ▼.13 ▼.14 ▼.15 ▼.16 ▼.17 ▼.18 ▼.19 ▽.20 v15 ▼.0 ▼.1 ▼.2 ▼.3 ▼.4 ▼.5 ▼.6 ▼.7 ▼.8 ▼.9 ▼.10 ▼.11 ▼.12 ▼.13 ▼.14 ▽.15 v16 ▼.0 ▼.1 ▼.2 ▼.3 ▼.4 ▼.5 ▼.6 ▼.7 ▼.8 ▼.9 ▼.10 ▽.11 v17 ▼.0 ▼.1 ▼.2 ▼.3 ▼.4 ▼.5 ▼.6 ▽.7 v18 ▼.0 ▽.1 2025 2019 2020 2021 2022 2023 2024 PostgreSQL のライフサイクル ⚫ PostgreSQL のコミュニティによるサポートはメジャーバージョンのリリースから5年間 (OracleDB などと比較して短い) ⚫ サポート期間中は四半期ごと (2, 5, 8, 11月の第二木曜日) にマイナーバージョンがリリース。稀に左記以外のタイミングで緊急リリースあり ⚫ PostgreSQL を使用している SW/MW が新しいマイナーバージョンに対応しているかは要チェック ⚫ PostgreSQL 12 以降のマイナーバージョンリリース実績・予定 JPUG-PGCON2025-E1 2019/10/3 2019/11/14 (+42d) 2022/5/12 2022/6/16 (+35d) 2022/10/13 2022/11/10 (+28d) 2024/11/14 2024/11/21 (+7d) 2025/2/13 2025/2/20 (+7d)
  6. Copyright (c) The Japan Research Institute, Limited 7/15 (参考) 第三者によるパッチサービス

    ⚫ コミュニティサポートが終了したメジャーバージョンに対して、第三者がパッチを提供するサービスあり ⚫ 脆弱性対策の観点で、類似サービスの利用や運用中のメジャーバージョンアップを検討するのがベター JPUG-PGCON2025-E1 出所:パッチサービス: PostgreSQL保守サポートサービス | NEC | https://jpn.nec.com/postgresql/patch_service.html
  7. Copyright (c) The Japan Research Institute, Limited 8/15 マイナーバージョンアップの内容 ⚫

    マイナーバージョンアップの内容は公式サイトの Documentation > Release Notes から確認可能 ⚫ 17の直近のリリースノートを分析すると、そのほとんどは不具合修正で機能変更はわずか JPUG-PGCON2025-E1 64 55 63 6 5 5 1 1 3 1 7 .3 1 7 .5 1 7 .6 不具合修正 機能変更 脆弱性修正 ⚫ リリースノートと分析結果 ⚫ 機能変更に分類した項目の例 (17.6) ✓ Reject equal signs (=) in the names of relation options and foreign-data options ✓ (翻訳) リレーションオプションおよび外部データオプション名に等号 (=) を含むことを拒否 ✓ (見解) ほとんどのストレージパラメータは、そもそも "=" を含む名前を定義しておらず影響はほぼ無しと考えられる 出所:PostgreSQL: Release Notes | https://www.postgresql.org/docs/release/17.6/
  8. Copyright (c) The Japan Research Institute, Limited 9/15 マイナーバージョンアップの流れ ⚫

    マイナーバージョンアップ自体は、環境差はあれど短時間で完了 (実機測定 (17.2→17.3) では11秒) ⚫ 停止・起動時間はシステム特性に依存する為、直近のログなどから確認 ⚫ (参考) 停止時間は直近のチェックポイント以降の更新量などが影響。起動時間はメモリサイズなどが影響 JPUG-PGCON2025-E1 ⚫ マイナーバージョンアップの流れと標準出力 [root@instance-20251031-1021 opc]# date Fri Oct 31 01:41:32 AM GMT 2025 [root@instance-20251031-1021 opc]# dnf upgrade -y postgresql17-server-17.3-1PGDG.rhel9 Last metadata expiration check: 0:16:03 ago on Fri 31 Oct 2025 01:25:31 AM GMT. Dependencies resolved. ============================================================================================= Package Architecture Version Repository Size ============================================================================================= Upgrading: postgresql17 x86_64 17.3-1PGDG.rhel9 pgdg17 1.9 M postgresql17-libs x86_64 17.3-1PGDG.rhel9 pgdg17 340 k postgresql17-server x86_64 17.3-1PGDG.rhel9 pgdg17 7.0 M (snip) Upgraded: postgresql17-17.3-1PGDG.rhel9.x86_64 postgresql17-libs-17.3-1PGDG.rhel9.x86_64 postgresql17-server-17.3-1PGDG.rhel9.x86_64 Complete! [root@instance-20251031-1021 opc]# date Fri Oct 31 01:41:43 AM GMT 2025 DB停止 バージョンアップ DB起動 (追加手順)
  9. Copyright (c) The Japan Research Institute, Limited 10/15 (参考) マイナーバージョンアップ後の戻し

    ⚫ マイナーバージョンアップ後の戻しも短時間でシンプル JPUG-PGCON2025-E1 ⚫ 17.2 → 17.3 にバージョンアップ後、17.2 に戻し [root@instance-20251107-1019 opc]# date Fri Nov 7 02:13:56 AM GMT 2025 [root@instance-20251107-1019 opc]# dnf downgrade -y postgresql17-server-17.2 Last metadata expiration check: 0:09:30 ago on Fri 07 Nov 2025 02:04:43 AM GMT. Dependencies resolved. ================================================================================ Package Arch Version Repository Size ================================================================================ Downgrading: postgresql17 x86_64 17.2-1PGDG.rhel9 pgdg17 1.9 M postgresql17-libs x86_64 17.2-1PGDG.rhel9 pgdg17 339 k postgresql17-server x86_64 17.2-1PGDG.rhel9 pgdg17 7.0 M (snip) Downgraded: postgresql17-17.2-1PGDG.rhel9.x86_64 postgresql17-libs-17.2-1PGDG.rhel9.x86_64 postgresql17-server-17.2-1PGDG.rhel9.x86_64 Complete! [root@instance-20251107-1019 opc]# date Fri Nov 7 02:14:19 AM GMT 2025
  10. Copyright (c) The Japan Research Institute, Limited 11/15 マイナーバージョンアップ時の追加手順 ⚫

    マイナーバージョンによってはインデックスの再作成など追加手順が推奨されていることがある為、Release Notes を要確認 ⚫ 独自の集計では、インデックスの再作成が最も多く、次いで制約の再定義が多い JPUG-PGCON2025-E1 ⚫ 17.6 Release Notes ⚫ 17.5 Release Notes 出所:PostgreSQL: Release Notes | https://www.postgresql.org/docs/release/17.6/ 出所:PostgreSQL: Release Notes | https://www.postgresql.org/docs/release/17.5/ ただし、パーティションテーブルに自己参照型の外部キー制約がある場合は、それらの制約が正しく適用されていることを確認 するために、それらの制約を再作成する必要がある場合があります。以下の 2 番目の変更ログエントリを参照してください。 また、BRIN ブルームインデックスがある場合は、アップデート後に再インデックスすることをお勧めします。 ただし、BRIN numeric_minmax_multi_ops インデックスを使用している場合は、 アップデート後に再インデックスすることをお勧めします。
  11. Copyright (c) The Japan Research Institute, Limited 12/15 (参考) REINDEX

    ⚫ REINDEX はインデックスを再作成し、古いファイルと置き換えるコマンド ⚫ 排他ロックを取得するため、メンテナンス中か CONCURRENTLYオプションを付けて実行 JPUG-PGCON2025-E1 出所:REINDEX | https://www.postgresql.jp/document/17/html/sql-reindex.html CONCURRENTLY このオプションが使われると、PostgreSQLは、そのテーブルで同時実行される挿入、更新、削除を妨 げるようなロックを取得せずにインデックスを再構築します。一方、標準のインデックス再構築は終了する までテーブルの書き込みをロックします(読み込みはロックしません)。 このオプションを使用する場合に 注意すべき点がいくつかあります—下記のインデックスを同時に再構築を参照してください。 一時テーブルに対してはREINDEXは常に同時再作成ではありません。他のセッションはアクセスできま せんし、同時でないインデックス再作成の方がより安価だからです。 REINDEX の TPS影響を測定した Qiita記事はこちら→
  12. Copyright (c) The Japan Research Institute, Limited 13/15 ⚫ ストリーミングレプリケーション構成の例

    ダウンタイムの極小化 ⚫ ダウンタイムをさらに小さくする必要がある場合は、HAクラスタ構成やストリーミングレプリケーション構成を構築 JPUG-PGCON2025-E1 ⚫ HAクラスタ構成の例 AP 共有ディスク DBクラスタ PostgreSQL (ACT) クラスタリングSW OS PostgreSQL (STB) クラスタリングSW OS FIP AP ローカルディスク DBクラスタ PostgreSQL (PRI) クラスタリングSW OS PostgreSQL (STB) クラスタリングSW OS FIP ローカルディスク DBクラスタ ストリーミング レプリケーション ①バージョンアップ ③バージョンアップ ④フェイルバック ①停止 ②バージョンアップ ③起動・レプリ再開 ④停止・フェイルオーバー ⑤バージョンアップ ⑥起動・レプリ再開 ⑦スイッチバック ②フェイルオーバー
  13. Copyright (c) The Japan Research Institute, Limited 14/15 周辺ツールのバージョンアップ ⚫

    Pgpool-II をはじめとした周辺ツールでもセキュリティ修正のケースあり ⚫ 利用している周辺ツールとその修正頻度・内容などは要確認 JPUG-PGCON2025-E1 ⚫ Pgpool-II のセキュリティ修正例 出所:pgpool Wiki | https://www.pgpool.net/mediawiki/jp/index.php?title=%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8#Pgpool- II_4.6.1,_4.5.7,_4.4.12,_4.3.15,_4.2.22_%E3%81%8C%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%95%E3%82%8C%E3%8 1%BE%E3%81%97%E3%81%9F_(2025/05/15)
  14. Copyright (c) The Japan Research Institute, Limited 15/15 周辺ツールのバージョンアップ ⚫

    Pgpool-II をはじめとした周辺ツールでもセキュリティ修正のケースあり ⚫ 利用している周辺ツールとその修正頻度・内容などは要確認 JPUG-PGCON2025-E1 ⚫ Pgpool-II のセキュリティ修正例 出所:CVE Record: CVE-2025-46801 | https://www.cve.org/CVERecord?id=CVE-2025-46801