Jupyter Misconfiguration Flaw Allow Attackers to Escalate Privileges as Root User
2025/11/05 CyberSecurityNews — Jupyter ノートブックのデプロイ環境に存在する重大なセキュリティ欠陥を、Adversis のセキュリティ研究者たちが発見した。それを悪用する攻撃者は、デフォルト設定と認証不要の API アクセスを介して、システムを完全に制御する可能性を得る。研究者たちによると、root 権限で動作し認証が無効化された状態でミスコンフィグされている Jupyter サーバは、最高レベルの システム権限 (root/SYSTEM) で任意のコマンドを実行するため、甚大な被害にいたる恐れがあるという。

この脆弱性は単一のコード欠陥ではなく、複数のミスコンフィグの組み合わせに起因する。認証トークンが有効化されておらず、root ユーザーとして動作する Jupyter ノートブック・サーバは、REST API を通じて危険な機能を晒すことになる。具体的には、攻撃者による WebSocket 接続を介したダイレクト・シェル・セッションの作成/操作を、ターミナル API エンドポイントが許してしまう。
攻撃の仕組み
脆弱な Jupyter サーバにローカル・ネットワークからアクセスできる攻撃者は、”/api/terminals” エンドポイントへの単純な HTTP POST リクエストでターミナル・セッションを作成できる。その後に攻撃者は、websocat などのツールを用いて WebSocket プロトコル経由で当該ターミナルと通信する。これらのツールにより標準コマンドは、Jupyter ターミナル・インターフェイスが想定する JSON 形式へと変換される。
重大なことは、このターミナル・セッションが、Jupyter プロセス自体の権限を継承する点にある。つまり、Jupyter が root 権限で実行されている場合には、それを侵害した攻撃者に対して完全な管理者アクセスが付与されてしまう。それにより攻撃者は、任意のシステム・コマンドの実行/機密ファイルの読み取り/永続的アクセス用のリバースシェルの確立などを介してシステム全体を侵害できる。
こうして、未認証の攻撃者は root 権限の Jupyter サーバを特定し、ターミナル・セッションの作成を id コマンドで実行し、root アクセスを確認する。さらに、それを足掛かりとして利用し、Jupyter のカーネル接続ファイルにアクセスし、このファイルに含まれる HMAC 署名キーとセッション情報を窃取することで、複数のユーザー・ノートブックにまたがるセッション・ハイジャックを可能にする。
最終的には、永続的なリバースシェルが確立されるが、監視システムからは正当な Jupyter アクティビティに見えてしまう。
ただし、ユーザー組織が基本的なセキュリティ対策を実施することで、この欠陥を防止できる。
最初に行うべきことは、Jupyter サービスを root ユーザーとして実行しないことである。その代わりに、管理者にとって必要なことは、Jupyter プロセス専用の非特権ユーザー・アカウントの作成となる。なお、GPU アクセスや特別な権限が必要な環境では、root に昇格させるのではなく、機能ベースのセキュリティ制御を使用する。
2番目は、Jupyter サーバにおける認証を常に有効化することだ。内部ネットワークからのアクセスであっても、有効なトークンを要求することで不正アクセスを防止できる。
3番目は、Adversis の報告にあるように、Jupyter 経由のシェル・アクセスをユーザーが必要としない場合には、ターミナル機能の無効化も検討すべきだ。さらに、マルチ・ユーザー環境では、適切なユーザー分離と機能ベースのセキュリティ・モデルを備えた Jupyter Hub を使用し、最小権限の原則に基づき、ユーザーにとって必要な権限のみを付与することが望ましい。
セキュリティ・チームにとって必要なことは、ターミナル API の使用状況を Jupyter ログを監視し、カーネル・ランタイム・ファイルへのアクセスを追跡することだ。さらに、Jupyter プロセスからの異常なアウトバウンド接続や権限昇格の試みについては、直ちに調査する必要がある。
プロセス監視により、Jupyter プロセスが起動した socat/netcat などの不審なシェル呼び出しを検知できる。総じて、この脆弱性が実証しているのは、デフォルト設定や無効化されたセキュリティ機能が、利便性を深刻なリスクに変える可能性があることだ。
この問題の核心は、単一の欠陥ではなく複数のミスコンフィグが同時に存在する点にあります。具体的には、Jupyter を root 権限で動かし、認証トークンなどを無効化し、REST/ターミナル API を露出させているサーバは、攻撃者による “/api/terminals” への POST を介して、WebSocket 経由でダイレクトなシェルを得られてしまいます。ターミナルが Jupyter プロセスの権限を継承するため、root 実行環境では任意コマンド実行や HMAC キー窃取によるセッション・ハイジャックや、監視を回避する永続的なリバース・シェルの確立につながると、この記事は指摘しています。よろしければ、Jupyter で検索を、ご参照ください。
You must be logged in to post a comment.