Original Id: README.SECURITY,v 3.0 2002/01/24 12:10:47 roessler Exp

最近、MIMEパラメータに埋め込まれたシェルのメタキャラクタの解釈によって
引き起こされるセキュリティ問題の報告がありました。その報告はPineに言及
していましたが、Muttを使うときにもその問題は当てはまります。

もっとはっきり言えば、次のようなmailcapエントリは、問題を引き起こすで
しょう:

> text/test-mailcap-bug; cat %s; copiousoutput; \
>	test=test "`echo %{charset} | tr '[A-Z]' '[a-z]'`" != iso-8859-1

「touch${IFS}ME」という値である charset パラメータを展開したとき、
「ME」という名前のファイルがカレントディレクトリに作られます。

この問題がMUAのせいで生じる問題（下記参照）であるとはまったく認めて
いるわけではないですが、このためにいくつかの修正を施しました：

- mailcapエントリのために % expandos を準備するとき、バッククオート
  (backticks)は特別に扱われます。この修正は現状の問題が生じないようにし
  ます。しかし、この修正によって解決されない他の mailcap エントリがある
  可能性は非常に高いでしょう。

- 我々は $mailcap_sanitize という名前の設定変数(default: yes)を加えま
  した。この設定をすると、Mutt は吟味された安全な文字だけが mailcap % 
  expandos で現れるように制限します。これは安全性の高い設定と思われま
  すが、より高度なMIME要素を壊す可能性があるかもしれません．

>>>  何をしようとしているか分からないのなら、このオプションを解除して
>>>  はいけません。

いずれにしても、この問題はMUA内で解決するのは難しい(たぶん不可能な)の
で、必ずしもMUA内で解決すべきものではありません。さらに、mailcapを解
析するプログラムは Mutt だけではありません。そのため、安全にmailcapを
書くことは一般的に言ってよいことです。そうすることをお勧めします。


最も基本的なルールはこれです：

>>>          % expandos を shell quote で使用するな

引用符または二重引用符で % expandos をクオートしないでください。
mailcap を解釈する他のどのプログラムもそうすべきであるように、正しい
方法で、Mutt 自身がしかるべくクオートを行います。また、バッククオート
(backtick)展開にも入れてはいけません。これは上述のように悲惨な結末を
もたらします。eval文に非常に注意してください。そして、できればそれら
を *完全に* 避けてください。

あなたがクオートまたはバッククオート(backtick)展開を必要とする状況で
%-expandosの値を使わなければならないのであれば、その値をシェル変数に
入れてください。そして、必要なところで（おそらく、"$charset" の様に、
それのまわりに適当にクオートされて置かれている）シェル変数を参照して
ください。


例えば、上記の mailcap 文の安全なバージョンは、このようにできます：

> text/test-mailcap-bug; cat %s; copiousoutput; test=charset=%{charset} \
>         && test "`echo \"$charset\" | tr '[A-Z]' '[a-z]'`" != iso-8859-1

