iTerm2 の脆弱性 CVE-N/A:エスケープシーケンスに起因する任意のコード実行

iTerm2 Flaw Turns SSH Escape Sequences Into Arbitrary Code Execution

2026/04/20 gbhackers — “cat” などのコマンドを用いたテキスト・ファイルの読み取りは、多くのサイバーセキュリティ・コミュニティにおいて安全な操作であると認識されている。その一方で、セキュリティ研究者たちが実証したのは、人気の macOS 用ターミナル・エミュレータである iTerm2 において、この単純な操作から任意のコード実行に至る可能性である。 OpenAI との共同研究により明らかとなったのは、無害に見えるターミナル出力を処理する際に、ターミナル・エミュレータの信頼モデルに根本的な欠陥が存在することだった。

SSH 統合と Conductor

この脆弱性は、iTerm2 の SSH 統合機能に起因する。この機能は、ターミナル・エミュレータによるリモート・セッションの理解のために設計されている。ログイン・シェル検出やファイル・アップロードなどの処理を調整するため、 iTerm2 は “Conductor” という小規模なヘルパー・スクリプトをリモート・サーバに配置する。

このプロトコルは、独立したネットワーク・サービスを使用せず、通常のターミナル入出力のみで動作する。また、特定のターミナル・エスケープ・シーケンスに依存しており、 SSH 統合機能の Conductor フックには DCS 2000p が、メッセージングには OSC 135 が使用される。


iTerm2 の根本的な問題は、これらのプロトコルをターミナル出力から無条件に受け入れ、そのデータが正当かつ信頼できるリモート・セッション由来であるのかを検証しない点にある。このため、信頼できないターミナル出力であっても、リモートの Conductor スクリプトを容易に偽装できる。

擬似端末 (PTY) は、従来のハードウェア端末のソフトウェア実装であり、ターミナル・エミュレータとフォアグラウンド・プロセスの間に位置する。この構造の隙間をつく攻撃者は、悪意のファイル/サーバ応答/ログイン・バナーなどに、偽造シーケンスを埋め込むことが可能となる。

ユーザーが “cat readme.txt” のような単純なコマンドを実行するときに、以下の手順で攻撃が進行する。

  • 悪意のファイルが、偽造された DCS 2000p シーケンスを出力し、偽の Conductor セッションを通知する。
  • 偽造された OSC 135 メッセージが iTerm2 の自動リクエストに応答し、通常の統合処理フローへと誘導する。
  • iTerm2 はリモート・サーバと通信していると誤認し、 Base64 エンコードされた文字列をローカル PTY に書き込むことでコマンド送信を試みる。
  • しかし、実際には SSH セッションが存在しないため、ローカル・シェルは一連の文字列を通常の入力コマンドとして解釈して実行する。
任意コード実行の実現

攻撃者は、”sshargs” フィールドを操作することでコード実行を成立させる。 iTerm2 が送信データを Base64 エンコードする際に、エンコード文字列の最後が “ace/c+aliFIo” のような有効なローカル・ファイル・パスとなるよう、攻撃者は細工する。

攻撃者が当該パスに実行可能なスクリプトを配置している場合に、ローカル・シェルは Base64 文字列を処理し、そのままペイロードを実行する。この手法により、従来のセキュリティ警告は完全に回避される。

2026年3月30日に研究者たちは、この脆弱性を iTerm2 開発チームに報告し、翌日の 3月31日にコミット a9e745993c2e2cbb30b884a16617cd5495899f86 により修正が適用された。ただし、現時点ではこのパッチは安定版リリースに反映されていない。

公式アップデートが広く展開されるまで、ユーザーは信頼できないテキスト・ファイルの表示や、未知のサーバへの接続において、細心の注意を払う必要がある。