テキストファイルは安全か

「TXT」という拡張子のファイルは一般的に安全と見なされています。果たして本当にそうなのでしょうか?

社外からのメールを受け取る立場にある人たちは、どういったファイルに危険性が潜んでいるのかを知らされているものです。例えば、実行形式であるEXEファイルは、初めから安全ではないものと見なされています。悪意あるマクロが含まれている可能性のあるDOCXファイルやXLSXファイルも同様です。一方でテキストファイルは、プレーンテキストしか含まれないため、無害であると一般的に考えられています。しかし、常にそうとは限りません。

テキストファイルを通じて脆弱性を悪用する方法(現在は修正済み)が、リサーチャーによって発見されました。もしかすると、今後もそういった方法が見つかるかもしれません。問題は、テキストファイルというファイル形式ではなく、プログラムがテキストファイルを処理する方法にありました。

macOSの脆弱性、CVE-2019-8761

リサーチャーのパウロス・イベロ(Paulos Yibelo)氏は、テキストファイルを使用してmacOSコンピューターを攻撃する興味深い方法を紹介しています(英語記事)。macOSの標準セキュリティシステムであるGatekeeperは、多くの保護システムと同様に、テキストファイルを完全に信頼してよいものと見なしています。テキストファイルをダウンロードし、標準搭載されている「テキストエディット」を使用して開く際に、特別なチェックは行われません。

ところが、テキストエディットは、Microsoft Windowsの標準テキストエディターである「メモ帳」よりも、少しばかり高性能です。文字を太字にしたり色を変えたり、できることがいろいろあります。TXT形式はスタイル情報を保存する仕様になっていないので、テキストエディットでは、追加の技術情報を取得することによって、こうした操作ができるようにしています。例えば、「<!DOCTYPE HTML><html><head></head><body>」という行で始まるファイルの場合、拡張子が.txtのファイルであっても、テキストエディットはHTMLタグの処理を開始します。

要するに、上記のようなHTMLコードをテキストファイルの冒頭に書き込むことで、テキストエディットにそのコード、または少なくともその一部を処理させることができるのです。

テキストファイルを通して実行可能な攻撃

イベロ氏は、この方法でどんなことが可能なのかを注意深く確認し、以下が可能であることを突き止めました。

  • DoS攻撃:Gatekeeperは、拡張子が.txt のオブジェクトからローカルファイルが開くのを阻止しません。そのため、例えばヌル文字を延々と供給する/dev/zeroファイルにアクセスするHTMLコードが書き込まれているテキストファイルを開くと、コンピューターに過剰な負荷がかかる可能性があります。
  • 本当のIPアドレスの特定: AutoFSはmacOSの標準プログラムで、ファイルシステムを自動的にマウントして外部ドライブへのアクセスを可能にします。テキストファイル内のコードからAutoFSを呼び出した場合、自動マウント処理によってシステムカーネルから強制的にTCP接続要求が送信されるため、プロキシサーバーを使用していたとしても、ファイルが開かれた正確な時間と本当のIPアドレスが攻撃者に知られてしまいます。
  • ファイルの窃取:<iframedoc>コードを使用して、テキストファイルの中にローカルファイルを挿入することができます。テキストファイルは、被害者のコンピューター上のあらゆるファイルにアクセスできるだけでなく、Dangling Markup攻撃によってファイルの中身を外部に転送可能です。この操作は、悪意あるテキストファイルを開くだけで実行されます。

この脆弱性は2019年12月にAppleに報告され、CVE-2019-8761(英語)という番号が割り当てられました。イベロ氏のブログには、この脆弱性を悪用した攻撃について詳しい情報が記載されています(英語記事)。

安全のために

この脆弱性CVE-2019-8761は、2020年にリリースされたアップデートで修正されています。とはいえ、TXTファイル関連のバグがこれ以上ないという保証はありません。まだ悪用の方法が見つかっていないだけの脆弱性が存在する可能性があります。したがって、「このテキストファイルは安全か?」という問いに対する回答としては、「今のところは。ただ、油断はできない」が正解でしょう。

したがって、どんな種類のファイルであっても(見たところ害のなさそうなテキストファイルでも)脅威となる可能性があるものとして扱うように、全社員へ意識付けを行うことをお勧めします。

ヒント