Salt Securityは3月13日(米国時間)、「Salt Labs research finds security flaws within ChatGPT Ecosystem (Remediated)」において、ChatGPTおよびプラグインの脆弱性によりサードパーティーアカウントを侵害される可能性があると伝えた。
攻撃(1)「悪意のあるプラグインの自動インストール」
従来のChatGPTは過去の学習データを基に回答を生成するため、現在の情報に基づく回答はできなかった。そのため、現在予定されているイベント情報やユーザーの今後の予定などを回答できず、活用の大きな障害となっていた。そこで、OpenAIはChatGPTにプラグイン機能を追加し、外部サービスとの連携動作を可能にすることでこの問題を解決した。ChatGPTのプラグインは誰でも開発・公開することができる。
ChatGPTのプラグインはOAuth認証を要求することが可能で、この場合、ユーザーはインストール時にプラグインを承認することになる。ユーザーが承認するとOpenAIのプラグインインストール用のURLにリダイレクトされ、自動的にプラグインがインストールされる。
このプラグインインストールの手続きに脆弱性が存在し、攻撃者はプラグインインストール用のURLを標的に送信してアクセスさせることで、確認なしでプラグインをインストールさせることができる。通常、OAuthではこのような攻撃を避けるために状態パラメーターを持つが、ChatGPTの状態パラメーターは推測可能とされる。
攻撃(2)「ゼロクリックのプライベートリポジトリーアクセス」
Salt Securityは、ChatGPTプラグインの「AskTheCode」を使用してGitHubのプライベートリポジトリにアクセスする攻撃方法を解説している。この脆弱性の根本原因はChatGPTやAskTheCodeではなく、PluginLab(pluginlab.ai)内に存在する。
この攻撃を実行するには、被害者がAskTheCodeを使用しており、GitHubアカウントで認証している必要がある。また、攻撃者は被害者のGitHubアカウントのメールアドレスを知っていることが条件となる。攻撃手順は次のとおり。
- 攻撃者は被害者のメールアドレスから「memberID」を取得する。このIDはpluginlab.aiのAPIまたはメールアドレスのSHA1ハッシュを計算することで入手可能
- 攻撃者は自身のChatGPTアカウントにAskTheCodeのインストールを開始する。インストールの途中でpluginlab.aiとの通信を傍受する
- pluginlab.aiに被害者のmemberIDを送信し、被害者の「code」を取得する
- ChatGPTに被害者の「code」を送信してインストールを完了する
以上のプロセスにより、攻撃者は被害者のGitHubリポジトリへのアクセスが可能となる。この方法では被害者の操作を必要としないため、ゼロクリックの攻撃となる。脆弱性の原因はPluginLabが認証時にリクエストを検証しないことにある。なお、この脆弱性はすでに修正されている。
攻撃(3)「OAuthリダイレクト操作」
ChatGPTプラグインの一部はインストール時のリダイレクトURLを検証していないものがあり、このリダイレクトURLを攻撃者のサーバに差し替えることで、被害者の「code」を窃取できる。この「code」を使用することで攻撃者は上記の「攻撃(2)」と同様にサードパーティーアカウントを侵害することができる。
Salt Securityは調査の過程で、複数のプラグインがこの脆弱性の影響を受けることを確認している。一部のプラグインは攻撃を回避するためにリダイレクトURLのドメインを検証しているが、攻撃者のプラグインを介することで同様の攻撃を実行できる可能性があるため、対策としては不十分とされる。
その他の問題
Salt SecurityはChatGPTプラグインの他にも「GPTs」について脆弱性の有無を検証している。GPTsはChatGPTの機能を利用したツールを開発・公開できる機能で、プラグインよりも高いセキュリティを実現しているとされる。しかしながら、GPTsにも脆弱性が存在するとみられ、Salt Securityはその内容を公開予定としている。