- OpenCode の旧バージョンで、認証なしに任意のコードを実行できる深刻なリモートコード実行脆弱性が発見された
- v1.1.10 より前のバージョンは自動的に HTTP サーバーを起動し、このサーバーは認証手順なしで任意コマンド実行・ファイル読み取り・ターミナルセッション生成を許可していた
- v1.0.216 より前では、Web サイトを訪問するだけでユーザーのローカル環境でコードが実行される可能性があった
- 最新バージョン (v1.1.10) ではサーバーはデフォルトで無効化されたが、有効化した場合でも依然として認証がない
- この脆弱性は CVE-2026-22812 として登録されており、開発者とユーザーは直ちにアップデートと設定確認を行う必要がある
脆弱性の概要
- OpenCode はオープンソースの AI コーディングアシスタントで、v1.1.10 より前は起動時に自動で HTTP サーバー (デフォルトポート 4096+) を開始していた
- サーバーは
POST /session/:id/shell, POST /pty, GET /file/content などのエンドポイントを提供
- 認証手順がないため、接続可能なすべてのクライアントがユーザー権限でコード実行可能
- サーバー起動時にユーザーへの視覚的な表示がなく、公開状態であることを認識しにくい
- CORS ポリシーが
*.opencode.ai にハードコードされており、opencode.ai またはそのサブドメインで配信されるページがサーバー API にアクセス可能
- 当該ドメインが侵害されたり XSS 脆弱性が存在した場合、サーバー有効化状態のすべてのユーザーが攻撃対象になりうる
攻撃ベクトル
- v1.0.216 より前: 任意の Web サイトが OpenCode 実行中のユーザーのローカルマシンでコードを実行可能
- v1.1.10 より前: ローカルプロセスや localhost ページが認証なしでコード実行可能
- すべてのバージョンでサーバーが有効な場合:
- ローカルプロセスおよび localhost ページが認証なしでコード実行可能
--mdns フラグ使用時はローカルネットワーク内のすべてのデバイスがアクセス可能
- サーバー稼働の表示がなく、ユーザーが公開状態を認識できない
- opencode.ai ドメインまたはそのサブドメインからコード実行可能
攻撃例 (Proof of Concept)
- ローカル攻撃: サーバーが稼働中のとき、ローカルプロセスが
curl コマンドでセッションを作成した後、id > /tmp/pwned.txt コマンドを実行可能
- ブラウザベースの攻撃 (v1.0.216 より前): Web ページから
fetch リクエストでローカルサーバーにコマンドを渡し、リモートスクリプトをダウンロード・実行可能
- Firefox で動作を確認、Chrome はローカルネットワークアクセス保護によりユーザー確認ダイアログを表示する可能性がある
ユーザー向け対応策
opencode --version でバージョンを確認し、v1.1.10 以上へアップデート
- 設定ファイルで
server.port または server.hostname 項目が有効になっていないか確認
--mdns フラグを使用しない (0.0.0.0 にバインドされ、ネットワーク全体に公開される)
- サーバーをどうしても使用する必要がある場合は、opencode.ai およびそのサブドメインへのアクセスを避ける
- サーバー有効化時は、ローカルプロセスが認証なしでアクセス可能であることを認識しておく必要がある
公開スケジュール
- 2025-11-17: メールで初回報告、応答なし
- 2025-12-27: GitHub Security Advisory を提出、応答なし
- 2025-12-29: 別のユーザーが公開報告
- 2025-12-30: v1.0.216 で CORS 制限を適用
- 2026-01-09: v1.1.10 でサーバーをデフォルト無効化
- 2026-01-11: 全面公開
推奨措置
- CORS を最小限のドメインに制限 (v1.0.216 で適用)
- サーバーをデフォルトで無効化 (v1.1.10 で適用)
- すべてのサーバーリクエストに認証手順を追加
- サーバー起動時にユーザーへ明確な表示を提供
--mdns オプションが 0.0.0.0 にバインドされることをドキュメントに明記
- ネットワーク通信時に TLS を適用
- GitHub Security Advisory および CVE-2026-22812 を正式公開
- セキュリティ報告用メールおよび GHSA 通知の監視を強化
- OpenCode メンテナー、opencode.ai、ユーザー間の信頼関係を明確化
参考
- CVE: CVE-2026-22812
- 影響を受けるパッケージ: npm
opencode-ai
- 最新情報および問い合わせ: cy.md
1件のコメント
Hacker Newsの反応
メンテナとして、今回のセキュリティレポート対応をきちんとできなかったことを認める。
利用量が急増して問題が殺到しており、今週中に専門家と会ってバグバウンティプログラムとセキュリティ監査を進める予定とのこと。
チーム全員がOWASP Insecure Designガイドを理解し実践することのほうが重要。
OpenCodeは有名なオープンソースのコーディングエージェントだけに、すでに悪用されていた可能性もある。
今からでもgVisorのようなサンドボックス環境でモデルを動かすべきだと思う。
迅速に対応しなければ、さらに多くのRCE脆弱性を狙う攻撃者が現れかねない。
アナキズム的な組織運営原則のようなものも参考にしているのか気になる。
多くの人がOpenCodeのようなツールをローカル環境で権限分離なしに実行している。
プラグインも基本的に無制限アクセスを前提に設計されており、リソース消費も大きい。
少なくともdev-containerやVMの中で実行し、SSHFSやSambaで必要なファイルだけ接続するのがよい。
面倒なら月5ドルのVPSでもよい。
サーバーをqemuで動かすならquickemuがおすすめ。
zedのSSH remote機能も便利で、Claude CodeやOpenCodeと併用できる。
CORS修正で外部ウェブサイトからの悪用は防げたが、根本的にはlocalhostでコード実行が可能な構造そのものが問題。
Neovimはデフォルトでドメインソケットを使い、VS CodeのSSHデーモンには認証手順がある。
認証なしでクライアント入力を実行するローカルサーバーは**LCE(Local Code Execution)脆弱性であり、
ブラウザー経由のリクエストでアクセス可能になるとRCE(Remote Code Execution)**へ拡大する。
認証なしでRCE可能なHTTPエンドポイントをCLIツールに入れ、しかもCORSバイパスまで加えていたとは衝撃的。
脆弱性公開のスケジュールが問題。
2025-11-17に報告されたが、何度連絡しても応答がなかった。
GitHub issueコメントを参照。
サーバーがデフォルトで無効でも、起動すれば依然として深刻。
localhost上でどんなウェブページからでもコード実行が可能で、認証なしでローカルプロセスまで実行できる。
ユーザーにサーバーの起動状態を知らせる表示もない。
TUIアプリは普通こうしたことをしないから信頼されているのに、今回の件はその信頼を大きく損なった。
OpenCodeが**YC(Y Combinator)**の支援を受けている点に驚く。
YCならもっと良いセキュリティ文化を促すと思っていた。
詳しくはこのコメントを参照。
OpenCodeはボランティアプロジェクトだと思っていたが、実際には大手投資家の支援を受ける企業型プロジェクトだった。
機能ばかり追加してコアメンテナンスをおろそかにしていたので、使うのをやめた。
複数モデルを同時に使うのが目的だったが、コンテキスト共有が非効率で実用性に欠けた。
今はClaude CodeとCodexを併用している。
それでも複数モデルを統合するオープンプラットフォームの必要性は依然として大きい。
ampcodeは無料で簡単なスクリプトを作れ、Crush+GLMはClaudeやCodexの計画によく従う。
最初はAiderが気に入っていたが、ほとんどメンテナンスされておらず問題が頻発した。
OpenCodeをインストールしようとしていたが、今回の件を見てためらうようになった。
モデルに依存しないオープンソースのCLI LLMアシスタントがこれほど少ないのは驚きだ。