我一直在尝试将build议的修复程序应用于Apache的CVE-2011-3192,这是要添加到httpd.conf
# Drop the Range header when more than 5 ranges. # CVE-2011-3192 SetEnvIf Range (,.*?){5,} bad-range=1 RequestHeader unset Range env=bad-range
但是,在Apache 2.0.59中,configtest说
Syntax error on line .... header unset takes two arguments
我们仍然需要使用范围标题,以便取消整个范围部分不是真正的select。 任何想法得到这个工作?
坏消息! 2.0.59中的mod_headers在validation代码中似乎不太适合环境variables。
它parsing如下:
RequestHeader {action} {inhdr} {value} {envclause}
对于未unset ,2.0.59validation是这样的,如果在指令名后面有第三个参数( value )
if (new->action == hdr_unset) { if (value) return "header unset takes two arguments"; }
所以, RequestHeader unset Range工作,并且RequestHeader unset Range bytes=0-1000打破意图..但RequestHeader unset Range env=bad-range也打破。
有人认为,在某个地方, 目前的版本是这样做的,而是把它们所属的地方:
if (new->action == hdr_unset) { if (value) { if (envclause) { return "header unset takes two arguments"; } envclause = value; value = NULL; } }
所以,它仍然将环境parsing为value位置,但是由于未envclause并不具有价值,因此重新排列。 所以,现在, RequestHeader unset Range env=bad-range工作,但是RequestHeader unset Range bytes=0-1000 env=bad-range仍然抛出validation错误..并且RequestHeader unset Range bytes=0-1000可能只是在运行时爆炸。
要解决这个问题,不缺less不好的select – 修补然后重新编译mod_headers才能正常工作是一种select,或者只是扁平化升级Apache。 但是,可能值得一试,用set (无validation错误)来清空头部,而不是使用unset :
RequestHeader set Range "badrange" env=bad-range
在我检查的Apache 2.2上,“Range”字段中的垃圾数据将被忽略; 本质上是一个有效的解决scheme。