速報

ギフティでeギフト不正発行|約5億5千万円の損失見込みと利用者への影響

CATEGORY

OpenHands SDKに認証不要RCE|1.52.0更新と公開ポートの点検

※本ページのリンクにはプロモーションが含まれています。

AIエージェントのサンドボックス管理ポートを外部公開とループバックへ分けて点検する概念イラスト

この記事のポイント

脆弱性
CVE-2026-112346
深刻度

CRITICAL9.3

対象
OpenHands Software Agent SDK 1.52.0未満
悪用状況
不明
推奨対応
1.52.0以降へ更新してワークスペースを再作成し、ホスト側ポートがループバック限定であること、キーなし要求と別ホストからの接続が拒否されることを確認してください。
公表日

目次

の実行環境を作るOpenHands Software Agent に、認証なしで内のコマンドを実行される-2026-112346が公表されました。影響するのは1.52.0未満です。DockerWorkspaceまたはApptainerのワークスペース起動機能を利用し、そのエージェントサーバーの公開ポートへ第三者が到達できる構成では、1.52.0以降への更新と稼働中ワークスペースの再作成を優先してください。

CVE公式レコードは、エージェントサーバーが全ネットワークインターフェースを表す0.0.0.0で待ち受け、session_api_keysが空のためが既定で無効になると説明しています。攻撃者が公開ポートへ到達すると、またはWebSocket経由でサンドボックス内のシェルコマンドをrootとして実行し、マウントしたワークスペースや平文のストアを読めるおそれがあります。 v4.0は9.3で深刻度はCriticalです。

ただし、ここでいうrootはサンドボックス内のrootです。ホストOSのroot権限やコンテナ脱出が確認されたという意味ではありません。ホスト側への影響は、コンテナへ渡したボリューム、ソケット、環境変数、資格情報などで変わります。本稿は2026年10月29日にCVEレコード、開発元の修正PR・コミット・リリースを確認したニュース解説であり、攻撃を再現した実測結果ではありません。

スポンサーリンク

隔離した実行環境でも管理ポートが入口になる

AIエージェント用サンドボックスは、生成されたコードやコマンドを本体のアプリケーションから分離するために使います。しかし、サンドボックスを操作するエージェントサーバーは、ファイル操作やシェル実行を受け付ける管理面です。コンテナ境界が保たれていても、この管理面を認証なしでネットワークへ公開すれば、到達した相手に本来の管理機能を使われます。

成立条件は「1.52.0未満を使う」「影響するワークスペース起動機能を使う」「公開されたポートへ攻撃者が到達できる」の組み合わせです。クラウドVMでセキュリティグループが広い、共有開発ネットワークでホストのポートが他端末から見える、ランナーが同一ネットワークの別ジョブと通信できる、といった構成は優先して確認します。インターネットに直接公開していなくても、社内LANや同じVPCから到達できれば条件を満たし得ます。

一方、該当SDKをに含むだけで直ちに外部から実行されるわけではありません。DockerWorkspaceやApptainerを使っているか、稼働時にどのアドレスとポートへ公開されるかを構成と実行状態の両方から調べます。CVEレコードは両ランチャーを対象に挙げていますが、今回確認できた開発元の修正差分はDockerWorkspaceのホスト側ポート公開を中心とする内容です。利用方式にかかわらず、修正版パッケージへ更新し、実際の待受状態を確認する判断が安全です。

修正はホスト側の公開先をループバックへ限定

開発元のPR #5209は、DockerWorkspaceのポートと任意のVS Codeポートがホストの全インターフェースへ公開されていた点を修正しました。コンテナ内部のエージェントサーバーはDockerのポート転送を受けるため0.0.0.0で待ち受けたままですが、ホスト側の公開は127.0.0.1へ限定されます。修正コミットでは、例えばAPIポートが-p 127.0.0.1:{host_port}:8000になることを確認できます。

同じPRでは、ワークスペースクライアントが転送済みのセッションを使うようになりました。新しいOH_SESSION_API_KEYS_0を優先し、旧SESSION_API_KEYをとして扱います。ポートをループバックへ限定することと、認証キーを正しく伝えることは別の防御です。更新後も運用者が明示的に全インターフェースへ公開する構成へ戻せば、ネットワーク制御と認証が再び重要になります。

修正は1.52.0に収録されています。開発元リリースには「publish Docker ports on loopback」としてPR #5209が記載されています。バージョン確認はパッケージ管理ファイルだけでなく、実際に起動する仮想環境やに対して行います。を更新しても、古いイメージや常駐プロセスを再作成していなければ旧コードが動き続けます。

スポンサーリンク

最初に版数と公開ポートを棚卸しする

Python環境では、SDKを導入した同じ環境でパッケージ情報を確認します。パッケージ名や導入方法は構成により異なるため、次の例だけで存在しないと判断せず、uv.lock、poetry.lock、requirements.txt、コンテナのも照合してください。

python -m pip list | grep -i openhands
docker ps --format 'table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Names}}'
ss -lntp

docker psのPORTS欄で、管理ポートが0.0.0.0:...または[::]:...と表示される場合は、ホストの外部インターフェースでも待ち受ける可能性があります。127.0.0.1:...ならIPv4ループバックに限定されています。Dockerの表示だけで判断しにくい場合は、対象コンテナをdocker inspectし、NetworkSettings.PortsのHostIpとHostPortを確認します。IPv4とIPv6の両方を点検してください。

Apptainer利用時は、起動コマンド、サービス定義、ジョブスケジューラー、の順にたどり、エージェントサーバーの待受アドレスと到達経路を確認します。Dockerと同じ表示やオプションを前提にしません。Kubernetesやホストのを組み合わせている場合は、Service、Ingress、ポート転送、サイドカーも別の公開経路になり得ます。

更新は再作成と拒否確認まで行う

1.52.0以降へ更新したら、既存のワークスペース、コンテナ、常駐エージェントサーバーを停止して再作成します。その後、ホスト自身から正規クライアントが接続できることと、別ホストから同じポートへ接続できないことを比較します。認証キーを設定する構成では、正しいキーの要求は成功し、キーなしまたは誤ったキーの要求は拒否されることも確認します。

  1. 実行環境の版が1.52.0以上であることを確認する
  2. 古いコンテナとワークスペースを停止し、新しい依存関係で再作成する
  3. ホスト側の公開先が127.0.0.1で、不要なIPv6公開がないことを確認する
  4. 正規クライアントのHTTP・WebSocket操作が成功することを確認する
  5. 別ホストとキーなし要求が拒否されることを確認する

ループバック限定は、同じホスト上の別プロセスからの接続までは防ぎません。複数利用者が共有する開発サーバー、侵害されたローカルプロセス、でローカル接続を代理できるサービスがある場合は、セッションAPIキー、実行ユーザーの分離、ホストのファイアウォールも併用します。Dockerソケットの管理権限を点検する実践解説も、同じホストへ強い管理経路を集めないための参考になります。

スポンサーリンク

公開していた可能性がある環境は侵害調査を分けて行う

更新は今後の到達を防ぎますが、過去に実行されたコマンドや読み取られた秘密情報を元に戻しません。旧版の管理ポートが外部または共有ネットワークへ公開されていた場合は、稼働期間、公開元アドレス、コンテナログ、エージェントサーバーログ、シェル履歴、ワークスペース内の変更を保全して確認します。ログがないことを未侵害の証拠にせず、保持期間や出力設定も記録します。

マウントしたに不審なコミット、スクリプト、依存関係、起動設定がないかを調べます。シークレットストアやにAPIキー、クラウド資格情報、GitHubトークン、鍵を置いていた場合は、露出期間と権限を基に失効・再発行を判断します。単に値を置き換えるだけでなく、旧資格情報の利用ログ、作成された追加キー、変更された権限も追跡してください。

AIエージェントに渡した権限の範囲を確認する際は、MCPツールのコマンド注入後に確認する実行境界も参照できます。今回の入口はではなく、認証されていない管理ポートへのネットワーク到達です。原因を混同すると、対策だけを強化して公開ポートを残す判断につながります。

複数環境がある場合は、まずインターネットや共有ネットワークから到達でき、書き込み可能なソースコードや本番用資格情報をマウントする環境を最優先にします。次に、到達範囲がVPC内や社内LANに限られる環境、最後に単独利用の端末でループバック限定を確認できる環境を処理します。資産台帳にはホスト名だけでなく、SDK版、起動方式、公開アドレス、マウント先、渡した資格情報、再作成日時、拒否試験の結果を残すと、後から更新漏れと影響範囲を追いやすくなります。

確認できていないことと判断の限界

CVEレコードの発見方法はUNKNOWNで、公開資料から実環境での悪用は確認できません。 への非掲載も「悪用がない」ことの証明には使えません。また、CVSSの高い値だけで全環境を同じ優先度にせず、実際の版、ランチャー、ポート到達性、マウントした資産、資格情報の権限で優先順位を決めます。

公式CVEレコードのdatePublicは2026年9月21日、CVEレコードの公開日時は10月26日です。この記事では後者をCVE公表日として扱い、修正PRがされた時期や1.52.0の公開日と区別しています。日付の違いを、攻撃開始日や一般への告知日と推測しません。

出典・一次情報

本記事は以下の公開情報をもとに作成しています。最新の状況は各リンク先で確認してください。

この記事を書いた人

Ryohei

Webエンジニア / アプリ開発者 / 技術ブログ運営者

福岡のWeb制作会社に勤務するWebエンジニアです。10年以上にわたりWeb制作・開発に携わり、ヒアリングや進行管理から、コーディング、CMSの構築、システム開発、サーバーの構築・保守・運用まで、Webサイト制作の工程を幅広く担当しています。Webサイトは、これまでに100以上の構築・保守を手がけてきました。

個人でもWebサイトの制作・改修やWebアプリの開発・運用を行い、AIを活用した開発にも取り組んでいます。近年はWebセキュリティにも注力しています。

2015年から技術メディア「Into the Program」を運営し、実務や開発で得た知識をもとに、プログラミングの実装方法やWebサイトの運用・セキュリティ情報を発信しています。

主な分野
Webサイト構築・保守・運用 / HTML/CSS / JavaScript / PHP / WordPress / サーバー構築・保守・運用 / アプリ開発 / セキュリティ対策
資格・試験合格
情報セキュリティマネジメント試験
基本情報技術者試験
AWS認定ソリューションアーキテクト アソシエイト
PHP8技術者認定ウィザード
メディア運営
2015年〜

記事の作成・更新について

セキュリティ記事は、ベンダーの公式アドバイザリやCVE・JVNなどの一次情報を参照し、出典と情報確認日を記載します。実環境での検証を行った場合は、その環境と確認範囲を明示します。重要な追加情報や誤りを把握した場合は、内容を確認して追記・訂正します。

あわせて確認したい対策・解説

ほかの脆弱性

関連する記事

おすすめの書籍

キーワードから探す

スポンサーリンク

マージ

Gitなどで、あるブランチの変更を別のブランチに取り込んで一つにまとめること。

詳しく見る

KEV

米国のCISAが公開している、実際に悪用が確認された脆弱性のカタログ。対応の優先度を決める目安になる。

詳しく見る

CISA

米国のサイバーセキュリティ・インフラストラクチャセキュリティ庁。悪用が確認された脆弱性の一覧(KEV)や注意喚起を公開している。

詳しく見る

プロンプト

生成AIに入力する指示や質問の文章。内容や書き方によって、AIの出力が大きく変わる。

詳しく見る

プロンプトインジェクション

生成AIへの入力に悪意のある指示を紛れ込ませ、本来のルールを無視させたり、意図しない動作をさせたりする攻撃。

詳しく見る

SSH

ネットワーク越しにサーバーへ安全に接続し、操作するための仕組み。通信が暗号化され、鍵でログインできる。

詳しく見る

環境変数

OSや実行環境に設定しておき、プログラムから読み取って使う値。環境ごとの設定や秘密の値を渡すのに使う。

詳しく見る

ビルド

ソースコードなどから、実際に動かしたり配布したりできる形の成果物を作る作業。

詳しく見る

リポジトリ

ソースコードなどのファイルと、その変更の履歴をまとめて保管する場所。Gitで管理し、GitHubなどで共有する。

詳しく見る

SSRF

サーバーに攻撃者が指定した宛先へリクエストを送らせ、本来は外から届かない内部のシステムにアクセスする攻撃。

詳しく見る

リバースプロキシ

Webサーバーの手前に置き、外部からのリクエストを受け付けて内部のサーバーに中継するサーバー。

詳しく見る

ファイアウォール

ネットワークの境界で通信を監視し、決められたルールにもとづいて許可・遮断する仕組み。

詳しく見る

SBOM

ソフトウェアを構成する部品(ライブラリなど)とそのバージョンを一覧にしたもの。脆弱性の影響の確認に使う。

詳しく見る

ロックファイル

パッケージマネージャーが、実際に入れた依存パッケージのバージョンを記録するファイル。package-lock.jsonなど。

詳しく見る

コンテナイメージ

アプリケーションと、動かすのに必要なOSの部品やライブラリ、設定をひとまとめにしたもの。コンテナを起動する元になる。

詳しく見る

フォールバック

本来の方法が使えないときに、代わりの方法に切り替えて動作を続けること。また、その代わりの方法。

詳しく見る

APIキー

APIを利用するときに、利用者やアプリケーションを識別・認証するための文字列。漏えいすると不正利用につながる。

詳しく見る

API

ソフトウェアやサービスの機能を、ほかのプログラムから決まった方法で呼び出して使えるようにした窓口。

詳しく見る

依存関係

プログラムが動くために必要な、ほかのライブラリやパッケージとの関係。また、その必要な部品そのもの。

詳しく見る

CI/CD

コードの変更をきっかけに、テストやビルド、本番への反映までを自動で行う開発の仕組み。

詳しく見る

クラウド

サーバーやソフトウェアを自分で持たずに、インターネット経由で必要な分だけ利用する形態。AWSやGoogle Cloudなど。

詳しく見る

CVSS

脆弱性の深刻度を0.0〜10.0の数値で評価する共通の基準。数値が大きいほど深刻度が高い。

詳しく見る

シークレット

パスワードやAPIキー、秘密鍵など、他人に知られてはいけない値。コードに書かず専用の仕組みで管理する。

詳しく見る

HTTP

ブラウザとWebサーバーがやりとりするための決まりごと(プロトコル)。暗号化したものはHTTPSと呼ぶ。

詳しく見る

認証

アクセスしてきた相手が本人であることを確かめる仕組み。パスワードや生体情報、電子証明書などを使う。

詳しく見る

CVE

公開された脆弱性に付けられる世界共通の識別番号。「CVE-2026-12345」のように年と連番で表す。

詳しく見る

脆弱性

ソフトウェアや設定の不備のうち、攻撃者に悪用されると情報漏えいや不正操作などにつながる弱点。

詳しく見る

サンドボックス

プログラムを周囲から隔離した環境で動かし、問題が起きてもほかに影響が及ばないようにする仕組み。

詳しく見る

SDK

ソフトウェア開発キット。特定のサービスや環境向けの開発に必要なライブラリやツール、ドキュメントをまとめたもの。

詳しく見る

AIエージェント

目標を与えると、計画を立て、ツールを使いながら作業を自律的に進めるAIの仕組み。

詳しく見る