何が起きたか
DBHub 0.22.6未満では、execute_sqlツールでreadonly=trueを設定しても接続が読み取り専用にならない。PostgreSQLのdefault_transaction_read_onlyとSQLiteのreadOnlyモードを設定するコードは、値が設定されることのない設定値でゲートされているため、キーワード分類子のみが残る。特権ロールは副作用のあるSELECTを使用して任意のファイルを書き込み(lo_export)、ホスト上の任意のファイルを読み取り(pg_read_file)、RCEを達成できる(dblink + COPY ... TO PROGRAM)。HTTPトランスポートは認証不要で、デフォルトで0.0.0.0にバインドされる。0.22.6で修正済み。
なぜ重要か
防御側がデータベース上のAIエージェントに対して依存する読み取り専用分離の約束が静かに破られ、認証不要の全インターフェースHTTPトランスポートと組み合わさることで、/mcpへの任意のネットワーク呼び出し元が、AIエージェントのデータアクセスを支えるDBサーバー上でホストファイルの読み書きやコマンド実行にエスカレーションできる。
攻撃経路
MCPエンドポイントへの認証不要SQL。副作用のあるSELECT(またはdblink/COPY TO PROGRAMチェーン)が読み取り専用分類子をバイパスして、ファイルの書き込み、ホストファイルの読み取り、データベースサーバー上でのコマンド実行を行う。
影響を受けるシステム
DBHubデータベースMCPサーバー < 0.22.6
緩和策
DBHub 0.22.6以降にアップグレードする。MCP HTTPトランスポートのネットワーク露出を制限する。非特権DBロールを使用する。