2007年、GoogleのエンジニアであるMichal Zalewski氏は、HTTP/1.1 "Range"ヘッダーの実装を調査してから、ApacheとIISの潜在的な脆弱性についてメモを発表した。氏は次のように報告した。
私の印象では、独立した短いリクエストでサーバをだまして何ギガバイトものデータを無駄に吐き出させることができると思います。それも、ファイルサイズやコネクションの数、管理者が設定したkeep-aliveの制限数に関わらず、です。
8月19日、この脆弱性を実証する対ApacheのDDoSツールがPerlスクリプトとして ”Full Disclosure”セキュリティメーリングリストに公開された。8月24日、Apacheセキュリティチームが発表したメモによれば、
この脆弱性は静的コンテンツをmod_deflateを使って圧縮している場合に最もはっきり表れます。しかし、コンテンツでインメモリでバッファしたり生成したりする他のモジュールも同様に影響を受けます。これは一般的な(デフォルトの正しい!?)構成です。
この攻撃はリモートから実行でき、少量のリクエストで大量のメモリとCPUを使用させることができます。
実際にこのツールで攻撃されたサーバもあります。
現時点ではパッチはありません。この脆弱性を修正した新しいバージョンのapacheもありません。このアドバイス情報は長期的な対策が判明次第更新します。修正方法は96時間以内に発表します。
金曜日、Apacheはふたつ目のアドバイス情報を発表した。この中で複数の(重複した)レンジを返すように要求されたとき、Apache httpdと内部の'bucket brigades'と呼ばれる仕組みがどのように動作するのかを説明している。単一のリクエストで巨大なレンジ(例えば、0-から終わりまで)を100回要求した場合、現在の内部の挙動では、100回の巨大なフェッチ処理に展開され、それぞれの結果が非効率な方法でメモリ内に保持される。
2つの方法で対処中です。ひとつはより効率的に処理する方法。もうひとつは処理しきれないリクエストを間引いたり、単純化する方法です。完全な修正が完了するまでに、即時にできる対策はいくつかあります。
Apacheが発表した対策にはRangeヘッダを完全に無効化する方法や、リクエストのサイズを制限する方法、Rangeの数をカウントするカスタムモジュールを配置して対処する方法がある。Lori MacVittie氏はBig-IPを使っている場合のこれらの対策の組み込み方法を詳述している。