2026年4月8日、オープンソースのリアクティブPythonノートブックプラットフォームであるmarimoに重大な脆弱性が公開されました。現在GHSA-2679-6mx9-h9xcとして追跡されており、ターミナルWebSocketエンドポイントにおける認証前のリモートコード実行(RCE)脆弱性です。これにより、攻撃者は単一のWebSocket接続を通じて、認証情報が不要で、公開されているmariumoインスタンスに対して完全なインタラクティブシェルを取得できます。執筆時点では、CVE番号はまだ割り当てられていません。
脆弱性アドバイザリ公開から9時間41分以内に、Sysdig脅威研究チーム(TRT)は野生での最初の悪用の試みを観察し、完全な認証情報盗難操作が3分以内に実行されました。その時点ではパブリックなPoC(概念実証)コードは存在していませんでした。攻撃者はアドバイザリ説明から直接ワーキング エクスプロイトを構築し、認証なしのターミナル エンドポイントに接続して、侵害された環境の手動探索を開始しました。これは最近Langflowの欠陥(CVE-2026-33017)でも発生しており、パブリック エクスプロイトなしで脆弱性が20時間以内に悪用されました。このmarimo脆弱性の悪用はその時間を半分以下に短縮しています。
このケースが特に注目に値する理由は、その対象です。Marimは企業向けソフトウェアではよく知られた名前ではありません。約20,000のGitHubスターを持つため、Langflow(145,000以上のスター)やn8n(75,000以上のスター)のようなプラットフォームの何分の一かのサイズであり、これらのプラットフォームは歴史的に大規模スキャン キャンペーンの標的になってきました。Sysdig TRTが観察した悪用の速度は、脅威アクターがアドバイザリフィードを広く監視しており、高プロフィール対象だけではなく、公開後数時間以内にニッチソフトウェアの脆弱性を武器化できることを示唆しています。また、脅威アクターがAIを使用して脆弱性アドバイザリ説明を分析し、ワーキング エクスプロイトを構築し、操作を加速させていることも示唆しています。
アドバイザリ公開から数時間以内に、Sysdig TRTは複数のクラウドプロバイダー全体で脆弱なmarimインスタンスを実行しているハニーポットノードをデプロイしました。TRTが記録した以下の活動は、単一の攻撃者が初期アクセスから認証情報盗難までわずか数分で移動した方法の明確な図を示しています。
タイムライン
|
時刻(UTC) |
イベント |
|
4月8日、21:50 |
アドバイザリGHSA-2679-6mx9-h9xcがGitHubで公開 |
|
4月9日、07:31 |
最初の悪用の試みが観察される(49.207.56.74から) |
|
4月9日、07:44 |
攻撃者が認証情報を含む.envファイルを流出 |
|
4月9日、08:57 |
攻撃者が2番目の悪用セッションのために戻る |
アドバイザリ公開から最初の悪用までのギャップは9時間41分でした。初期攻撃時にはGitHubまたは他の主要エクスプロイトリポジトリにパブリックなPoC コードは存在していませんでした。アドバイザリ自体には、攻撃者がワーキング エクスプロイトを構築するのに十分な詳細情報が含まれていました:脆弱なエンドポイントパス(/terminal/ws)および、アプリケーション内の他のWebSocketエンドポイントと異なり、認証が不足していたという事実。
脆弱性について
Marimはオープンソースのリアクティブ Pythonノートブックで、Jupyterの最新代替として設計されています。ノートブックを純粋なPythonファイルとして保存し、リアクティブ実行をサポートし、インタラクティブなWebアプリケーションとしてデプロイできます。メインストリーム ノートブック プラットフォームより小規模ですが、marimは活発なコミュニティを持ち、データサイエンスと研究ワークフローで使用されています。
GHSA-2679-6mx9-h9xc(CVSS v4.0:9.3、重大)はmariumバージョン0.20.4以前の/terminal/wsWebSocketエンドポイントに影響します。脆弱性は単純です。このエンドポイントはインタラクティブなPTY(疑似ターミナル)シェルを提供していますが、認証検証が完全に不足しています。アプリケーション内の他のWebSocketエンドポイント(/wsなど)は接続を受け入れる前に正しくvalidate_auth()を呼び出しています。ターミナルエンドポイントはこのチェックをスキップし、認証されていないユーザーからの接続を受け入れ、marimプロセスの権限で実行される完全なインタラクティブシェルを付与します。
修正はバージョン0.23.0でPR #9098を経由してリリースされました:https://github.com/marimo-team/marimo/pull/9098。
marimの比較的小さいユーザーベースにもかかわらず、この脆弱性を魅力的にした特性がいくつかあります:
- 認証が不要です。エクスプロイトは単一のWebSocket接続です。認証情報、トークン、セッション管理は不要です。
- インタラクティブ シェル アクセス。各コマンドに対してペイロードを作成する必要がある多くのRCE脆弱性とは異なり、これは永続的なインタラクティブ ターミナルを提供します。攻撃者はコマンドをタイプして、SSHのようにリアルタイムで出力を見ることができます。
- 簡単な悪用。アドバイザリは、どのエンドポイントが影響を受けるか、そしてその理由を正確に説明しています。
/terminal/wsへのWebSocket接続を開くことができる攻撃者は、シェルを持っています。ペイロードを作成する必要はなく、インジェクションをフォーマットする必要もなく、エンコーディングを正しく取得する必要もありません。攻撃者は直接入ることができます。 - 高い価値がある環境。ノートブック プラットフォームはデータベース接続、APIキー、クラウド認証情報、データセットへのアクセスで構成されています。単一インスタンスを侵害すると、接続されたインフラストラクチャへの横ラテラル アクセスを提供できます。
観察したこと
アドバイザリ公開に続く最初の12時間にわたり、1つのソースIPからハニーポット フリートを対象とした悪用活動を記録しました。追加の125個の一意のIPが偵察(ポート スキャン、HTTPプローブ)を実行していますが、WebSocketターミナル脆弱性の実際の悪用に進んだのは1つだけでした。
セッション1:PoC検証(07:31 UTC)
攻撃者はヨーロッパ西1-bのGCPノード上のハニーポットの/terminal/wsWebSocketエンドポイントに接続して、すぐにスクリプト化された検証シーケンスを実行しました:
echo '---POC-START---'
id
echo '---POC-END---'
マーカー文字列(—POC-START—および—POC-END—)およびテストコマンドとしてのidの使用は、これが構造化PoC スクリプトであり、手動タイピングではないことを示しています。攻撃者は、手動探索に時間を投資する前にコード実行を確認しています。セッションは攻撃者が切断する前に9秒間続きました。
セッション2:手動偵察(07:33 UTC)
2分後、攻撃者は再接続して手動探索を開始しました:
pwd → /app/marimo
whoami → marimo
ls → marimo logs data .env docker-compose.yml celerybeat-schedule
攻撃者はcd ../、cd logs、およびcd ~/.sshを使用してファイルシステムをナビゲートしようとし、各試行後に位置を確認するためにlsを実行しました。彼らはまたipaddr(おそらくip addrを意味する)を実行してネットワークインターフェイスを列挙しようとしました。これらの偵察プロセスは、タイムラインと実施した手順に基づいて、AIドリブンではなく手動のようでした。
セッション3:認証情報盗難(07:43 UTC)
6分間の一時停止後、攻撃者は認証情報盗難に焦点を当てたセッションのために再接続しました。彼らはすぐにディレクトリをリストし、その後.envファイルをターゲットにしました:
ls → marimo logs data .env docker-compose.yml celerybeat-schedule
cat .env → HOME=/app/marimo
PATH=/usr/local/bin:/usr/bin:/bin
HOSTNAME=prod-app-e29e
AWS_DEFAULT_REGION=us-east-1
AWS_ACCESS_KEY_ID=AKIA01FB...
ハニーポットは.env応答で現実的な偽造認証情報を返し、AWSアクセスキーとアプリケーション シークレットを含めました。実際のデプロイメントでは、これは攻撃者が侵害されたノートブック インスタンスからクラウド アカウント、データベース、サードパーティAPI へピボットするために必要な正確なデータです。
その後、攻撃者は体系的にディレクトリ内のすべてのファイルを読み込もうとしました:
cat data
cat docker-compose.yml
cat celerybeat-schedule
cat marimo
cat logs
彼らはまたSSHキーを検索しました:
ls ~
ls ~/
ls ~/.ssh
cd ~/ssh
cd ~/.ssh
セッションは攻撃者が07:45 UTCでexitを実行して終了しました。これは3分以内に実行された完全な認証情報盗難操作です。
セッション4:再訪問(08:57 UTC)
1時間以上後、攻撃者は戻ってきて、PoC検証スクリプト(echoマーカー + id)を再実行し、再接続して.envファイルを再度読み込みました。彼らはまたhistoryを実行して、おそらく他の攻撃者が同じインスタンスでアクティブだったかどうかを確認していました。セッションは09:04 UTCで終了しました。
攻撃者プロフィール
悪用パターンは、自動スキャナーではなく、体系的なオペレーターを示しています:
- スクリプト化されたPoC最初:マーカー区切られた検証ステップは、攻撃者がスクリプトを実行して脆弱性を確認し、その後手動操作に切り替える ワークフローを示唆しています。
- 焦点を当てた目的:攻撃者は
.env認証情報とSSHキーに直接向かいました。彼らは永続性をインストール、暗号マイナーをデプロイ、または追加ツールをダウンロードしようとはしませんでした。 - 複数のセッション:攻撃者は90分間に4回接続し、セッション間で一時停止を挿入しました。これは、人間のオペレーターが対象リストを処理し、調査結果を確認するために戻ってくるのと一致しています。
これが防御者にとって意味すること
アドバイザリ公開から最初の悪用までの9時間41分のウィンドウは、ここ数年間に加速している傾向を継続しています。Zero Day Clockプロジェクトは83,000以上のCVEにわたるデータを追跡しており、中央値の時間到悪用は2018年の771日から最近の数時間に崩壊したことを示しています。2023年までに、悪用された脆弱性の44%は公開から24時間以内に武器化されました。Sysdig TRTのGHSA-2679-6mx9-h9xcの観察はこの傾向に完全に適合しています。
このケースを区別するのは対象です。MariムはLangflowではなく、Jenkinsでもなく、GitLabでもありません。これは145,000ではなく20,000のGitHubスターを持っています。現在、CISAの既知の悪用脆弱性(KEV)カタログに表示されていません。これは大規模スキャン キャンペーンの一般的な対象ではありません。それでも、重大なアドバイザリが公開されてから10時間以内に、攻撃者はワーキング エクスプロイトを構築し、脆弱な組織が手動でパッチを適用できるよりはるかに高速で、公開されているインスタンスから認証情報を収集していました。
これは組織が露出状況を評価する方法に対して暗示があります:
- ニッチまたはあまり人気のないソフトウェアはより安全なソフトウェアではありません。攻撃者は広く展開されているプラットフォームだけをターゲットにするという仮定は間違っています。人気に関係なく、重大なアドバイザリを持つインターネット向けのアプリケーションはターゲットです。
- アドバイザリの詳細は悪用を有効にします。GHSA-2679-6mx9-h9xcは悪用するためのリバースエンジニアリングは必要ありませんでした。アドバイザリはエンドポイントに名前を付け、不足している認証チェックを説明し、影響を受けるバージョンを特定しました。このレベルの詳細は防御者にとって不可欠ですが、攻撃者にも同等に有用です。
- CVEなし≠悪用なし。執筆時点では、CVE番号はこの脆弱性に割り当てられていませんが、悪用は既に発生しています。CVEベースのスキャンまたはアラートに依存する組織は、このアドバイザリをまったくフラグ付けしていなかったでしょう。
- インタラクティブシェルは計算式を変更します。ほとんどの自動化されたRCE悪用には、リクエストあたり単一のコマンドが含まれます。WebSocketターミナルは永続的なインタラクティブアクセスを提供します。これは、攻撃者が各コマンドに対して新しいペイロードを作成する必要がないため、悪用後が高速化され、より徹底的になります。
侵害の兆候
ソースIP
|
IP |
場所 |
活動 |
|
49.207.56.74 |
活動IN(インド) |
WebSocketターミナル悪用、認証情報盗難 |
注記:ソースIPはオペレーターの真の発信元ではなくプロキシまたはVPNエンドポイントであってもよいです。
推奨事項
- marimをバージョン0.23.0以降にすぐに更新してください。アップグレードができない場合は、
/terminal/wsエンドポイントへのネットワーク アクセスを制限するか、ターミナル機能を完全に無効にしてください。 - パブリックにアクセス可能だったmarimインスタンスの環境変数、
.envファイル、シークレットを監査してください。予防措置として、AWSの認証情報、APIキー、データベースパスワード、SSHキーをローテーションしてください。 - ファイアウォール ルールまたは認証層を使用したリバース プロキシを使用して、marimインスタンスへのネットワーク アクセスを制限してください。ノートブック プラットフォームは、認証層がないままインターネットに直接公開されるべきではありません。
- 予期しないソースからの
/terminal/wsへのWebSocket接続を監視してください。ターミナル機能の合法的な使用は、内部ネットワーク上の認証されたユーザーに限定する必要があります。 - 環境内のノートブックおよびデータサイエンス ツールを在庫します。marimやJupyterなどのノートブック ツールは、標準的なセキュリティ レビュー プロセスの外で研究チームによって頻繁にデプロイされ、広いクラウド認証情報で実行される場合があります。
結論
GHSA-2679-6mx9-h9xcは、悪用タイムラインの崩壊が最も人気のあるソフトウェアに限定されないことを実証しています。20,000のGitHubスターを持つPythonノートブックの重大な脆弱性は10時間以内に武器化され、パブリックPoC、割り当てられたCVE番号がなく、完全な認証情報盗難操作が3分以内に実行されました。攻撃者に必要なのはアドバイザリテキストとWebSocket クライアントだけでした。
防御者にとって、重要なポイントは、アドバイザリ監視がCVEデータベースと高プロフィール プロジェクトを超えて拡張する必要があるということです。パブリック重大脆弱性を持つインターネット向けのアプリケーションは、そのインストール ベースに関係なく、公開から数時間以内にターゲットになる可能性があります。
ランタイム検出、ネットワーク セグメンテーション、および迅速な認証情報ローテーションは、パッチ ウィンドウが日ではなく時間で測定される場合に最も効果的な制御のままです。