在 HTTP/2 协议的各种实现中已发现 8 个 DoS 漏洞

来自 Netflix 和 Google 的研究人员 确定 HTTP/2 协议的各种实现中存在八个漏洞,这些漏洞可能通过以某种方式发送网络请求流而导致拒绝服务。该问题在某种程度上影响了大多数支持 HTTP/2 的 HTTP 服务器,并导致工作进程内存不足或产生过多的 CPU 负载。消除漏洞的更新已在 nginx 1.16.1/1.17.3 и 水 2但现在 不可用 对于 Apache httpd 和 其他产品.

这些问题是由于 HTTP/2 协议中引入的复杂性引起的,这些复杂性与二进制结构的使用、连接内数据流限制系统、流优先级机制以及在 HTTP/2 连接上运行的类似 ICMP 的控制消息的存在有关。级别(例如 ping、重置和流量设置)。许多实现没有正确限制控制消息的流量,在处理请求时没有有效地管理优先级队列,或者使用了流量控制算法的次优实现。

大多数已识别的攻击方法都归结为向服务器发送某些请求,从而导致生成大量响应。如果客户端不从套接字读取数据并且不关闭连接,则服务器端的响应缓冲队列不断被填满。此行为会给队列管理系统带来处理网络连接的负载,并且根据实现功能,会导致可用内存或 CPU 资源耗尽。

已发现的漏洞:

  • CVE-2019-9511(Data Dribble)——攻击者通过操纵滑动窗口大小和线程优先级,向多个线程请求大量数据,迫使服务器以 1 字节块对数据进行排队;
  • CVE-2019-9512 (Ping Flood) - 攻击者不断通过 HTTP/2 连接投毒 ping 消息,导致发送响应的内部队列在另一端泛滥;
  • CVE-2019-9513(资源循环)——攻击者创建多个请求线程并不断改变线程的优先级,导致优先级树打乱;
  • CVE-2019-9514(重置洪水)- 攻击者创建多个线程
    并通过每个线程发送无效请求,导致服务器发送 RST_STREAM 帧,但不接受它们以填充响应队列;

  • CVE-2019-9515(设置洪水)- 攻击者发送空“设置”帧流,作为响应,服务器必须确认收到每个请求;
  • CVE-2019-9516(0 长度标头泄漏)——攻击者发送具有空名称和空值的标头流,服务器在内存中分配一个缓冲区来存储每个标头,直到会话结束才释放它;
  • CVE-2019-9517(内部数据缓冲)-攻击者打开
    HTTP/2 滑动窗口让服务器不受限制地发送数据,但保持 TCP 窗口关闭,防止数据实际写入套接字。接下来,攻击者发送需要大量响应的请求;

  • CVE-2019-9518(空帧泛滥)- 攻击者发送 DATA、HEADERS、CONTINUATION 或 PUSH_PROMISE 类型的帧流,但负载为空且没有流终止标志。服务器花费的时间处理每个帧,与攻击者消耗的带宽不成比例。

来源: opennet.ru

添加评论