僕はMetaとInstagramでバグバウンティのリサーチをたくさんやってるんだけど、見つけるバグの中には一見すごくシンプルに見えるものもあって、でも実際には少し複雑な理由で起こってることがある。これがそうとは限らないけど、実際に何が起こったのかについての推測はあるよ。今まで見てきたことに基づくと、Meta AIサポートアシスタント(彼らはこれを「MAISA」と呼んでる)は、a) 特定のメール、電話番号、またはアカウントにリンクされた連絡先にメール確認を開始するツールコールと、b) メール確認の試行に基づいてアカウントのパスワードリセットリンクを生成することを許可するツールコールを持ってたと思う。実際のコードにはアクセスできなかったと思うけど、メール確認の試行に対するハンドルやID(ユーザーが入力した確認コードと一緒に)が「パスワードリセットリンクを生成する」ツールコールに渡されて、ツールコールがその試行で使われた実際のメールがアカウントに属しているかどうかを正しく検証できなかったんじゃないかな。MAISAがパスワードリセットリンクを生成するためのツールコールは、アカウントにリンクされていないメールに対応するメール確認の試行で失敗するべきだったと思う(実際、Facebookでこれを試したときにエラーが出て成功を防げたことがある)。でも、Instagramのためにこのツールコールを変更しようとして、少し古い最近リンク解除されたメールを使って、攻撃者に乗っ取られたアカウントを復旧できるようにしようとしたんじゃないかと思う。そのために、現在アカウントにリンクされていないメールを使えるようにして、ユーザーのプライマリメールに設定する必要が出てきたんだ。さらに、MAISAのツールコールが間違ったAPIを呼び出したか、何かが意図せずに成功したメール確認の試行を使えるようにしたんじゃないかとも疑ってるけど、エンジニアたちは無関係なメール確認の試行に対してツールコールをテストするための十分に徹底したe2eテストケースを追加しなかったんだと思う。ここが一番注目すべき部分だと思う。攻撃者に影響を受ける可能性のあるエージェントのツールコールは、誰でもアクセスできる外部APIのように扱われるべきで、そういうふうにテストされるべきなんだ。これはあくまで推測で、アカウント復旧の試行が有効かどうかを判断するために使われる多くのシグナルを考慮していないし、かなり不正確かもしれないけど、Metaのセキュリティをよく扱ってる僕が考えるに、これが起こる原因になった可能性があることに近いと思う。