2021年6月に公開されている「アクセス制限不備の脆弱性」について解説します。
この脆弱性は公式サイトでは「リスク高」となっています。4.0.6という限られたバージョンでのみ、.htaccessの設定ミスで閲覧できてはいけないファイルが閲覧可能となってしまっていた不具合です。
.htaccessファイルとは?
.htaccessとは「hypertext access」という意味で、Apache Webサーバーなどで使用される設定ファイルの一種です。主に、ウェブサイトのディレクトリごとに個別の設定を行うために使われます。
本脆弱性の概要
ルートディレクトリ(一番上の階層)に設置された.htaccessの設定が間違っていました。
間違っているコード
<FilesMatch "^composer|^COPYING|^\.env|^\.maintenance|^Procfile|^app\.json|^gulpfile\.js|^package\.json|^package-lock\.json|web\.config|^Dockerfile|^\.editorconfig|\.(ini|lock|dist|git|sh|bak|swp|env|twig|yml|yaml|dockerignore|sample)$">
order allow,deny
deny from all
</FilesMatch>
<Files ~ "/index.php">
order deny,allow
allow from all
</Files>
<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>
具体的には、FilesMatchのセクションの順番に問題があります。
特定のファイルのアクセスを禁止するためにFilesMatchが使用されていますが、FilesMatchは後から処理されたものが優先されるため、上のFIlesMatchと下のFilesMatch両方に該当するファイルは下のFilesMatchに書かれている処理が優先されます。
上のFilesMatchは正規表現で特定のパターンのファイルへのアクセスを禁止しています。
下のFilesMatchは「否定後読み」という正規表現が使われていますが、簡単にいうと「拡張子が.gif、.png、.jpg、.jpeg、.css、.ico、.js、.svg、.map以外」の場合にマッチするため、上のFilesMatchで禁止したはずの.envなどの重要なファイルへのアクセスを許可してしまっています。
この不具合の対策は適切な順番で処理されるように.htaccessを書き換えることになります。
独自カスタマイズ部分やプラグインについても対応が必要か
本脆弱性と直接は関係ありませんが、独自にディレクトリを作ってデータを保存している場合、そのディレクトリ内のファイルに直接アクセスできないようになっているかどうか確認した方がよいと考えられます。
また、クラウドやVPSで独自にサーバーを構築している場合、WEBサーバーの設定で.htaccessが丸見えになってしまっているサイトも見かけます。
脆弱性修正の難易度について
.htaccessを適切に書き換えることで修正が完了します。修正後は.htaccessや.envファイルにブラウザでアクセスできない状態であることを目視で確認ください。
この脆弱性はサイトを独自にカスタマイズしている場合、適切に設定するには.htaccessやWEBサーバーの知識が必要です。
対応が難しい場合は下記よりお問い合わせください。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。