VSCode SSH機能の仕組みに警鐘
原題: VSCode's SSH Agent Is Bananas (2025)
なぜ重要か
VSCodeが事実上の開発標準となった今、その内部動作のセキュリティリスクを正確に理解することはインフラ設計上の必須知識となっている。
Fly.ioのセキュリティ研究者Thomas Ptacekが2025年2月7日、VSCodeのSSHリモート編集機能の内部動作について詳細な分析を公開した。同機能はSSH接続上でNode.jsバイナリを含むエージェントをリモートに展開し、ファイルシステムの操作・シェルプロセスの起動・自身の永続化を行うWebSocket通信を確立する仕組みであることが示された。
Fly.ioの技術ブログにて、セキュリティ研究者のThomas Ptacekが、VSCodeのSSHリモート編集機能の実装について分析を公開した。
発端はFly.ioがLLMエージェント用途でVSCodeのリモート編集フローとの統合を検討したことだ。LLMが生成したコードをエージェントが実行し、エラーをフィードバックしながらループ的に反復するいわゆる「agenticセットアップ」において、ローカルマシンではなくクリーンなLinuxインスタンス上で実行したいというニーズが背景にある。
Ptacekが注目したのは、EmacsのTrampとVSCodeのリモート編集機能の設計思想の違いだ。Trampはリモート環境のBourne shellコマンドだけで動作するのに対し、VSCodeはBashスクリプトのステージャーを使ってNode.jsバイナリを含む独自エージェントをリモートホストにダウンロードし、ポートフォワードされたSSH上でWebSocket接続を確立する。
このエージェントが持つ能力は広範だ。ファイルシステムの自由な閲覧・任意ファイルの編集・独立したシェルPTYプロセスの起動、そして自身の永続化——これらを一括して行う。Ptacekは「セキュリティ業界にはこのような動作をするツールを指す名称がある。ネズミ目に関連する名前だ」と皮肉を込めて記述し、名称を直接は使わない配慮をした。
実用上の懸念として、開発サーバーへのVSCodeリモート接続を安易に許可することへのリスクを指摘。特に本番環境のインシデント対応中にこのような接続が発生した場合は「激怒に値する」と述べた。
なお、Fly.ioとしてはカスタム接続の実装においてこのSSHエージェントの仕組みに依存する必要はなかったと結論付けており、技術的な啓発を目的として知見を公開した形だ。