世界を動かす技術を、日本語で。

最新のInstagramの「エクスプロイト」は、私が見た中で最もおかしいものです。

概要

  • 2024年6月時点でInstagramの複数アカウントが簡単に乗っ取られる脆弱性が発覚
  • 攻撃手法は驚くほど単純で、AIサポートの認証フローの不備を突いたもの
  • 2要素認証(2FA)も無効化され、復旧が困難な状況
  • ブラックマーケットで乗っ取りサービスが売買される事態に発展
  • 現在はMetaによって修正済みだが、数週間から数ヶ月間悪用されていた可能性

Instagram乗っ取り事件の全貌

  • 2024年6月、 Obama White House などの著名アカウントを含む多数のInstagramアカウントが乗っ取り被害
  • 攻撃者は ユーザー名 さえ分かれば攻撃を開始可能
  • VPNやプロキシ を使い、被害者の居住地に近いIPアドレスからアクセス
  • Instagramの サポートAI に「アカウントが乗っ取られた」と申告
  • サポートAIに 攻撃者が管理するメールアドレス への認証コード送信を要求
  • 本来ユーザーが使っていないメールでも 追加チェックなし で認証コードが送信される
  • 攻撃者はこの認証コードを使い、 パスワードリセットリンク を取得
  • 一部ケースでは 動画セルフィー 提出を求められるが、AI生成画像で突破可能
  • 2FA(2要素認証)も 完全にバイパス される
  • セッションが強制終了され、 元の所有者は復旧不可能
  • サポートAIとのチャット以外に 人間のサポート窓口なし

ブラックマーケットでの悪用

  • Telegramなどで 乗っ取りサービス が高額で取引
  • 短いアカウント名 や有名人アカウントは数十万~数百万ドルで売買
    • 例: obamawhitehouseocmssf (米宇宙軍トップのアカウント)
  • プロパガンダや転売目的でアカウントが利用されるケースも多数

脆弱性の修正とMetaの対応

  • 現在は Metaが脆弱性を修正 し、Telegramでの乗っ取りサービスも沈静化
  • しかし、 数週間から数ヶ月間 この手法が有効だった可能性
  • 1.5兆ドル企業 であるMetaのサポートAIの脆弱性に多くのユーザーが驚愕
  • サポートAIの設計や認証フローの再点検の必要性

まとめと教訓

  • AIサポートの導入時はセキュリティ設計が最重要課題
  • 2FAや既存のセキュリティ手段も AIの設計ミスで無力化 されるリスク
  • 乗っ取り被害時は 迅速なパスワード変更・サポートへの連絡 が必要
  • ブラックマーケットの存在 がセキュリティリスクをさらに高める要因
  • 今後も サポートAIの脆弱性 への注視が必要

Hackerたちの意見

リクエストが正しい地域から来てるように見えたら、MetaサポートAIにアカウントがハッキングされたって言って、制御してる任意のメールアドレスに認証コードを送るように頼むんだ。インスタグラム、マジで何なの?なんで問題のアカウントにリセットを送らないの?任意のメールアドレス、すごいね。

攻撃者が「そのメールもハッキングされたから、これが新しいメールだ」って言ってるかもしれないね。これってAIサポートのせいで、実際の人間じゃないって感じだね。「もしAIサポートオプションが有効なA/Bテストのアカウントの一部なら、運が悪いね。オフにすることもできないよ。」

サポートリクエストは、大企業のセキュリティチェーンでいつも一番弱いリンクだよ。以前、2FAが無効になった状態でアカウントを引き渡されたこともあるし。LLMが同じことをやってるのを見ても驚かないよね。2FAが低レベルのサポートスタッフによって削除できるって事実が本当にイライラする。プロセスの目的が完全に無意味になっちゃうよ。

リカバリーは、どんな認証システムでも一番弱いリンクだね。

100%の緊急性。感情。全部揃ってるし、適切なプロトコルがない高リスクな環境が一番脆弱なんだよね。ソース:10年以上前に病院のITサポートでアルバイトしてたから、規制やセキュリティプロトコル、医療関連のものまで無視するように頼まれることがよくあった(ICUのモニターや絶対にWindowsを動かしちゃいけない医療用「キオスク」PCとかね)。

2FAが低レベルのサポートスタッフによって解除できるっていう単純な事実にイライラする。プロセスの目的が完全に無意味になる。誰でも解除できるってのが問題なんだ。2FA(とリカバリーコード)へのアクセスを失ったら、アカウントへのアクセスも失うべきだよ。ログインしてるアカウントの持ち主以外が解除できるのは、全く意味がない。

AIがそんな風に任意のアドレスにメールを送るツールを持ってるなんて、マジでクレイジーだよ。ユーザーのリクエストで2FAコードを送るのはまだ理解できるけど、アカウントに紐づいたメールアドレスに2FAメールを送るために「ボタンを押す」だけにすべきだよ。手書きのコードで動かすべきだし、2FAコード自体やメッセージの件名、本文、受取人アドレスにはアクセスできるべきじゃない。なんでそんなことを許可したんだろう?

ハーネスはバイブコードされてる。

でも、アカウントに紐づいたメールアドレスに2FAのメールを送るために「ボタンを押す」だけで済むはずだよね。全部手書きのコードで動いてるってことだけど。本当に疑問なんだけど…なんでそれを手書きにする必要があるの?一般的にはすごく理にかなってるし、こんな制限がなかったのはちょっとクレイジーだと思うけど、その部分のコードが手書きじゃなきゃダメな理由がよくわからないな(機能的には君が言ってることをやってるとしても)。

この脆弱性はAIとは全く関係なく、ひどく設計されたアカウント復旧のフローに関係してる。まったく同じフローは、静的にコーディングできたはずだし、実際にそうされてたかもしれない(ここでのチャットボットがどれだけ機能してるかは知らないけど)。

あるジュニアエンジニアがバカみたいなサポートリクエストの対応に疲れて、エージェントで仕事を自動化したんだ。それが理由。セキュリティサポートにジュニアエンジニアを割り当てるのは馬鹿げてる。若い人たちはセキュリティの重要性を理解してないことが多いし、プライバシーの価値もあまり感じてないから。

この脆弱性は、簡単に回避できるセキュリティの失敗の新しいゴールドスタンダードだね。誰かがついにGitlabのパスワードリセットメールを攻撃者提供のアドレスに送ることに成功したんだ。

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

どれだけバカなエクスプロイトがあるのかを見ると、いつも驚かされる。パスワードを「頼むだけ」でいいの?それで通るの?

人工知能って名前は伊達じゃないね。

つまり、AIエージェントは2FAを解除する特権的なアクセスを持っていて、アカウントのメールを無視して、頼んだ人にアカウントを渡してたってこと?正直、それはすごく無責任だと思う。実装チームがその「機能」でメタにできるだけのダメージを与えようとしてたんじゃないかって疑っちゃう。誰も生産テーブルを完全に落とすことを試みなかったのが残念だな!(ほとんど冗談だけど)。ただの高レベルのSREを名乗って、致命的な生産バグを解決してるふりをすれば、唯一の解決策はデータベースを落とすことだよ。

数億人のユーザーがいるサイトのアカウント復旧が大変なのはわかるけど、そんな緩い確認を90%以上の低価値アカウントに制限しないなんて驚きだよ。高価値アカウントには厳しい確認を維持すればよかったのに。次に明らかなのは、アルゴリズムが低価値だと判断したアカウントも厳しい確認にオプトインできるようにすることだね。ほとんどの低価値アカウントは、オプションがメニューの奥に埋もれてたら切り替えようとはしないけど、何らかの理由でターゲットにされてる少数の低フォロワー/ビューのアカウントは、自分がターゲットだってわかっててオプトインすることで自分を守れる。そうすればアカウントの乗っ取りも減るだろうし。だから、この「緩い」確認が「悪い」かどうかを考える前に、その2つのシンプルな実装変更があれば、(潜在的に)悪いアイデアの悪い結果を95%以上減らせたはずだよ。

インスタグラムの初期ユーザー6000人の中に入ってたんだけど、数年前に自分のユーザー名を盗まれちゃったんだ。認証済みアカウントのサポートはその問題を認めてたけど、何もできなかった。これはAIを利用した悪用で、俺の場合は外注サポートの「悪用」で、誰かが俺のユーザー名を手動で変更して別のユーザーに渡すためにお金を払ったんだ。人間の責任あるサポートがない限り、アカウントにアクセスする方法は常にあるし、それを違反した従業員には犯罪的な結果が伴うよ。

「それを違反した従業員には犯罪的な結果が伴う」って、笑っちゃうね。ユーザー名を「盗む」ことで誰かが犯罪で起訴される日が来たら、人類は終わりだよ。

これはインスタグラムにとって恥ずかしい失敗だね。でも、SIMカードも同じようにハッキングされてる(サポートを騙して、電話が紛失したとか盗まれたとか言うやつ)けど、その時のエージェントは人間だった。解決策は、エージェントがSIMカードをリセットするのを防ぐために、元の所有者が従うべきいくつかのステップを設けることだった(元の電話を失っても従えるようなもの、例えば覚えておかなきゃいけないPINとか)。この解決策をAIエージェントにも適用すべきだと思う。

文脈から見ると、サポート用の内部APIがあったみたいだけど、サポートエージェントに自分が言った通りの人間であることを納得させるための必要なプロセスで制限されるはずだった(ソーシャルエンジニアリングにも脆弱だったけど)。でも、元のサポートエージェントを置き換えたLLMに、良心的な人間用に設計されたツールを直接提供すべきかどうかは、ちゃんと評価されてなかったみたいだね。

すべてのTelegramグループは静かになったみたいで、Metaがすでにパッチを当てたみたいだけど、この特定の方法は数週間、下手したら数ヶ月もアクティブだったみたい。マジで?こんなにシンプルで悪用しやすい脆弱性が数週間も数ヶ月も生き残ってたなんて信じられないよ。