Pgpool-II 4.5.5 文書 | |||
---|---|---|---|
前のページ | 上に戻る | 付録 A. リリースノート | 次のページ |
リリース日: 2024-09-09
このリリースには、セキュリティ修正が含まれています。
クエリキャッシュ機能(項5.13)が有効な時に、データベースユーザがクエリキャッシュ経由で本来読み出せない行を読むことが可能でした。(CVE-2024-45624)
4.5.4, 4.4.9, 4.3.12, 4.2.19, 4.1.22より古く、クエリキャッシュ機能を持つすべてのバージョン(クエリキャッシュ機能は3.2で実装されました)がこの脆弱性の影響を受けます。
あるユーザのクエリキャッシュがテーブルに対して作成されていると、そのテーブルへのアクセス権がREVOKEコマンドで剥奪されても、アクセス権を持たないそのユーザがクエリキャッシュを通じてテーブルにアクセスすることが可能でした。
ユーザAのクエリキャッシュがテーブルに対して作成されていて、同じセッション内でSET ROLEあるいはSET SESSION_AUTHORIZATIONで他のユーザBに切り替えてそのテーブルにアクセスすると、アクセス権を持たないBがクエリキャッシュを通じてアクセスすることが可能でした。
ユーザAのクエリキャッシュが行セキュリティが有効なテーブルに対して作成されていて、同じセッション内でSET ROLEあるいはSET SESSION_AUTHORIZATIONで他のユーザBに切り替えてそのテーブルにアクセスすると、本来Bが見えない行をクエリキャッシュを通じて取り出すことが可能でした。
Pgpool-II 4.5.4, 4.4.9, 4.3.12, 4.2.19, 4.1.22以降へのアップグレードを強くお勧めします。 それができない場合は、クエリキャッシュ機能を無効にしてください。
なお、この脆弱性を修正するために、いくつかのコマンド(ALTER DATABASE, ALTER ROLE, ALTER TABLE, REVOKE)を実行すると、クエリキャッシュのすべてのデータを削除するようになりました。 これにより、クエリキャッシュの性能に影響があるかも知れません。
レプリケーションモードとスナップショットアイソレーションモードで発生する複数の不具合を修正しました。(Tatsuo Ishii)
次の不具合を修正しました。
レプリケーションモードおよびスナップショットアイソレーションモードでコマンドを実行すると、Pgpool-IIはクエリ準備完了メッセージを待ちますが、一部のコマンド(SET ROLEなど)がパラメータステータスメッセージを生成することを忘れていました。 その結果、Pgpool-IIはクエリ準備完了メッセージの前に他のメッセージが到着したことをエラーとして出力していました。
前のクエリがパラメータステータスメッセージを生成した場合、後続のparse()
はそれを読み取って処理する必要があります。
これは、パラメータステータスメッセージの後に続くはずのクエリ準備完了メッセージを読み取る必要があるためです。
ただし、ParameterStatus()
が呼び出されると、クエリ進行中フラグが設定され、このparse()
呼び出しで処理されるクエリが負荷分散されている場合、バックエンドからのパラメータステータスメッセージの1つだけが処理される可能性がありました。
パラメータステータスメッセージはSETコマンドによって生成され、SETコマンドはレプリケーションモードおよびスナップショットアイソレーションモードのすべての生きているバックエンドに送信されるため、すべての生きているバックエンドから送信される可能性がありました。
そのため、ParameterStatus()を呼び出す前に、クエリ進行中フラグを設定解除するように修正しました。