CSRF脆弱性と0.9.6.2のHTTPリファラチェック機能

MODx 0.9.6.1p2とそれ以前のバージョンにおいて、CSRF脆弱性が発見されている。該当するバージョンを使用しているユーザは適切な対策を行うことが望まれる。

CSRF脆弱性はCSRF攻撃の対象となる脆弱性で、CSRF攻撃とは、正規のユーザに不正な操作を強いる攻撃である。

MODxにおいては、ユーザが正規のセッションにある場合(ログインしたままの状態)に、悪意ある者がユーザを特定のURIにアクセスさせることによって、ユーザが意図しない操作を強いられることになる。対象としては、ドキュメントの削除、リソースの削除、ユーザの削除など広範囲に渡る。これは、正規の権限を持つユーザが、意図しない内に悪意のあるURIにアクセスさせられ、自らの行動によって問題の操作が引き起こされるためである。

MODx 0.9.6.2においては、HTTPリファラによるチェック機能が搭載されており、この機能を有効にすることで、正規のドメインを経由しない操作が遮断されることになり、CSRF攻撃の可能性を軽減させることができる。具体的には、「ツール」→「MODX 設定」→「サイト」→「HTTP_REFERER チェック」を「はい」にすることで有効になる。

ただし、この機能は環境によっては正しく動作しないことがある(特に、リファラの送信を遮断するセキュリティソフトウェアを使用している環境など)。その場合には、HTTPリファラチェック機能を無効にする必要があるが、この機能を有効にした後ではマネージャにアクセスできなくなる可能性がある。そういった場合、データベースと/assets/cache/siteCashe.idx.phpを修正して、HTTPリファラチェック機能を手動で無効にする必要がある。

HTTPリファラチェック機能を手動で無効にするには、データベースのsystem_settingsテーブルの「setting_name」フィールドが「validate_referer」となっているレコードの「setting_value」フィールドを「0」に修正する。その後、/assets/cache/siteCache.idx.phpの以下の部分を同様に「0」に修正する。

$c['validate_referer'] = "0";

このように、HTTPリファラチェック機能は完全なものではなく、今後の開発の中で、より適切な対策を行うように改善していくとのことである。

MODxに対するCSRF攻撃への対策として、0.9.6.2にアップグレードし、HTTPリファラチェック機能を有効にすること、あるいは、必要な操作が完了した後には、必ずログアウトすることが望まれる。

MODx 0.9.6.2は日本語環境で文字化けが発生することが判明した。まもなく、0.9.6.3がリリース予定であり、それまでセキュリティ面に注意しながら、アップデートを待ったほうがよさそうだ。