OpenCode セキュリティ侵害は、AIコーディングエージェントのOSS「OpenCode」の運営元が2026年10月17日(米国時間)にXで公表した事案です。OpenCode Console の利用者の1.4%が影響を受けました。対象は外部のAIプロバイダを連携していた一部の利用者で、OpenCodeは対象者全員にメールで知らせたとしています。報道によれば、漏れた可能性があるのはConsoleのワークスペースに保存したOpenAI・Anthropic・GoogleのAPIキーです。
TIMELINE公表までの流れ
侵害の翌朝にメール、同じ日に公表。調査は続いている
-
10/17
Console への侵害
公式投稿の文言は「昨夜」(米国時間)
-
10/17朝
対象者全員にメール
メールが来ていなければ対象外(公式)
-
10/18
Xで公表(日本時間3:08)
Console 利用者の1.4%。外部プロバイダを連携した一部
-
10/18
海外メディアが報道
顧客メールを引用。古いシステムが侵入口、キーの失効を依頼
30秒でわかる(2026年10月18日時点)
- ・規模:OpenCode Console 利用者の1.4%(公式投稿)。実数は公表されていない
- ・対象:外部プロバイダを連携していた一部。メールが来ていなければ対象外と公式は説明
- ・漏れた可能性があるもの:Consoleに保存したOpenAI・Anthropic・GoogleのAPIキー(報道が引用した顧客メール)
- ・分かっていないこと:侵入の方法と期間、キーが実際に使われたか。公式は「調査中のため詳細は話せない」としている
まずやること(対象のメールを受け取った人・Consoleを使っていた人)
- Consoleに連携していたキーを各社の管理画面で無効化して新しいキーを作る。Anthropic・OpenAI・Google のそれぞれで行う
- 同じキーを使っていた手元の設定・CI・
.envを新しいキーに置き換える。下の確認コマンドで、置き忘れを探す - 各社の利用量と請求を確かめ、月の利用上限を設定する。身に覚えのない利用があれば各社のサポートへ
開発者が自分のシステムを守る全体の考え方は サプライチェーン攻撃とは|手口・防御ツール比較・npm 12の新機構まで実践解説 にまとめています。OpenCode そのものの使い方は OpenCodeとは|使い方・インストールとClaude Codeとの違い(GitHub20万スター超のOSS) で紹介しました。
OpenCode セキュリティ侵害の時系列
| 公表日・日時 | 出来事 | 報告元 |
|---|---|---|
| 2026年2月23日 | Anthropicが、不正なアカウントを使った大規模な蒸留の手口と対策を公表 | Anthropic |
| 10月16日夜〜17日(米国時間) | OpenCode Console への侵害。投稿の文言は「昨夜」 | OpenCode公式X |
| 10月17日朝(米国時間) | 対象者全員にメールで通知 | OpenCode公式X |
| 10月18日 3時8分(日本時間) | OpenCodeがXで公表(米国時間では17日の昼) | OpenCode公式X |
| 10月18日(日本時間)中 | 海外のメディアと開発者ブログが、顧客メールの内容とともに報道 | Notebookcheck・DEV など |
| 10月18日(日本時間)時点 | 公式の続報なし。投稿は「事案は継続中」 | — |
数値は報告元ごとに出どころが違います。混ぜずに並べます。
| 数値・内容 | 出どころ | 確かさ |
|---|---|---|
| Console 利用者の1.4% | OpenCode公式X | 公式の発表。母数と実数は未公表 |
| 外部プロバイダを連携した一部 | OpenCode公式X | 公式の発表 |
| OpenAI・Anthropic・Google のキー | 報道が引用した顧客メール | 公式投稿には社名の列挙なし。Anthropic・OpenAI・Google と対処中という記述はある |
| 廃止予定の古いシステムが侵入口 | 報道が引用した顧客メール | 公式投稿には無い。メールの文面は利用者が貼ったもの |
| Anthropic の身に覚えのない請求 約400ドル | Reddit の利用者の報告(報道が紹介) | 1件の報告。OpenCode・Anthropic は確認していない |
公式投稿・顧客メール・報道で分かるOpenCode Consoleの侵害
OpenCode の公式投稿が言っているのは次の4点です。
・昨夜、大規模な蒸留攻撃に関連するセキュリティ侵害があり、Console 利用者の1.4%が影響を受けた
・今朝、対象者全員にメールで知らせた。メールが届いていなければ影響はない。対象は外部プロバイダを連携した一部の利用者
・事案は継続中で、現時点では詳細を話せない
・Anthropic・OpenAI・Google と協力して対処している
報道(Notebookcheck、DEV、Cyera のブログなど)は、利用者が公開した顧客メールを引いて、ワークスペースに保存した第三者プロバイダのキーが「漏れた可能性がある」こと、侵入口が廃止作業中の古いシステムだったこと、キーを無効にして作り直すよう求めたことを伝えています。キーが実際に悪用されたかは、OpenCode も確認できていないと報じられています。
WHY IT COSTS YOU盗まれたキーの行き先
盗まれたキーで呼ばれた分は、持ち主に請求される
-
Console に保存
ワークスペースに連携
-
侵害で流出の恐れ
古いシステム(報道)
-
第三者が API を呼ぶ
大量の呼び出しも可能
-
請求は持ち主へ
上限が無ければ積み上がる
「蒸留」は強いモデルの出力で性能の低いモデルを学習させる手法です。Anthropic は2月23日の投稿で、約2万4,000の不正なアカウントや、アクセスを転売するプロキシを使った大量の呼び出しを報告しました。他人のAPIキーを手に入れれば、自分の名義を出さずに大量に呼び出せ、請求はキーの持ち主に届きます。ただし OpenCode は、今回の侵害と蒸留のつながり(盗まれたキーが蒸留に使われたのか、侵入そのものの目的だったのか)を説明していません。本記事もそこは推測しません。
連携していたAPIキーの対策と失効の手順
順番は「止める → 作り直す → 置き換える → 確かめる」です。本番で使っていてすぐ止めると困るキーは、Google の手順のように新しいキーを先に作り、置き換えてから古いキーを止めます。
WHAT TO DOやること
止めて作り直し、置き換え、請求を確かめる
-
1.連携していたキーを無効化し、作り直す
本番用は新しいキーを先に作る。Claude Console は有効期限を選べる
-
2.手元・CI・.env を新しいキーに置き換える
古い auth.json やリポジトリの履歴に同じキーが無いかも見る
-
3.利用量と請求を確かめ、上限を置く
身に覚えのない利用は各社のサポートへ
| 提供元 | 無効化・作り直し | 利用量・上限の確認 |
|---|---|---|
| Anthropic | Claude Console の API keys ページ(platform.claude.com/settings/keys)。Disable は元に戻せ、Delete は戻せない。新しいキーには有効期限を付けられる |
Usage ページで利用量、Billing ページの Spend limits で月の上限を設定 |
| OpenAI | ヘルプ記事「Best Practices for API Key Safety」は、漏れたと考えたらすぐ取り替えるよう求め、プロジェクトのキーに有効期限を付けることを勧めている | 利用量の画面で身に覚えのない利用を確かめ、プロジェクトか組織に月の利用上限を設定する |
| Google(Gemini API) | Gemini API のドキュメントは、新しいキーを作って置き換え、動くのを確かめてから古いキーを Cloud Console で無効にする順を勧めている | 課金と API の利用状況のログを確かめる |
Console に GitHub でログインしていたなら、GitHub の Settings → Applications → Authorized OAuth Apps で OpenCode の連携を確かめ、使っていなければ Revoke で取り消せます。公式投稿は GitHub に触れていないので、これは漏えいへの対処ではなく、使っていない連携を減らす片付けです。
鍵が漏れたときの最初の1時間の考え方は アクセスキー漏洩を防ぐ|開発用クラウドの長期キーをやめ、漏れても使えず気づける形にする手順と、漏れた最初の1時間 で、Gemini のキーが悪用される流れは Gemini APIキーが不正利用される仕組みと防止策:数百万円の被害を防ぐ実践ガイド で扱いました。
手元のOpenCodeとリポジトリを調べる確認コマンド
Console に預けたキーは opencode.ai 側にあり、手元のコマンドからは見えません。ここで確かめるのは、同じキーを手元の OpenCode やリポジトリにも置いていないかです。取り替えたあとに古いキーが残っていると、そこから使われたり、新しいキーへの置き換え漏れになったりします。
手元の OpenCode に保存されたキー
当サイトで OpenCode CLI v2.0.32(npm の @opencode/cli)と v1.19.3(opencode-ai)を入れ、ダミーのキーで保存先を確かめました。
| 版 | 保存先(Linux・macOS の既定) | 中身 |
|---|---|---|
| 1系(v1.19.3) | ~/.local/share/opencode/auth.json(権限600) |
キーが平文のJSON |
| 2系(v2.0.32) | ~/.local/share/opencode/opencode.db(権限600)の credential 表 |
キーが平文のJSON |
| 1系から2系へ上げた場合 | 両方 | 2系が auth.json を取り込み、auth.json は消さない |
XDG_DATA_HOME を設定していれば、~/.local/share の代わりにそのディレクトリです。
opencode --version
# 2系: --standalone を付けると、今のシェルの環境変数で一覧を出す
opencode auth list --standalone
# 1系はオプションなしで実行する
# opencode auth list
ls -l ~/.local/share/opencode/auth.json ~/.local/share/opencode/opencode.db
grep -cE 'sk-ant-|sk-proj-|AIza' ~/.local/share/opencode/auth.json
陽性対照としてダミーのキーを保存すると、auth list に Anthropic が stored と出ました。ANTHROPIC_API_KEY などを環境変数に入れた場合は environment と出ます。削除(opencode auth logout)すると「No authenticated integrations」になりました。auth.json が無い環境では、ls と grep は「No such file or directory」を出します。
ただし、1系から2系へ上げてから削除した環境では、auth list は空でも、古い auth.json にキーが残り、grep -c は 1 を返しました。一覧に出ないことは、手元にキーが無いことの証明にはなりません。古いキーを無効化したあとなら、残った auth.json は使えない値です。消すかどうかはその後で決めます。2系の opencode auth list をオプションなしで実行すると、裏で動くサービスを起動したときの環境変数で一覧が出ました。今のシェルの状態を見るなら --standalone を付けます。
リポジトリと CI に置いた同じキー
ファイルの置き場所から探し、次に中身の形で探します。
git fetch --all --prune
git ls-files | grep -E '(^|/)(\.env(\..+)?|opencode\.jsonc?|auth\.json)$'
git log --all --diff-filter=A --name-only --format= | grep -E '(^|/)(\.env(\..+)?|opencode\.jsonc?|auth\.json)$' | sort -u
git grep -lE 'sk-ant-[A-Za-z0-9_-]{20,}|sk-(proj|svcacct|admin)-[A-Za-z0-9_-]{20,}|AIza[0-9A-Za-z_-]{35}'
git log --all --format='%h %ad %s' --date=short -G 'sk-ant-[A-Za-z0-9_-]{20,}|sk-(proj|svcacct|admin)-[A-Za-z0-9_-]{20,}|AIza[0-9A-Za-z_-]{35}'
上から順に、今追跡している .env・opencode.json・auth.json、過去に一度でも足されたそれらのファイル、今のブランチの作業ツリーにあるキーの形の文字列、全ブランチの履歴でキーの形の文字列が増減したコミットを出します。
一時リポジトリで確かめました。陰性対照(キーを書いていないコードだけ)では4本とも何も出ません。キーを {env:ANTHROPIC_API_KEY} で参照する opencode.json を足すと、ファイル名で探す2本はそのファイルを出し、中身で探す2本は何も出しませんでした。ファイル名で出たものは開いて中身を確かめます。陽性対照では、opencode.json に書いて次のコミットで消したAnthropicのダミーキー、.env.local のOpenAIのダミーキー、別ブランチのCI設定に書いたGoogleのダミーキーを置きました。3本目の git grep は今のブランチの .env.local だけを出し、消したキーと別ブランチのキーは5本目の git log --all -G で初めて出ました。
この結果はキーの形をした文字列の有無の確認です。漏えいの判定ではありません。何も出なくても、古い形式の sk- だけで始まるOpenAIのキー、CI のシークレット設定(GitHub の Secrets など)、ほかの端末、fetch していないフォークは見ていないので、安全とは言えません。履歴を継続して見張るなら シークレットスキャンの入れ方|gitleaksをコミット前・プッシュ時・CIの3層に組み込み誤検知を絞る の3層が向いています。
OpenCode セキュリティ侵害の影響範囲と10月18日時点の未公表事項
| 区分 | 誰か | 根拠 |
|---|---|---|
| 影響を受ける | Console で外部プロバイダを連携し、OpenCode からメールを受け取った利用者 | 公式投稿 |
| 影響を受けないとされる | メールが届いていない利用者 | 公式投稿 |
| 影響を受けないとする見方がある | CLI だけを使い、キーを手元に置いた利用者 | 報道の分析。公式投稿は CLI に触れていない |
| 分からない | キー以外の情報(メールアドレスなど)、Claude Pro/Max などの OAuth 連携、Console で発行した OpenCode 側の資格情報 | 未公表 |
ほかに、侵入の方法と期間、1.4%の実数、漏れたキーが実際に使われたか、身に覚えのない請求の扱いも公表されていません。当サイトが手元で確かめたのは CLI の保存先までで、Console 側の保存方式は未検証です。
OpenCode の SECURITY.md は、脆弱性の報告を GitHub の Security Advisory で受け付けるとしています。続報が出たら、侵入経路、対象の範囲、悪用の有無、請求の扱いを見ると、自分の対応を見直しやすくなります。本記事も続報に合わせて更新します。
参照ソース
- OpenCode 公式 X の投稿(2026-10-17 米国時間)
- Notebookcheck “OpenCode hacked, users urged to revoke their API keys”
- DEV “OpenCode Told 1.4% of Console Users to Revoke Their OpenAI and Anthropic Keys”
- Cyera “OpenCode Breach: What Happened and How to Rotate Exposed AI API Keys”
- Anthropic “Detecting and preventing distillation attacks”(2026-02-23)
- Claude API Docs “Authentication”(API keys・Disable と Delete)
- Claude API Docs “Rate limits”(Spend limits・Usage ページ)
- OpenAI Help “Best Practices for API Key Safety”
- Google AI for Developers “Using Gemini API keys”
- GitHub Docs “Reviewing your authorized OAuth apps”
- anomalyco/opencode(SECURITY.md・資格情報の取り込み処理
import_legacy_credentials)





