apache脆弱性対策 - Range header DoS vulnerability Apache HTTPD 1.3/2.x (CVE-2011-3192)

もうあちこちで大騒ぎになっていてみんな知ってると思うけど。HTTP Requestに非常に長い(コンマ区切りの複数のヘッダ) Rangeヘッダを送られるとapacheのプロセスがメモリ食いまくるっていう。

追記

2011/9/17 現在でapache 2.2.21 が出ているので、可能であればバージョンアップしときましょう。
## 追記終わり

  • 対象は全バージョンのapache
  • 攻撃が簡単 (Rangeヘッダをちょろっといじるだけ: 某所にupされてるperlも80行程度

ということで結構厄介かも。すぐパッチが出るとのことだけど、急いで対応する場合は↑のURLのとおりhttpd.confを設定する。

apache 2.2の場合はmod_headersを使って、Rangeヘッダに","が5個以上あれば、RequestHeaderからRangeヘッダを消す。つまり普通のRequestとして扱うようにして対応。

apache 1.3, 2.0 の場合はmod_rewriteを使って、Rangeヘッダに","が5個以上あれば403 Forbiddenで返す。

apache 2.2 (mod_headers)

# Drop the Range header when more than 5 ranges.
# CVE-2011-3192
SetEnvIf Range (?:,.*?){5,5} bad-range=1
RequestHeader unset Range env=bad-range

# We always drop Request-Range; as this is a legacy
# dating back to MSIE3 and Netscape 2 and 3.
RequestHeader unset Request-Range

apache 1.3, 2.0 (mod_rewrite)

# Reject request when more than 5 ranges in the Range: header.
# CVE-2011-3192
#
RewriteEngine on
RewriteCond %{HTTP:range} !(bytes=[^,]+(,[^,]+){0,4}$|^$)
# RewriteCond %{HTTP:request-range} !(bytes=[^,]+(?:,[^,]+){0,4}$|^$)
RewriteRule .* - [F]

# We always drop Request-Range; as this is a legacy
# dating back to MSIE3 and Netscape 2 and 3.
RequestHeader unset Request-Range