コンテンツにスキップするには Enter キーを押してください

GitHubのAIアシスタントが開発者をコード盗難にさらした

カンファレンスディスプレイボードに表示されたGitLabのロゴとモットー

出典: Constantine Soutiaguin via Alamy Stock Photo

GitLabの人工知能(AI)アシスタントにおける間接的なプロンプトインジェクションの欠陥により、攻撃者がソースコードを盗んだり、被害者を悪意のあるウェブサイトに誘導したりする可能性がありました。

“Duo”は、オープンソース(OSS)リポジトリのユーザーがコードの分析や変更の提案、コードの作成、テスト、マージの自動化、その他の機能を行うために使用できる組み込みツールであり、GitHubのCopilotに相当します。しかし、Legit Securityの研究者が最近発見したように、Duoは入力と出力に対してあまり厳密ではありませんでした。攻撃者はコードに秘密のプロンプトを忍び込ませることで、フィッシング攻撃を行ったり、マルウェアを仕込んだり、機密データを流出させたりすることができます。

実際、プロンプトインジェクションは大規模言語モデル(LLM)を搭載したチャットボット全体にわたるシステムリスクですが、GitLabのDuoは特に攻撃者にとって強力です。

“特に興味深いのは、DuoがDevSecOpsパイプライン全体に深く統合されていることです。問題からCI/CDパイプライン、ソースコードまで。Duoは豊富でリンクされたプロジェクトデータを分析するため、悪用の表面積が広がります。” とLegit Securityのシニアセキュリティ研究者であるOmer Mayrazは説明します。”Duoの応答はMarkdownを使用してブラウザに直接レンダリングされるため、統合開発環境(IDE)やチャットターミナルでLLM出力を保持するツールには常に存在しないクライアントサイドのインジェクションリスク(HTMLインジェクション)を引き起こしました。”

関連:オーストラリア人権委員会、データ漏洩で文書を流出

GitLabにおける間接的なプロンプトインジェクション

Legit Securityの研究者が最初に発見したのは、GitLabに公開したコードにAIプロンプトを忍び込ませることで、間接的にDuoに影響を与えることができるということでした。しかしすぐに、問題はそれだけにとどまらないことに気づきました。

あらゆる開発者が必要とするオールインワンのアシスタントであるために、DuoはGitLabサイトのあらゆる側面と関わる必要があります。ソースコードはもちろん、コミットメッセージや説明、問題に関連するコメントやマージリクエストも含まれます。どうやら、これらの要素をソースコードと同じくらい慎重に扱っていなかったようで、ユーザーがサイトとやり取りするあらゆる場所に隠されたプロンプトを実行してしまうのです。

したがって、攻撃者は自分のコードに感染させるだけでなく、他のプロジェクトのマージリクエストやコメントに悪意のあるプロンプトを仕込むことも可能でした。Duoの入力サニタイズの欠如を悪用するだけでなく、人間の開発者から自分の行動を隠すことも問題ではありませんでした。AIアシスタントは、エンコードされたプロンプトや、ウェブページの白い背景に白い文字で書かれたプロンプトを実行することにためらいはありませんでした。

関連:英国の新しいセキュリティガイドラインがソフトウェア開発を再構築

これを知った上で、あらゆるサイバー攻撃シナリオが考えられました。ハッカーはDuoの応答に悪意のあるURLを挿入し、それを正当で安全に見せることができました。Duoのコード提案を操作してマルウェアを含めたり、Duoに悪意のあるマージリクエストを問題なく採用するように指示させたりすることも可能でした。

しかし、最悪なのは、Duoが応答を生成する方法によって可能になった別のシナリオでした。

Duoを介したHTMLインジェクション

簡単に言えば、Duoは応答をMarkdownでフォーマットし、意識の流れのようにブラウザが読むHTMLをレンダリングします。しかし、応答の全体構造が展開されるのを待たずにHTMLをレンダリングします。そのため、研究者が間接的なプロンプトインジェクションを介してHTMLを供給したとき、それを実行可能なHTMLとして解釈しました。これにより、Duoを介して効果的にコードを実行することができました。

OSSリポジトリのようなGitLabで最悪のことは何でしょうか?研究者は、マージリクエストの説明やコミットコメントに隠すことができる概念実証(PoC)プロンプトを設計しました。被害者がDuoにそれをレビューさせると、Duoは悪意のあるHTMLをブラウザに渡し、ブラウザが研究者のサーバーにGETリクエストを送り、被害者のプライベートソースコードを密かに流出させるようにしました。

関連:Commvault: 脆弱性パッチは意図通りに機能

同じ手法を使って、プラットフォーム上で交換される他の種類の機密データにアクセスすることも可能でした。”実際のシナリオを考えてみてください。GitLabの従業員や信頼できる貢献者が、GitLabのゼロデイ脆弱性を説明する内部問題にアクセスできる場合、そのユーザーが毒されたプロジェクトでDuoとやり取りすると、Duoはユーザーが気づかないうちにその問題から機密コンテンツを漏らす可能性があります。これはコードを超えて、製品のセキュリティ、プライベートな開示、組織の秘密にリスクを拡大します。” とMayrazは説明します。

GitLabはこのHTMLレンダリングの脆弱性を認識し、修正をリリースしました。しかし、研究者がDuoの応答を毒することを可能にした他のプロンプトインジェクションのリスクには対処しませんでした。同社はLegit Securityに対し、これをセキュリティ問題とは見なしていないと述べました。なぜなら、それが直接的に不正なアクセスやコード実行を引き起こすものではないからです。

Mayrazはこの解釈に異議を唱えます。”セキュリティはアクセス制御だけではありません。” 彼は言います。”それは影響力についてもです。攻撃者がAIアシスタントに悪意のあるコードを推奨させたり、安全でないマージリクエストを保証させたり、不信頼のHTMLを注入させたりできるなら、それは単なるLLMの問題ではなく、フルスタックの脆弱性です。”

Dark ReadingはGitLabに、なぜプロンプトインジェクションリスクをセキュリティ問題として扱っていないのかを尋ねました。Dark Readingが返信を受け取った場合、この記事は更新されます。

翻訳元: https://www.darkreading.com/application-security/github-ai-assistant-opened-devs-to-code-theft

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です