サイバーセキュリティコミュニティでは、catのようなコマンドを使ってテキストファイルを読むだけで完全に安全な操作だと想定することが多いです。
しかし、セキュリティ研究者は最近、人気のあるiTerm2 macOSターミナルエミュレータの内部でそうすることが任意のコード実行につながる可能性があることを実証しました。
OpenAIとのパートナーシップで発見されたこの警戒すべき発見は、ターミナルエミュレータが無害に見えるターミナル出力を処理する方法における基本的な信頼の失敗を浮き彫りにしています。
SSHインテグレーションとコンダクター
この脆弱性はiTerm2のSSHインテグレーション機能に起因しており、この機能はターミナルエミュレータにリモートセッションのより豊かな理解を与えるために設計されました。
ログインシェルの検出やファイルアップロードなどのタスクを調整するために、iTerm2は「コンダクター」と呼ばれる小さなヘルパースクリプトをリモートサーバにドロップします。
このプロトコルは独立したネットワークサービスを使用する代わりに、通常のターミナル入出力をすべて使用して動作します。
このインテグレーションは特定のターミナルエスケープシーケンスに依存しています。SSHコンダクターをフックするためにDCS 2000pを使用し、メッセージング用にOSC 135を使用しています。
根本的な問題は、iTerm2がターミナル出力からこのプロトコルを無条件に受け入れ、データが実際に正当で信頼できるリモートセッションから発信されているかどうかを検証しないということです。
iTerm2はこれらのエスケープシーケンスのソースを検証することに失敗しているため、信頼できないターミナル出力は簡単にリモートコンダクタースクリプトになりすますことができます。
参考までに、疑似端末(PTY)は伝統的なハードウェア端末のソフトウェア代替品であり、ターミナルエミュレータとフォアグラウンドプロセスの間に位置しています。
攻撃者はこのアーキテクチャを悪用することで、偽造されたシーケンスを悪意のあるファイル、サーバレスポンス、またはデイリーグリーティングバナーの中に隠すことができます。
被害者がcatreadme.txtのような単純なコマンドを実行するとき、攻撃は数精密なステップで展開されます:
- 悪意のあるファイルは偽造されたDCS 2000pシーケンスを出力してフェイクコンダクターセッションをターミナルに通知します。
- 偽造されたOSC 135メッセージはiTerm2の自動リクエストに応答し、アプリケーションを通常のインテグレーションワークフローに押し進めます。
- リモートサーバと安全に通信していると信じて、iTerm2はBase64エンコードされた文字列をローカルPTYに直接書き込むことでコマンドを送信しようとします。
- アクティブなSSHセッションがないため、ローカルシェルはこれらのエンコードされた文字列をプレーンな入力コマンドとして解釈します。
任意のコード実行の実現
コードを正常に実行するために、攻撃者はsshargs という偽造フックの特定のフィールドを操作します。
彼らはこの値を慎重に作成して、iTerm2がアウトバウンド応答をBase64エンコードする際に、エンコードされた文字列の最後の128バイトのチャンクが有効なローカルファイルパス(例:ace/c+aliFIo)を形成するようにします。
脅威アクターがその相対パスに実行可能なスクリプトを植え付けている場合、ローカルシェルはBase64文字列を処理してペイロードを実行します。これにより、従来のセキュリティ警告が完全に回避されます。
研究者は3月30日にこの重大なバグをiTerm2開発チームに報告しました。修正は翌日の3月31日にコミットa9e74599を通じてプッシュされました。
ただし、セキュリティプロフェッショナルは、現在の時点では、パッチがまだ安定版ビルドに到達していないことに注意する必要があります。
公式の安定版アップデートが広く展開されるまで、ユーザーは信頼できないテキストファイルを表示したり、見知らぬサーバに接続したりするときは細心の注意を払うべきです。
翻訳元: https://gbhackers.com/iterm2-flaw-turns-ssh-escape-sequences/