⭐ Fix unbounded recursive handling of SSL/GSS in ProcessStartupPacket()
Michael Paquier
SSL/GSSネゴシエーション処理が複数回の起動パケット処理にまたがる再帰を無制限に行っており、悪意あるクライアントが拒否済みのSSL/GSSリクエストを交互に送り続けることでバックエンドをスタックオーバーフローでクラッシュさせるDoS攻撃が可能だった。ProcessStartupPacket()を修正してネゴシエーション試行回数をパケット処理をまたいで追跡するようにした。
技術的課題: ネゴシエーション試行が呼び出しをまたいで追跡されていなかったため、スタックフレームが際限なく積み重なっていた。
⭐ Fix SQL injection in logical replication origin checks.
Noah Misch
ALTER SUBSCRIPTION ... REFRESH PUBLICATIONがスキーマ名・リレーション名をクォートせずにSQL文字列へ埋め込んでいたため、細工されたサブスクライバー側リレーション名によってパブリッシャー上で任意のSQLを実行できた。CVE-2026-6638としてv16以降にバックパッチ。
⭐ Prevent path traversal in pg_basebackup and pg_rewind
Michael Paquier
不正なエンドポイントから受信したパスをそのままクライアント側の出力パスとして使用していたため、pg_basebackupのastreamerによるtarデータ処理(v15以降)とpg_rewindのlibpq経由ファイル操作の両方でパストラバーサル攻撃が成立していた。
技術的課題: tarデータストリーミング時に出力パスの検証が全く行われていなかった。
⭐ refint: Fix SQL injection and buffer overruns.
Nathan Bossart
check_foreign_key()内で悪意を持って細工されたキー値の更新によりSQLインジェクションが可能だった。新キー値を内部生成SQLに埋め込む際のクォート・エスケープ処理を追加するとともに、スタックバッファをStringInfoに置き換えてバッファオーバーランも修正した。
⭐ Make palloc_array() and friends safe against integer overflow.
Tom Lane
palloc_array()等のマクロが大きなcount引数で検出されない整数オーバーフローを起こし、確保したメモリより大きな領域への書き込みが可能になっていた。32ビットビルドで特に問題となるため、個別の呼び出し箇所をパッチするのではなくマクロ定義レベルで常時チェックを組み込む形で根本修正した。
Use palloc_array() in a few more places to avoid overflow
Heikki Linnakangas
32ビットシステムで整数オーバーフローが発生しうる複数箇所にpalloc_array()を適用した。CVE-2026-6473としてv14以降にバックパッチ。
Fix REPACK with WITHOUT OVERLAPS replica identity indexes
Álvaro Herrera
REPACKリプレイがレプリカアイデンティティインデックスのスキャンキー構築時にBTEqualStrategyNumberをハードコードしており、WITHOUT OVERLAPSプライマリキーに使われるGiSTインデックスなど非B-Treeインデックスで誤動作していた。またロッシースキャンの偽陽性も未考慮だったためfind_target_tuple()もIndexAmTranslateを使う形に修正した。
Remove test cases for field overflows in intarray and ltree.
Tom Lane
ppc64・s390xのビルドファームでスタックオーバーフローが報告されたintarray/ltreeのオーバーフローテストケースを一時的にリバートした。リリース後に再調査予定。CVE-2026-6473関連、v14以降。
Mark PQfn() unsafe and fix overrun in frontend LO interface.
Nathan Bossart
result_is_intが0の場合、PQfn()はサーバーが返したデータがバッファに収まるか検証できずオーバーランが発生する。廃止済みの同関数にドキュメント警告を追加し、フロントエンドのラージオブジェクトインターフェースはpqFunctionCall3()にbuf_sizeパラメータを追加して対処した。
Fix integer overflow in array_agg(), when the array grows too large
Heikki Linnakangas
NULL配列を大量に集約する際にnitemsがMaxAllocSizeに達する前にオーバーフローする可能性があった。makeArrayResultArr()での失敗を未然に防ぐため、MaxArraySizeを超えた時点で早期エラーとなるよう明示的なチェックを追加。v14以降にバックパッチ。
Fix integer-overflow and alignment hazards in locale-related code.
Tom Lane
pg_locale_icu.cで非常に長い入力文字列がバッファサイズ計算時の整数オーバーフローを引き起こしバッファオーバーランにつながる問題と、char[]配列をUCharバッファとして使用するアライメント不正を修正した。
Avoid overflow in size calculations in formatting.c.
Nathan Bossart
formatting.c内の複数関数で大きな整数に係数を掛けてアロケーションサイズとする箇所が32ビットシステムでオーバーフローし、小さすぎるバッファへの書き込みが発生しうる問題をpalloc_array()・mul_size()で修正した。
Check CREATE privilege on multirange type schema in CREATE TYPE.
Nathan Bossart
CREATE TYPEでmultirangeタイプを作成する際にスキーマへのCREATE権限チェックが欠落しており、任意のスキーマにmultirangeタイプを作成して特権昇格が可能だった。multirange名を明示しない場合は自動的にrangeタイプのスキーマに配置されるため、DefineRange()冒頭のチェックでは不十分だった。
pg_createsubscriber: Obstruct SQL injection via subscription names.
Nathan Bossart
drop_existing_subscription()がクエリ文字列生成時にサブスクリプション名をエスケープしていなかった。PQescapeIdentifier()を使用してALTER/DROP SUBSCRIPTIONコマンドを安全に構築するよう修正。CVE-2026-6476としてv17以降にバックパッチ。
Fix MCV input array checks in statistics restore functions
Michael Paquier
統計情報リストア用SQL関数がmost_common_valsとmost_common_freqsの配列サイズ一致・次元数を検証していなかったため、不整合なデータをカタログに挿入するとプランナのロード時にオーバーリードが発生しうる脆弱性を修正した。
Guard against unsafe conditions in usage of pg_strftime().
Tom Lane
pg_strftime()はエラー時に出力文字列がnull終端されず、呼び出し元がそのまま使用すると unsafe だった。maxsize > 0の場合は常にnull終端を保証し、エラー時は空文字列を返すようAPIを変更した。
Avoid passing unintended format codes to snprintf().
Tom Lane
timeofday()がpg_strftime()の出力に%が含まれないと仮定していたが、タイムゾーン名(%Z)経由で細工した%を混入させると後続のsnprintf()呼び出しでクラッシュやサーバーメモリの開示が可能だった。pg_strftime()呼び出しを2段階に分割してリテラル文字列として扱うことで修正した。
Apply timingsafe_bcmp() in authentication paths
Michael Paquier
SCRAM/MD5パスワード・SCRAMキー・ノンス・RADIUSなどの認証パスでタイミング攻撃に敏感な比較処理に使われていたmemcmp()やstrcmp()をtimingsafe_bcmp()に置き換えてサイドチャネル攻撃への耐性を強化した。
Guard against overflow in "left" fields of query_int and ltxtquery.
Tom Lane
contrib/intarrayのquery_int型がバイナリ演算子ノードの左オペランドへのオフセットをint16で保持しており、ツリーの形状によってはint16オーバーフローが発生しうる問題を修正した。ノード総数を制限するのではなく、各オフセット計算ごとに直接チェックを追加した。
Fix assorted places that need to use palloc_array().
Tom Lane
multirange_recvとBlockRefTableReaderNextRelationで32ビットシステム時のsize_tオーバーフロー・バッファオーバーランが発生しうる箇所にpalloc_array()を適用した。
Prevent buffer overrun in unicode_normalize().
Tom Lane
一部のUTF-8文字は多数のコードポイントに分解されるため、4G超の分解コードポイントが生成されるとdecomp_size変数がラップアラウンドし小さすぎるバッファへの書き込みが発生した。各加算後にMaxAllocSizeを超えていないかチェックするよう修正した。
Harden our regex engine against integer overflow in size calculations.
Tom Lane
NFA状態数・アーク数・カラー数の積に基づくアロケーションで32ビットシステム時にオーバーフローが発生し、バッファオーバーランによる攻撃が可能だった問題を修正した。citerdissect()・creviterdissect()での入力長ベースの配列アロケーションも合わせて対処した。
Fix overflows with ts_headline()
Michael Paquier
ts_headline()のStartSel・StopSel・FragmentDelimiterオプションの長さをint16で保持していたため、PG_INT16_MAXを超える値でオーバーフローが発生しgenerateHeadline()がクラッシュした。PG_INT16_MAXを超える入力値を明示的にブロックするよう修正した。
ltree: Fix overflows with lquery parsing
Michael Paquier
lqueryパーサーでOR区切りバリアントが多数あるレベルの合計長がuint16をオーバーフローする問題と、大量ノードでのuint16ノード数オーバーフローによるスタック破壊の問題を修正した。いずれもクラッシュにつながる。
doc PG 19 relnotes: adjustments/removal of items
Bruce Momjian — Discussion: pgsql-docs
PostgreSQL 19リリースノートの記載内容の調整と項目削除。John Naylorからの報告に基づく。
pg_upgrade: Message improvements
Peter Eisentraut
pg_upgradeのメッセージ表示を改善した小規模な変更。
HN ニュース
Tracing PostgreSQL Using eBPF and Hardware Breakpoints
スコア: 3 / コメント: 0
eBPFとハードウェアブレークポイントを組み合わせてPostgreSQLの内部動作をトレースする手法を解説した技術記事。ソースコードを変更せずにクエリ実行の詳細な分析が可能なアプローチを紹介している。
Show HN: PgQueuer v1.0 – Python job queue using only PostgreSQL
スコア: 2 / コメント: 0
PostgreSQLのみをバックエンドとして使用するPython製ジョブキューライブラリのv1.0リリース。RedisやRabbitMQなど外部メッセージブローカーを不要とするシンプルな構成が特徴。
まとめ
2026年5月11日はPostgreSQLにとって異例の大規模セキュリティリリース日となり、SQLインジェクション(CVE-2026-6638・CVE-2026-6476)、パストラバーサル、悪意あるクライアントによるサーバークラッシュ(SSL/GSS無制限再帰)、32ビットシステムを標的とした多数の整数オーバーフロー・バッファオーバーランなど、計26件もの脆弱性修正が一斉にコミットされた。特にpalloc_array()のオーバーフロー問題はマクロレベルで根本修正されており、v14以降の全サポートブランチへのバックパッチが広範に適用されている。セキュリティ修正の多さからは次期マイナーリリースの準備が最終段階に入っていることが伺える。
本ダイジェストはHacker News・GitHub・PostgreSQLメーリングリストの情報を元にclaudeで生成しました。