【漏洞预警】Linux 内核中TCP SACK机制远程拒绝服务漏洞

admin 2023年1月8日22:43:43安全漏洞评论3 views3508字阅读11分41秒阅读模式

近日,Netflix公司已经确定了几个TCP网络FreeBSD 和Linux内核中的漏洞。这些漏洞特别涉及最小段大小(MSS)和TCP选择性确认(SACK)功能。最严重的,被称为“SACK Panic”,可以在Linux内核上远程触发内核崩溃,从而影响系统的可用性。

漏洞名称:Linux 内核中TCP SACK机制远程拒绝服务漏洞预警

威胁等级 高危

影响范围Linux> = 2.6.29(CVE-2019-11477)

Linux <4.15/所有Linux版本(CVE-2019-11478)

使用RACK TCP堆栈的FreeBSD 12(CVE-2019-5599)

所有Linux版本(CVE-2019-11479)

漏洞类型拒绝服务漏洞

利用难度 :简单


TCP SACK介绍


TCP是面向连接的协议。当双方希望通过TCP连接进行通信时,他们通过交换某些信息建立连接,例如请求发起(SYN)连接,初始序列号,确认号,通过此连接使用的最大段大小(MSS),权限发送和处理选择性确认(SACK)等。此连接建立过程称为3次握手。


TCP通过称为Segment的单元发送和接收用户数据。一个TCP段包括TCP报头,选项和用户数据的。


每个TCP段具有序列号(SEQ)和确认号(ACK)。


这些SEQ和ACK号用于跟踪接收器成功接收哪些段。ACK号表示接收器的下一个预期段。


示例:上面的用户'A'通过13个100字节的段发送1千字节的数据,13因为每个段具有20字节的TCP头。在接收端,用户'B'接收段1,2,4,6,8-13,段3,5和7丢失,不被用户'B'接收。


通过使用ACK号码,用户'B'将指示它正在期望段号3,用户'A'读取为用户'B'接收到2之后没有段,并且用户'A'将重新发送全部即使用户'B'成功接收到第4,6和8-13段,从3开始的段也是如此。用户'B'无法向用户'A'表明。这是导致网络低效使用的原因。


 

漏洞描述和修复建议


1:CVE-2019-11477:SACK Panic(Linux> = 2.6.29)

漏洞描述: 

通过构造特殊的SACK,可以触发整数溢出,从而导致内核崩溃。

修复建议

应用修补程序PATCH_net_1_4.patch(https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/PATCH_net_1_4.patch)

此外,Linux内核版本(包括4.14版本)需要第二个补丁PATCH_net_1a.patch(https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/PATCH_net_1a.patch)。

解决方法#1

使用提供的过滤器(https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/block-low-mss/README.md)之一阻止与低MSS的连接。(过滤器中的值是示例。您可以根据您的环境应用更高或更低的限制。)请注意,这些过滤器可能会破坏依赖于低MSS的合法连接。另请注意,此缓解仅在禁用TCP探测时有效(即,net.ipv4.tcp_mtu_probingsysctl设置为0,这似乎是该sysctl的默认值)。

解决方法#2

禁用SACK处理(/proc/sys/net/ipv4/tcp_sack设置为0)。

(注:任何一种解决方法都应该足够了。没有必要同时应用这两种解决方法。)


2:CVE-2019-11478:SACK缓慢(Linux <4.15)或过多的资源使用(所有Linux版本)

漏洞描述:通过发送一个构造的SACK序列,分解TCP重传队列。针对4.15之前的Linux内核,攻击者可能进一步利用分段队列,为后续针对同一TCP连接接收的SACK导致消耗的链表运行的资源。

修复建议

应用修补程序PATCH_net_2_4.patch(https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/PATCH_net_2_4.patch)

解决方法#1

使用提供的过滤器之一阻止与低MSS的连接。(过滤器中的值是示例。您可以根据您的环境应用更高或更低的限制。)请注意,这些过滤器可能会破坏依赖于低MSS的合法连接。另请注意,此缓解仅在禁用TCP探测时有效(即,net.ipv4.tcp_mtu_probingsysctl设置为0,这似乎是该sysctl的默认值)。

解决方法#2

禁用SACK处理(/proc/sys/net/ipv4/tcp_sack设置为0)。

(注:任何一种解决方法都应该足够了。没有必要同时应用这两种解决方法。)


3:CVE-2019-5599:SACK Slowness(使用RACK TCP堆栈的FreeBSD 12)

漏洞描述:

通过发送一个构造好的SACK序列,分割RACK发送映射。攻击者可能能够进一步利用分段发送映射来为后续针对该相同TCP连接接收的SACK引起消耗的链表运行的资源。

解决方法#1

应用补丁split_limit.patch(https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/split_limit.patch)并将net.inet.tcp.rack.split_limitsysctl设置为合理的值以限制SACK表的大小。

解决方法#2

暂时禁用RACK TCP堆栈。

(注:任何一种解决方法都应该足够了。没有必要同时应用这两种解决方法。)


4:CVE-2019-11479:由于MSS值较低导致的过多资源消耗(所有Linux版本)

漏洞描述

攻击者可以强制Linux内核将其响应分段为多个TCP段,每个TCP段仅包含8个字节的数据。这大大增加了提供相同数据量所需的带宽。此外,它消耗额外的资源(CPU和NIC处理能力)。此攻击需要攻击者不断努力,攻击将在攻击者停止发送流量后立即结束。

修复建议

两个补丁PATCH_net_3_4.patch(https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/PATCH_net_3_4.patch)和PATCH_net_4_4.patch(https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001/PATCH_net_4_4.patch)添加一个sysctl,它强制执行sysctl设置的最小MSS net.ipv4.tcp_min_snd_mss。这使管理员可以强制执行适合其应用程序的最小MSS。

解决方法

使用提供的过滤器之一阻止与低MSS的连接。(过滤器中的值是示例。您可以根据您的环境应用更高或更低的限制。)请注意,这些过滤器可能会破坏依赖于低MSS的合法连接。另请注意,此缓解仅在禁用TCP探测时有效。(即,net.ipv4.tcp_mtu_probingsysctl设置为0,这似乎是该sysctl的默认值)。


参考链接


[1].https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001.md

[2].https://www.openwall.com/lists/oss-security/2019/06/17/5

[3].https://access.redhat.com/security/vulnerabilities/tcpsack


时间轴


2019/06/17   

Netflix公司已经确定了几个TCP网络FreeBSD和Linux内核中的漏洞

2019/06/19   

深信服千里目安全实验室翻译并发布预警



原文始发于微信公众号(深信服千里目安全实验室):【漏洞预警】Linux 内核中TCP SACK机制远程拒绝服务漏洞

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月8日22:43:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  【漏洞预警】Linux 内核中TCP SACK机制远程拒绝服务漏洞 http://cn-sec.com/archives/785867.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: