そもそも問題となっている Range ヘッダは、ブラウザでPDFの閲覧をしている時などにも使用されています。
GET /net/apache//httpd/docs/httpd-docs-2.2.14.en.pdf HTTP/1.1 Accept: */* Range: bytes=3653554-3854257, 1077245-3603942, 3608039-3653553 ...
このヘッダを使用して、なぜプロセスの肥大化が引き起こされるのかについては下記のページで丁寧に説明されていて、Range で細かい区間を要求されることにより、管理データを追加していくループ処理の増加が原因とのこと。
CVE-2011-3192 Range header DoS vulnerability Apache 1.3/2.x の更に続き
追加された MaxRanges ディレクティブ では、制限値(デフォルト: 200)を超えた場合、要求されたコンテンツをそのまま返すようになっています。区間要求が無視されることにより、プロセスの肥大化を防ぐ仕組みですね。
# vi httpd.conf ---------------------- # MaxRanges: Maximum number of Ranges in a request before # returning the entire resource, or 0 for unlimited # Default setting is to accept 200 Ranges MaxRanges 5 ---------------------- // 制限内の数を指定した場合 GET / HTTP/1.1 Host: localhost Range: bytes=0-1,1-2,2-3,3-4,4-5 <= 一度に複数の範囲を指定 HTTP/1.1 206 Partial Content <= 206 レスポンスが返る ... Accept-Ranges: bytes Content-Length: 412 Content-Type: multipart/byteranges; boundary=4ad1ca44eeaa22 // 制限を超過した場合 GET / HTTP/1.1 Host: localhost Range: bytes=0-1,1-2,2-3,3-4,4-5,5-6 HTTP/1.1 200 OK <= 要求されたコンテンツをそのまま返している ... Accept-Ranges: bytes Content-Length: 44 Content-Type: text/html