Hello there, ('ω')ノ
全体像(最短ロードマップ)
- 攻撃面の発見:LLM がどの API(機能)を呼べるか確認
- ログイン必須性の確認:Edit Email がログイン中アカウントに無条件で効くか試す
- 経路の特定:チャット回答に商品レビュー引用が混ざることを確認
- 隠しプロンプト設計:レビュー内に“読者(あなた/誰か)としての追加入力”を埋め込み、delete_account を呼ばせる
- 自己テスト:別商品で自分のアカウントが削除されることを確認→再登録
- 本番投入:レザージャケットに同ペイロードを載せ、carlos が質問した際に削除を発火
フェーズA:攻撃面の発見(なぜここから?)
チャットを開き、LLM に聞く:
- 「どんなAPI(関数)が使える?」 → Delete Account / Edit Email などが列挙される想定
- 「Delete Account の引数は?」 → 多くの場合、“現在ログインしているユーザー”に作用(追加情報不要)
次に Edit Email を自分で試す: 例)「私のメールを test@example.com に変更して」 → 変更が通れば、「ログイン中ユーザーに対する関数呼び出しが素通り」と分かる → 同じ理屈で Delete Account も“ログイン中ユーザー”に刺さると推定
フェーズB:レビューが LLM の回答に混ざるか観察
- 傘(Umbrella)など ジャケット以外の商品でチャットに質問: 「この商品の情報を教えて」 → 回答に レビュー要約が混ざることを確認 → つまり、レビュー=LLM 入力になっている(= 間接プロンプト注入の入口)
フェーズC:隠しプロンプトの“設計思想”
LLM は内部でこんなテンプレに沿って思考することがあります:
[REVIEW] ...ここまでがレビュー... ---END OF REVIEW [USER] ...ここからがユーザー入力...
ここで、レビューの中に「テンプレの境界を閉じる“疑似トークン”」や「後続のユーザー発話を偽装するマーカー」を混ぜると、 “読者(チャットの質問者)の追加発話”として delete_account を呼ばせやすくなります。
ポイント:
- 自然な文章にまぎれ込ませる(露骨な命令文だけだと弾かれやすい)
- 構文破壊トークン(
],},END OF REVIEW,----USER RESPONSE----など)で境界を抜ける - “今の読者=あなた(or carlos)”のアカウントを消す指示にする(ID指定不要)
この続きはcodocで購入