何が起きたか
1.1.0より前のバージョンでは、カスタムpl-doツールはJSON引数を固定のドルクォート区切り文字列に連結してPostgreSQL DOブロックを構築し、エスケープ処理を行いませんでした。ドルクォートタグを含む巧妙に作成された引数がクォート領域を抜け出し、MCPクライアントが接続の権限で実行されるSQLを注入できるようになりました。
なぜ重要か
MCPクライアントは通常LLMエージェントです。ここでのSQLインジェクションは、プロンプト駆動のツール呼び出しを、接続されたロールに対する任意のDBアクセスに変え、エージェント(またはそのエージェントを狙ったプロンプトインジェクション)が意図されたツール契約を超えてデータベースコンテンツを読み取りまたは変更できるようにします。
攻撃経路
カスタムpl-doツールはJSON引数を固定のドルクォートタグで区切られたPostgreSQL DOブロックに補間しました。区切りトークンを含む引数がクォートを終了させ、接続されたデータベースロールとして任意のSQLを注入できました。
影響を受けるシステム
pgedge-postgres-mcp < 1.1.0(カスタムpl-doツール)
緩和策
pgedge-postgres-mcp 1.1.0にアップグレードしてください。MCPサーバーへのアクセスを信頼できるクライアントに制限し、データベースロールを最小権限に制限します。