CVE-2019-11477 分析

经分析测试,
1我们平台目前kernel配置应永远无法打到该漏洞,所以可以选择不用上该patch
2 漏洞patch
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-4.4.y&id=4657ee0fe05e15ab572b157f13a82e080d4b7d73
Patch已测试可正常联网并tcp通信

测试程序如下链接下载
https://download.csdn.net/download/qq_28351465/12643665

该问题是由TCP_SKB_CB(skb)->tcp_gso_segs u16数据溢出造成
最终crash在如下位置
tcp_shifted_skb() :

     BUG_ON(tcp_skb_pcount(skb) < pcount);

u16数据最大是65535
tcp_gso_segs记录的是一个skb_buf需要分为几个segment去发送
skb_buf最大数据量是17321024=557056
mss是一个tcp segment数据量,理论最小值为8
所以 17321024/8=69632 > 65535 从而造成数据溢出

其中必要条件是 MSS为8
这里的mss值 指的是tcp mss协商值 – tcp option字节数(实际计算公式复杂些mtu和tcp windows相关,因始终以最小为主,不赘述)
被减数 因为__tcp_mtu_to_mss接口限制,最小为48
在这里插入图片描述
在这里插入图片描述

减数 由于kernel未support MD5等,一定无法达到40CVE-2019-11477 分析_第1张图片

本地测试将mss协商值为48 但tcp option未达到40 仅12,所以最终每个segment data为36 Byte,无法复制到漏洞
Log如下:
Line 1965: [ 424.399269] <0>.(0)[728:server]ZRB tcp_current_mss mss_now:36
Line 1966: [ 424.400007] <0>.(0)[728:server]ZRB tcp_established_options NO Support MD5
Line 1967: [ 424.400871] <0>.(0)[728:server]ZRB tcp_established_options add TS size 12
Line 1968: [ 424.401724] <0>.(0)[728:server]ZRB tcp_current_mss mss_now:36
抓包如下
CVE-2019-11477 分析_第2张图片
CVE-2019-11477 分析_第3张图片

你可能感兴趣的:(安全漏洞)