<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">First of all, nginx doesn't favor HEAD requests with compression,<br>
so the exact mentioned attack doesn't work against a standalone<br>
nginx installation.<br></blockquote><div><br>Well, with apache; the problem is not really due to the compression module (you can disable compression and still get DoS'ed)<br><br>It is with how it handles byte ranges (by ignoring overlapping ranges etc...)<br>
<br>Currently with apache requests like<br><br>Range: bytes=0-1,0-2,0-3...................... <nnn-nnn><br><br>OR<br><br>Range: bytes=0-0, 1-1, 2-2.................<nnn-nnn><br><br>will not result in merging of the ranges and deliver data for each range. With huge number of those ranges there is a lot of memory consumed.<br>
<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
If you're using nginx in combination with proxying to apache backend,<br>
please check your configuration to see if nginx actually passes range<br>
requests to the backend:<br>
<br>
1) If you're using proxying WITH caching then range requests are not<br>
sent to backend and your apache should be safe.<br>
<br>
2) If you're NOT using caching then you might be vulnerable to the attack.<br>
<br>
In order to mitigate this attack when your installation includes<br>
apache behind nginx we recommend you the following:<br>
<br>
1. Refer to the above mentioned security advisory CVE-2011-3192 for apache<br>
and implement described measures accordingly.<br>
<br>
2. Consider using nginx configuration below (in server{} section of<br>
configuration). This particular example filters 5 and more ranges<br>
in the request:<br>
<br>
  if ($http_range ~ "(?:\d*\s*-\s*\d*\s*,\s*){5,}") {<br>
      return 416;<br>
  }<br>
<br>
We'd also like to notify you that for standalone nginx installations<br>
we've produced the attached patch. This patch prevents handling<br>
malicious range requests at all, instead outputting just the entire file<br>
if the total size of all ranges is greater than the expected response.<br>
<br>
<br>
--<br>
<font color="#888888">Igor Sysoev<br>
</font><br>_______________________________________________<br>
nginx mailing list<br>
<a href="mailto:nginx@nginx.org">nginx@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx</a><br>
<br></blockquote><br></div><br><br clear="all"><br>-- <br>Astalavista Baby!!!<br>