EC-CUBE / ec-cube

EC-CUBE is the most popular e-commerce solution in Japan
https://www.ec-cube.net
Other
745 stars 648 forks source link

サブディレクトリの.htaccess によるアクセス拒否が機能しなくなった(4.0.6以降) #5358

Open m-pyon23 opened 2 years ago

m-pyon23 commented 2 years ago

概要(Overview)

サブディレクトリに以下のような.htaccessを配置しても、アクセス拒否が行われない。

order allow,deny
deny from all

4.0.6対応の中で行われた以下の.htaccessのFileMatchブロックの記述による許可設定が優先されているため?

該当のFileMatch記述を削除すると、再度サブディレクトリの.htaccessによるアクセス拒否が機能するようになります

<FilesMatch "(?<!\.gif|\.png|\.jpg|\.jpeg|\.css|\.ico|\.js|\.svg|\.map)$">
    SetEnvIf Request_URI "/vendor/" deny_dir
    Order allow,deny
    Deny from env=deny_dir
    Allow from all
</FilesMatch>

https://github.com/EC-CUBE/ec-cube/pull/5073/commits/e689164e09ed43deab0b139c86416cd515ceb70c#diff-270939b4fba4be968ab78e23dc0207eb893744491980a25c99a27c809a82ddabR13

本体開発のみでは問題とならない理由

本体の現状としては、サブディレクトリの.htaccessが機能しなくなっても RewriteRule "^vendor/" - [F] 等の記述で二重に守られているため、支障がない状況と思います。

ただ、カスタマイズで独自にフォルダを作成する場合等の落とし穴になりやすいと感じるため、回避できた方がうれしい (もちろん独自にそのようなカスタマイズする場合はサブディレクトリの.htaccessのみに頼らず、vendor等と同様RewriteRule等で多重に対策すべきとは思いますが)

期待する内容(Expect) or 要望 (Requirement)

サブディレクトリに以下を記述した.htaccessを配置すると、該当ディレクトリへのアクセスが拒否されること

order allow,deny
deny from all

再現手順(Procedure)

以下のようなURLでアクセスすると、アクセス出来てしまう。

該当のFileMatch記述をコメントアウトすると、403エラーになるようになる

環境 (environment)

関連情報 (Ref)

備考

本件、事前にEC-CUBEサポートへ連絡し、本体の脆弱性としては扱わない旨確認済

m-pyon23 commented 2 years ago

私もApache, .htaccessの挙動(許可設定の適用優先度など)にあまり明るくないため、誤解があればご指摘いただきたいところもあります

m-pyon23 commented 2 years ago

Apacheドキュメント セクションのマージ方法 https://httpd.apache.org/docs/2.4/sections.html#mergin

マージの順番は以下のようになっています:

  1. Directory (正規表現無し) と .htaccess を同時に (.htaccess が許可されていれば、それが Directoryを上書きします)
  2. DirectoryMatch と Directory ~
  3. Files と FilesMatch を同時に
  4. Location と LocationMatch を同時に

上記によると、.htaccessはDirectory相当として扱われ、かつFiles/FilesMatchの方が後に評価されるとのこと。 よってサブディレクトリの.htaccessにdeny from all を書いても、FilesMatchのAllow from all の方が優先される…と解釈しています。

m-pyon23 commented 2 years ago

セキュリティチェックプラグインやセキュリティチェックシート等で var, vendor 等の露出対策として.htaccessの配置が紹介されていますが、この対策が意味をなさないことになるのではないかと思います