スプレッドシートの脆弱性に関する注意喚起

This page is also available in English.

Microsoft Excel や OpenOffice Calc などのスプレッドシートアプリケーションに影響を及ぼす脆弱性が最初に報告されてから5年以上が経過しますが、残念ながら未だに解決されていないようです。

これは WordPress やそのプラグインの脆弱性ではありませんが、私たちの製品ユーザーの多くがこれらの脆弱性のリスクにさらされていることは疑いなく、また考えられる損害は非常に大きなものであるので、この問題に関する注意喚起のためにここに投稿するべきだと判断しました。

これらの脆弱性を利用する攻撃者の手口は、まず悪意を持って細工された式をセルに仕込んだスプレッドシートファイルを対象者に送りつけ、そして対象者がそれを個人のコンピューター上のスプレッドシートアプリケーションで開くよう仕向けます。条件が揃えばスプレッドシートアプリケーションはその式を式として解釈し、さらに最悪のシナリオでは、対象者のコンピューター上で任意の OS コマンドを実行することを攻撃者に許してしまうことになります。

これらの攻撃には Excel ファイルだけではなく CSV を含む他のスプレッドシートファイル形式も利用できることがわかっています。

WordPress プラグインの中にはデータを CSV ファイルとしてエクスポートする機能を持つものもあります。式として解釈可能なセルデータをそれらのプラグインで生成できないようにすることがリスクを緩和する上で望ましいでしょう。

Flamingo もそういったプラグインのひとつです。Flamingo 2.1.1 以降、CSV セルの先頭に =+-@ のいずれかがあればデータをエスケープするようになっています。このエスケープが適用された項目は次の例のようになります:

(セキュリティアラート: 疑わしい内容が見つかりました。詳細は https://contactform7.com/ja/heads-up-about-spreadsheet-vulnerabilities/ を参照してください。) =cmd|’ /C calc’!A0

とはいえ =+-@ から始まる項目がすべて悪意ある式だとは必ずしも言えませんから、このエスケープがただの要らぬお節介に終わる場合もあるでしょう。もしこれを無効にしたり、あるいは先頭に加えるテキストを変更したい場合は、flamingo_csv_field_prefix フィルターフックを使って実現できます。例えば、次の単一行コードは先頭テキストを空白文字列に変更します:

add_filter( 'flamingo_csv_field_prefix', '__return_empty_string' );

これは脆弱性の問題そのものに対する解決策にはならないことに注意してください。脆弱性はあなたが使うスプレッドシートアプリケーションに内在し、そして攻撃者は他にいくらでもある経路を利用してあなたに悪意あるスプレッドシートファイルを送りつけることが引き続き可能なのです。

自らの身を守るため次のことを常に意識しましょう:

  1. アプリケーションは常に最新の安全なバージョンに更新して使うこと。
  2. 中にどんなデータが入っているか確信を持てないならアプリケーションのファイルを開かないこと。