FlawOpen

flawopen.com/AI Security/cve-2026-107322-aws-databases-on-aws-psql-command-injection

● CVE-2026-107322 · CVSS 7.8[1], [4] · 高
セキュリティ研究 · FlawOpen

CVE-2026-107322:AWSエージェントプラグインのpsqlコマンド注入

CVE-2026-107322はAWSのdatabases-on-awsプラグインに含まれる任意のpsql helperに影響しました。入力フィルターがpsqlメタコマンドを見逃しており、ホスト上での実行にはagentが後から値をhelperへ渡す必要があります。1.7.1以降へ更新してください。[1], [2], [4]

CVSS ベクトルCVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H[1], [4]
💡 わかりやすい解説 (ELI5)

担当者がメモのSQL文を確認しても、データベースクライアントには別のコマンド言語があることを忘れている状況です。外部コンテンツが第2のインタープリターに届くのは、agentがローカルhelperへ渡した場合だけです。修正では実行前にその構文を拒否します。[1], [2]

主要な概念と専門用語

psqlメタコマンド
データベースサーバーではなく、PostgreSQL対話型クライアントが解釈する命令です。SQLとは別の解析境界です。[2], [3]
CWE-184:禁止入力リストの不備
フィルターが一部の形式を拒否しても、後段が特別な意味に解釈する別の形式を見落とす弱点です。[2], [4]
agentが受け取るコンテンツ
リモートまたは信頼できない情報源からAI agentに届くデータです。AWSは到達経路を示していません。[1]
ローカルhelper
agentと同じホストで動く任意のpsql接続スクリプトです。OSコマンドはhelperプロセスの権限で実行されます。[1], [3]

フレームワーク対応

  • このガイドで説明する弱点の CWE 参照: CWE-184

ステップ・バイ・ステップの攻撃フロー

ステップ 1

信頼できないコンテンツがagentに届く

AWSは未認証のリモート攻撃者がagentに取り込ませるコンテンツを提供できるとしています。公開情報は出所や経路を明らかにしていないため、特定のprompt injection経路を断定しません。[1], [2]

ステップ 2

agentがhelperへ値を渡す

脆弱な条件には、agentが準備された値でローカルhelperを呼び出す必要があります。受信だけでは実行されません。[1], [3]

ステップ 3

SQL検査ではpsqlの言語を捕捉できない

helperは区切りやコメントを検査しますが、残ったバックスラッシュは拒否しません。psqlはメタコマンドをローカルで解釈します。[2], [3]

ステップ 4

helperは実行前に構文を拒否する

上流修正は既存検査の前に残った文字を確認します。1.7.1以降へ更新し、各環境の版を確認してください。[1], [2], [3]

根本原因の分析 (Root Cause)

AWS とメンテナーは、CVE-2026-107322 の原因を databases-on-aws の任意利用可能な psql 接続 helper にある不完全な入力フィルターと説明しています。修正前、検証処理は作業用コピーから単一引用符で囲まれた SQL リテラルを除去し、SQL の文区切りとコメントを拒否していましたが、psql クライアントがメタコマンド構文として解釈するバックスラッシュを残していました。修正ではリテラル処理後、既存の検査前に残ったバックスラッシュを拒否し、見落とされていた解析境界を塞ぎます。[1], [2], [3]

ソースコード比較:脆弱 vs 堅牢化

上流パッチは単一引用符内のSQLリテラルを除去した後、psql呼び出しや既存検査の前に残ったバックスラッシュを拒否します。これは簡略例であり、汎用SQLパーサーではありません。元の引用符処理には文書化された境界ケースがあります。複雑または信頼できないクエリでは、AWSの推奨どおり任意のshell helperを避け、DSQL MCP serverまたは手動レビュー済みSQLを使用してください。最小権限で実行すれば影響を抑えられますが、更新の代替にはなりません。[2], [3]

ソース抜粋: plugins/databases-on-aws/scripts/psql-connect.sh — --commandフィルターの簡略例

脆弱な実装
# 抜粋:SQL を対象とした検査では psql メタコマンド構文を拒否できませんでした。
stripped=$(echo "$COMMAND" | sed "s/'[^']*'//g")
if echo "$stripped" | grep -q ';'; then
  echo "Error: multiple SQL statements are not allowed." >&2
  exit 1
fi
if echo "$stripped" | grep -q -- '--'; then
  echo "Error: SQL comments are not allowed." >&2
  exit 1
fi
psql --command "$COMMAND"
堅牢化されたセキュアパッチ
# 上流の 1.7.1 での修正に基づく抜粋です。
stripped=$(echo "$COMMAND" | sed "s/'[^']*'//g")
if echo "$stripped" | grep -q '\\'; then
  echo "Error: psql meta-commands are not allowed." >&2
  exit 1
fi
if echo "$stripped" | grep -q ';'; then
  echo "Error: multiple SQL statements are not allowed." >&2
  exit 1
fi
if echo "$stripped" | grep -q -- '--'; then
  echo "Error: SQL comments are not allowed." >&2
  exit 1
fi
psql --command "$COMMAND"

エンジニアリング&システム堅牢化チェックリスト

参考資料

← AI Security Directory →