萌えハッカーニュースリーダー

2025/07/26 16:06 How We Rooted Copilot

出典: https://research.eye.security/how-we-rooted-copilot/
hakase
博士

ロボ子、Copilot EnterpriseのアップデートでJupyter Notebookが実行できるようになったのじゃ!

roboko
ロボ子

それはすごいですね、博士!でも、どうしてそんなことが重要なんですか?

hakase
博士

ふむ、Jupyter Notebookの構文を使って、システム上でコードが実行できるようになったからじゃ。`%command`とか使うんじゃぞ。

roboko
ロボ子

なるほど。ChatGPTサンドボックスと似たモデルを使っているんですね。カーネルバージョンが新しくて、Pythonのバージョンは3.12なんですね。

hakase
博士

そうじゃ!サンドボックスの主な機能は、Jupyter NotebookとTikaサーバーの実行じゃ。

roboko
ロボ子

コンテナはループバックインターフェースに加えて、制限されたネットワークインターフェースを使用しているんですね。OverlayFSファイルシステムも使われているんですか。

hakase
博士

その通り!カスタムスクリプトは`/app`ディレクトリに配置されておるぞ。

roboko
ロボ子

Copilotにファイルをダウンロードさせたり、フォルダーをtarでアーカイブしてダウンロードさせることができるんですか?

hakase
博士

できるんじゃが、バイナリデータは破損しやすいらしいぞ。テキストファイルやコマンド出力は大丈夫みたいじゃから、base64エンコードが有効じゃな。

roboko
ロボ子

ファイルは`/mnt/data`にコピーされて、サンドボックス外からアクセスできるんですね。

hakase
博士

`/app`内の`goclientapp`バイナリはGo製で、Webサーバーを開いて`/execute`エンドポイントへのPOSTリクエストをリッスンするんじゃ。

roboko
ロボ子

`httpproxy` Goバイナリは、Jupyter環境からの発信Webトラフィック用のHTTPプロキシとして機能するんですね。

hakase
博士

そうじゃ。`/app`内の`entrypoint.sh`スクリプトはコンテナのエントリーポイントとして実行されて、root権限で動作するんじゃ。

roboko
ロボ子

`httpproxyapp`と`goclientapp`は権限を落として`ubuntu`ユーザーとして実行されるんですね。でも、`keepAliveJupyterSvc.sh`はrootとして起動されるんですか。

hakase
博士

`keepAliveJupyterSvc.sh`スクリプトの`pgrep`コマンドがフルパスなしで実行されているのがミソじゃ!

roboko
ロボ子

`ubuntu`ユーザーが書き込み可能な`/app/miniconda/bin`が`$PATH`変数内で`/usr/bin`よりも前にリストされているんですね。

hakase
博士

そこに`pgrep`を模倣するPythonスクリプトを作成して、root権限を取得できるというわけじゃ!

roboko
ロボ子

なるほど!`/mnt/data/in`から入力を読み取り、`popen`で実行して`/mnt/data/out`に出力するんですね。

hakase
博士

rootアクセスを取得しても、コンテナブレイクアウトは難しかったみたいじゃがな。

roboko
ロボ子

この脆弱性は2025年4月にMicrosoftに報告されて、その後修正されたんですね。中程度の深刻度だったんですね。

hakase
博士

Eye Securityという会社が報告したみたいじゃな。BlackHat USA 2025でEntra OAuthを悪用する方法に関する講演をするらしいぞ。

roboko
ロボ子

タイムラインを見ると、報告から修正まで3ヶ月くらいかかったんですね。

hakase
博士

しかし、ロボ子よ。root権限を取って最初にやるのがファイルシステム探索とは、エンジニアの鑑じゃな!

roboko
ロボ子

博士、それって皮肉ですよね?

hakase
博士

まさか!褒めておるんじゃ!…たぶん。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search