個人personal

発端:GitHub侵入事件の報道

2026年5月18日にGitHub関連のサプライチェーン攻撃報道が出た。npm経由・拡張機能経由で悪意あるコードが入り込んでいた、という筋の話だ。

ニュースを流し読みしていて手が止まった。手元のVS Codeは拡張機能を自動更新する設定のままだ。もし自分が入れている拡張のどれかが乗っ取られて悪意あるバージョンを配信されたら、自分は何もせずに迎え入れることになる。

Claude Codeに最初に投げた一言はシンプルだった。

「VS Codeの拡張機能の自動更新を一括でオフにしたい」

返ってきたのは settings.json をいじる方法だった。extensions.autoUpdateextensions.autoCheckUpdatesfalse にすれば、自動更新も更新チェックも止まる。

直感:「自動更新オン=今は危険なのでは」

ここで一拍置いた。普段なら「自動更新オン=最新のセキュリティパッチが入る=安全」というのが定石のはずだ。なのに今は逆の感覚が来ている。

「自動更新オン=悪い拡張が自動で入ってくるリスクの方が今は怖い」

自分の直感はそう告げていた。これが正しいのか、ただの被害妄想なのか。Claude Codeに裏取りを頼んだ。

報道と最近のサプライチェーン攻撃事例を当たってもらった結果、直感の方が現実に近かった。乗っ取られた拡張のアップデートが配信された瞬間に全ユーザーが即時感染する、というのが今回の手口の核だ。脆弱性パッチを待つよりも、悪意ある更新を踏まないことの方が、現時点では優先度が高い。

自動更新は止める、という判断で運用に入った。月一くらいで手動アップデートに切り替える。

ローカルチェック:settings.json と拡張一覧

「設定を変えました」で終わらせると意味がない。今この瞬間の自分のローカルが汚染されていないかも確認したい。

Claude Codeに settings.json を覗いてもらった。秘密値が漏れていないか、知らない設定が混ざっていないか。結果はクリーンで、APIキーの直書きもなければ、見覚えのないリモート参照もなかった。

次にインストール済みのVS Code拡張を一覧化してスキャンしてもらった。「軽微な注意」レベルの拡張が3つ引っかかった。

  • 個人開発者で更新が止まっている拡張
  • 似た名前の本物と紛らわしい命名の拡張
  • 必要な権限以上を要求している拡張

3つとも、たまにしか使っていない or 代替がある類のものだった。

「3つとも消して」

VS Code CLI から code --uninstall-extension {ID} を3連発で打ってもらって即時削除。

ここで自分から追加質問を投げた。

「拡張機能の表示タイトル何?」

ID(パブリッシャー.拡張名)だけ並べられても直感的に分からない。表示名・パブリッシャー・用途を表にして返してもらって、ようやく「ああ、あれか」と腑に落ちた。

Chrome拡張も棚卸し:53拡張からスタート

VS Codeを片付けたら次はChromeだ。Chromeの方が拡張機能経由のリスクは大きい。常時起動していて、銀行も会計ソフトも開いている。

複数のChromeプロファイルを横断して、アクティブな拡張機能を全部スキャンしてもらった。総数53。

良い兆候もあった。サイドロード(Chrome Web Store外から手動で入れた拡張)はゼロ。全てWeb Store公式配信経由だった。少なくとも「素性の知れない拡張を野良で入れていた」という最悪の事態ではない。

ただ、53は多すぎる。Claude Codeに「使ってない or 第三者製で広い権限」のものを優先度付きでリストアップしてもらった。7つピックアップされた。

Chrome CLIで削除できない罠

「じゃあVS Codeと同じくCLIで7つ消して」と頼んだら、ここで詰まった。

Chromeは CLI からの拡張削除をサポートしていない。拡張フォルダを直接削除しても、Chrome同期で次回起動時に復活する。同期が無効でも、拡張設定DBに残骸が残って挙動が怪しくなる。

Claude Codeの提案は、chrome://extensions/?id={拡張ID} という個別の削除ページURLをワンクリックで開く動線を出すことだった。コマンド一発でURLリストが出てきて、自分はそれをポチポチ開いて削除ボタンを押すだけ。半自動だが現実的に一番早い。

想定の5つどころか22個削減

ここで自分のスイッチが入った。提示された7つだけでなく、自分の判断で「これ最近開いてないな」「これ別の拡張で代替できるな」というのも巻き込んで消し始めた。

ポチポチを終えて、もう一度Claude Codeに再スキャンを頼んだ。

結果:53 → 31拡張(22個削減)

想定の5つどころではない数字になった。ニュース1本きっかけで、ずっと放置していた拡張機能のレイヤーが一気に薄くなった。

Vimiumは戻す、Power Automateは要らない

整理が終わって数時間後、ブラウザを使っていて手が止まった。Vimiumを消したのを忘れていて、いつものキーバインドでスクロールしようとして反応しなかった。

「Vimium戻したい。あとPower Automateは要らない」

この依頼をClaude Codeに並列で投げた。

  • Vimiumの Chrome Web Store インストールページを開く
  • Power Automate の削除ページを開く

両方が同時にChromeに開いて、自分はクリックするだけ。一度引いた線を、必要なものだけ戻す、という運用に落ち着いた。

学び:直感の言語化をAIに頼める時代

今回の流れを振り返ると、自分の役割と Claude Code の役割がきれいに分かれていた。

  • 自分:「自動更新オン=今は危険なのでは」という違和感を拾った
  • Claude Code:その直感を報道調査・設定変更・拡張棚卸し・削除動線提示で裏取り&実行した

普段のセキュリティ運用だと、「なんとなく危ない気がする」で終わりがちな違和感を、AIに裏取りさせて事実に落とせるようになった。設定変更も拡張棚卸しも、本来なら腰が重い作業だ。それを「ニュースを見た日のうちに」終えられた。

税理士・会計士の業務に置き換えるとこうなる。クライアントの会計データを開く側のブラウザに、よくわからない拡張機能が入っていないか、半年に一度くらいは見直したい。サイドロード拡張ゼロを確認するだけでも、内部統制上の説明力が上がる。

残課題

  • VS Code拡張は月1で手動アップデート(カレンダーに登録した)
  • Chrome拡張のリストを月1で再スキャン(53に戻らないように)
  • サイドロード拡張がゼロのままか、四半期で確認する