【Nextcloud】画像ファイルのアップロードがModSecurityにブロックされるのを直す。

さて、前回の続き。

  • Ubuntu 22.04
  • Apache 2.4.52
  • ModSecurity (libapache2-mod-security2) 2.9.5-1
  • OWASP ModSecurity Core Rule Set 3.3.2
  • Nextcloud Hub 6 (27.1.2)

スマホのNextcloudアプリから画像ファイルをアップロードしようとすると、ModSecurity にブロックされて上手くいかない。

ログ(/var/log/apache2/modsecurity_audit.log)を見てみると…

…となっていて、「image/jpeg 形式のファイルの取り扱いは許可されていない。ルール920420に抵触している」と言われています。

前回、Nextcloud を邪魔しないように ModSecurity を設定した筈なのに。

いちおう確認してみると、やはり /usr/share/modsecurity-crs/rules/REQUEST-903.9003-NEXTCLOUD-EXCLUSION-RULES.conf には以下のようなルールが存在し、これが有効になっているので、画像アップロードは問題なく行える筈。

/remote.php/webdav〜 へのアクセスの際は、ルールID:920420(コンテンツタイプの制限)などを無効にする、という設定です。

なのに何故。う〜ん。

頭を抱えつつログとルールを暫し眺めていたら気が付いたのですが、ログの方では

と、アクセスする先は /remote.php/dav になっています。でもルールの方を見てみると、

「/remote.php/webdav へのアクセス時はルール92040を無効にする」と定義されています。

つまり、/remote.php/webdav〜 ではコンテンツタイプ制限が無効になっているけれど、 /remote.php/dav〜 では初期設定どおり image/jpeg を制限したままなので、画像をアップロードしたときにブロックされてしまう、ということではなかろうか。

なので、以下のようなルールを作成。

SecRule REQUEST_FILENAME "@contains /remote.php/dav" \
    "id:90031,\
    phase:2,\
    pass,\
    t:none,\
    nolog,\
    ctl:ruleRemoveByTag=attack-injection-php,\
    ctl:ruleRemoveById=941000-942999,\
    ctl:ruleRemoveById=951000-951999,\
    ctl:ruleRemoveById=953100-953130,\
    ctl:ruleRemoveById=920420,\
    ctl:ruleRemoveById=920440,\
    ver:'OWASP_CRS/3.3.2'"

これを、前回作成した /etc/modsecurity/modsec_local.conf に追加してファイルを保存。

REQUEST-903.9003-NEXTCLOUD-EXCLUSION-RULES.conf 内では、上記の ルール 9003100 の他に、9003105にも、

という設定があり、9003116 にも

という記述があります。

このふたつのルールも、webdav → dav に変更した上で新しい ID を振って、modsec_local.conf に追記しておいたほうが良いかもしれません。

設定が完了したら、いつものように文法チェック → Apache再起動。

sudo apache2ctl -t
Syntax OK   ← …と出たら大丈夫
sudo systemctl restart apache2

はい、これでどうだ。

ひとまず、無事にファイルアップロードが完了するようになりました。

ModSecurity、めんどくさい…。

カテゴリ: