12年前から存在したPostgreSQLの脆弱性、バックアップ用アカウントによるコード実行とデータベース乗っ取りを許す

PostGREShellと名付けられた重大なPostgreSQLの脆弱性により、権限の低いバックアップ・レプリケーション用アカウントが任意のコードを実行できるようになるほか、データベースのスーパーユーザー権限への昇格や、脆弱なサーバーへの永続的なアクセス確立が可能になることが明らかになりました。

CVE-2026-6471として追跡されているこの脆弱性はCyera Researchによって発見されたもので、2014年にリリースされたバージョン9.4まで遡るPostgreSQLの各バージョンに影響します。PostgreSQLは2026年8月22日付のセキュリティリリースでこの問題に対処し、約12年間にわたって続いた脆弱性の窓を閉じました。

この不具合は、バックアップ処理やスタンバイデータベース、変更データキャプチャ(CDC)パイプライン、移行作業、モニタリング、分析などで一般的に利用されるPostgreSQLの論理レプリケーション機構に存在します。

組織では、完全なデータベース管理者権限を付与することなくWAL(先行書き込みログ)データにアクセスできるようにするため、サービスアカウントにREPLICATION属性を割り当てることがよくあります。

しかし、Vladimir Tokarev氏は、レプリケーション権限を持つユーザーがCREATE_REPLICATION_SLOTのワークフローを悪用し、悪意のある論理出力プラグインを指定できることを発見しました。PostgreSQLはこうしたプラグインを、Linuxでは.soファイル、Windowsでは.dllファイル、macOSでは.dylibファイルといったコンパイル済み共有ライブラリとして読み込みます。

プラグインが読み込まれると、その初期化コードはPostgreSQLのサーバープロセス内で実行されます。この本来危険な機能は、SQLのLOADコマンドにおいて、ライブラリ名を制限する検証機構によって保護されているのが通常です。

Vladimir Tokarev氏によれば、この検証はレプリケーションプロトコルの経路には存在していませんでした。その結果、攻撃者はディレクトリトラバーサルのシーケンスや絶対パス、バックスラッシュ、WindowsのUNCパスを含むプラグインのパスを指定できてしまいます。

データベースサーバーは、指定された場所をそのままオペレーティングシステムのライブラリローダーに渡すため、攻撃者が制御するコードがPostgreSQLサーバープロセスの権限で実行されてしまう可能性があります。

実際の影響はプラットフォームによって異なります。Windowsでは、攻撃者が悪意のあるDLLをSMB共有上にホストし、UNCパス経由でPostgreSQLにリモートから読み込ませることができる可能性があります。

NFSの自動マウントが有効になっているLinuxおよびmacOSのシステムでも、リモートからのライブラリ読み込みが起こり得ます。それ以外の環境では、攻撃者があらかじめ対象システムに悪意のある共有ライブラリを配置しておく必要がある場合があります。

PostgreSQLプロセス内で任意のコードが実行されるようになると、攻撃者はデータベースのSQL権限モデルを回避できるようになります。

今回の調査では、悪意のあるプラグインが内部の権限データを改ざんし、アカウントをスーパーユーザー権限に昇格させ、標準的なSQL権限チェックに頼ることなく認可の挙動を書き換える仕組みが説明されています。

PostgreSQLのスーパーユーザーは、複数のデータベースにまたがるデータへのアクセスや、データベースプロセスが読み取り可能なファイルの読み取り、ファイルの書き込み、さらにはサポートされている管理機能を通じたOSコマンドの実行も可能になります。

研究者たちはまた、攻撃者がpg_hba.confの変更や悪意のあるshared_preload_librariesエントリの追加、不正なスーパーユーザー権限の再付与など、複数の永続化手段を確立し得ると警告しています。

管理者は直ちにPostgreSQLのセキュリティアップデートを適用し、REPLICATION属性が割り当てられているすべてのアカウントを見直す必要があります。レプリケーションへのアクセスは、厳格に管理されたpg_hba.confルールを通じて、必要最小限のアカウントと信頼できる送信元IPアドレスのみに制限すべきです。

セキュリティチームは、データベースサーバーからのポート445(SMB)およびポート2049(NFS)への不要な送信トラフィックもブロックすべきです。監視体制では、想定外のレプリケーションスロット作成の試みや、見慣れないプラグイン名、/\..を含むプラグインパスをフラグ検出できるようにしておく必要があります。

今回の脆弱性は、プラグイン読み込み機能がすべてのサーバーインターフェースで一貫して保護されていない場合、運用上のバックアップ用認証情報が影響の大きい攻撃経路になり得ることを浮き彫りにしています。

不審な活動をより迅速に調査し、事業への影響が拡大する前に脅威を封じ込めるための可視性とコンテキストを、貴社のセキュリティチームに。ANY.RUNで調査を強化する

翻訳元: https://cyberpress.org/12-year-old-postgresql-flaw/

本記事は cyberpress.org の記事を翻訳・要約したものです。