2026-05-04から2026-05-06までの間に、NVDはAI/エージェントのプロジェクトに対して4件のCVEを公開しました。それらはすべて、単一の形(ワンパターン)を共有しています。LLMが出力を生成し、アプリケーションがその出力を再検証せずに特権的な実行シンクへ投入し、シンクがそれを実行する——という構造です。
影響を受けるもの:SQLBot ≤1.7.0(text-to-SQL → PostgreSQL COPY FROM PROGRAM による RCE)、PPTAgent < commit 418491a(LLM生成コードのPython eval())、Evolver < 1.69.3(文字列連結によるシェルコマンド構築)、Dify < 1.13.1(認証なしのSVG XSSアップロード)。4件すべては単一のプローブクラスで検出可能です——不適切な出力処理、OWASP LLM05——しかし「LLM安全性」系の多くのツールでは、依然としてプロンプト側への注意喚起に焦点が当たりがちです。
正本(canonical)で全文を読んでください: https://www.at-helper.com/blog/four-cves-in-a-week-all-the-same-shape-when-agents-execute-llm-generated-code
なぜ全文ではなく抜粋を再掲載(クロスポスト)しているのか
Dev.toのレンダラーは、base64をインライン化したSVGダイアグラムをうまく扱えません。また、正本には、中心となる主張を視覚的に示す2行のコントロール配置図があります。ここに劣化したコピーを貼り付ける代わりに、正本URLに全文(図、完全なコードサンプル、そしてCVEごとの内訳テーブル)を残しています。以下に、圧縮した形で主張を示し、あわせてあなた自身でプローブを実行できるよう再現手順も載せます。
構造的な類似性
4つのプロジェクト、4つのメンテナチーム、4つのコードベース、4つのレビュー手順——そして同じ欠陥:
CVE プロジェクト シンク LLM側の引き金
CVE-2026-33324 SQLBot ≤ 1.7.0 PostgreSQL COPY FROM PROGRAM → RCE Text-to-SQLが検証されないまま実行されるSQLを出力
CVE-2026-42079 PPTAgent < 418491a スコープ内のビルトイン付きでLLM出力をeval() evalの呼び出し PPTAgent < 418491a LLM出力に含まれるPython式をスライドレイアウトのために生成するよう依頼
CVE-2026-42076 Evolver < 1.69.3 execSync() が curl ${corpus_param} を実行 LLMがコーパスパラメータからシェルコマンドを組み立てる
CVE-2026-42138 Dify < 1.13.1 認証なしのSVGアップロードでインライン表示される アップロードが無制限のファイルタイプを受け付け、SVGがDOM上でアクティブなコンテンツとしてレンダリングされる
4件すべてがOWASP LLM05(不適切な出力処理)です——LLM01(プロンプトインジェクション)とは異なります。なぜなら失敗のモードがモデルの下流にあるからです。インジェクション試行を検出するようチューニングされたプロンプト側のガードレールは、これら4件ではまったくアラートを出しません。ユーザーのプロンプト自体が悪意のあるものではないためです。攻撃対象となるのは出力であり、攻撃が成立するのはシンクに到達したときだけです。
「正しい配置」が意味するもの
各シンクに対する対策は、統計的なものではなく構造的なものです:
SQLシンク:パラメータ化クエリに加えて、文種のホワイトリストを適用します。COPY FROM PROGRAMが、LLM主導の経路から到達可能であるべきではありません。これはデータベースロールの判断です。
Python evalシンク:信頼できない入力に対する安全なeval()は存在しません。PPTAgentの修正は正しい形です(ast.literal_eval + 式タイプの小さなホワイトリスト)。エージェントが本当にLLM生成コードを実行する必要があるなら、別プロセスの境界で隔離し、ネットワークなし、ファイルシステムなしで実行してください。
シェルシンク:execFile/spawnで引数配列を使い、exec/execSyncで連結された文字列は使いません。これは1990年代のバグクラスです。LLMは、メタキャラクタを注入する新しい方法にすぎません。
DOMシンク:レンダリング前に、サーバー側でLLM影響コンテンツをサニタイズし、加えてCSPヘッダーを設定します。SVGは特に、DOMPurifyのようなサニタイザーを USE_PROFILES: { svg: true } で設定して処理すべきです。
これらはAI特有のものではありません。LLMが存在する前からあるアプリケーションセキュリティの実務が、LLM出力が特権的シンクと接合する“継ぎ目(seam)”に適用されているだけです。
自分のエージェントに対してプローブクラスを再現する
Anthropic-API互換ターゲット向けの単一コマンド手順:
curl -fsSL https://github.com/gy15901580825/at_helper_cli/releases/download/v0.1.1/athelper-probe-linux-x86_64 \
-o athelper-probe && chmod +x athelper-probe
./athelper-probe init --kind anthropic_native --out target.json
./athelper-probe run --target target.json --probes owasp_05_improper_output_handling
他にサポートされる --kind の値:openai_compat, custom_http, grpc, browser_use。browser_use の kind は browser_os_cmd_* プローブセットを公開しており、エージェントのシェルツール経路を合成コマンドペイロードに対してテストします(実際の機密情報の持ち出しはありません)。
プローブのyamlsは、Apache-2.0のもとでオープンソースで公開されています:https://github.com/gy15901580825/probes(その組織がプロビジョニングされ次第、athelper-research/probesへ移行されます)。
全文版を読む
正本には「うまくいかなかったもの(what we tried that didn't work)」の章が完全に含まれています(工学的な根拠つきで失敗した4つの防御)、コントロール配置図、そしてClaude Sonnet 4.6に対する15プローブのサンプル実行が掲載されており、全39件の結果が見えるようになっています:
サンプルレポート(生の出力、コメントなし):https://media.at-helper.com/samples/redteam-claude-sonnet-4-6-owasp-top10.html
もし、今月さらに同じ形の5件目のCVEを見つけたなら、本当にそれについて聞きたいです——DMするかコメントしてください。
Yang Gaoは、AIエージェント向けの信頼性とセキュリティのプラットフォームであるATHelperを運営しています。参照されているプローブセットは、ATHelperのオープンソースライブラリの一部です。ATHelper自体は、それらを読み込む実行基盤(runner)です。




