確認方法
Apache 2.4の環境において、AllowOverride FileInfo
などで.htaccessを有効にした状態で、以下のような設定をする。この設定では、特定のネットワーク内からだと認証無し、それ以外からはShibboleth認証をした場合にウェブページが閲覧できるようになる。
.htaccess
Satisfy any
Order deny,allow
Deny from all
Allow from 192.168.0.0/24
AuthType shibboleth
Require shib-session
ただし、この場合許可されたIPアドレスの範囲(192.168.0.1など)から当該ディレクトリにアクセスした際、URIを指定することで.htaccessの内容が閲覧できるようになっている。
上記設定だと特に見られても問題なさそうではあるが、設定によっては致命的となりうる。
たとえば以下の場合、不用意にも.htpasswdをドキュメントルート配下に設置しているため、.htaccessを見た後に.htpasswdをウェブブラウザで見ることができ、ユーザ名とパスワードハッシュが漏洩する。
/var/www/html/.htaccess
Satisfy any
Order deny,allow
Deny from all
Allow from 192.168.0.0/24
AuthType basic
AuthUserFile /var/www/html/.htpasswd
AuthGroupFile /dev/null
AuthName "Authentication required"
Require valid-user
もしBASIC認証にLDAPを利用していた場合は、バインドユーザの情報が漏洩することになる。
対応方法
httpd 2.2互換の記述方法ではなく、httpd 2.4標準のRequireAny
を使う。
.htaccess
<RequireAny>
Require all denied
Require ip 192.168.0.0/24
AuthType shibboleth
Require shib-session
</RequireAny>
補足メモ
- ググってみると本現象について簡単に触れているものはあったが、半ば常識なのか詳細な解説は見られなかった。バグでは無く仕様っぽい。
- 恐らく
/etc/httpd/conf/httpd.conf
で、.ht*に対してアクセスできないよう設定されているディレクティブが上書きされてしまうため、このような現象となると思われる。 - CentOS 7で確認したが、httpd 2.4.46をソースからビルドしても同様となった。
- 許可されたIPアドレスからアクセスした場合のみ.htにアクセス可能、認証した場合は.htにはアクセスできない(許可されたIPアドレスであっても)。