LinuxÄÚºËTCPºÍ̸¶à¸öSACKÖ°Äܻؾø·þÎñ·ì϶·ÖÎö
°ä²¼¹¦·ò 2019-06-212019Äê6ÔÂ18ÈÕ£¬£¬£¬£¬£¬£¬£¬£¬Redhat°ä²¼°²È«²¼¸æ£¬£¬£¬£¬£¬£¬£¬£¬LinuxÄÚºËTCP/IPºÍ̸ջ´æÔÚ3¸ö°²È«·ì϶£¨CVE-2019-11477/CVE-2019-11478/CVE-2019-11479£©£¬£¬£¬£¬£¬£¬£¬£¬ÕâЩ·ì϶Óë×î´ó·Ö¶Î´óÓ×£¡£¡£¡£¡£¡£¨MSS£©ºÍTCPÑ¡ÔñÐÔÈ·ÈÏ£¨SACK£©Ö°ÄÜÓйأ¬£¬£¬£¬£¬£¬£¬£¬ÔÊÐíÔ¶³Ì¹¥»÷Õß½øÐлؾø·þÎñ¹¥»÷¡£¡£¡£¡£¡£¡£
¹Ø¼ü¸ÅÏë
Êý¾Ý°ü³Á´«È·ÈÏ»úÔì
TCPÊý¾Ý°ü´«Êä¹ý³ÌÖУ¬£¬£¬£¬£¬£¬£¬£¬À´×Ô»¬¶¯´°¿ÚµÄÊý¾Ý°üÃÔʧ¿ÉÄܶÔTCPÍÌÍÂÁ¿²úÉúÓ°Ïì¡£¡£¡£¡£¡£¡£TCPʹÓÃÀÛ»ýÈ·ÈÏ£¨ACK£©¹æ»®½â¾ö¸ÃÎÊÌ⣬£¬£¬£¬£¬£¬£¬£¬ÆäÖв»½Ó¹Ü²»ÔÚ»¬¶¯´°¿Ú×ó±ßÔµµÄ½Ó¹Ü¶Î£¬£¬£¬£¬£¬£¬£¬£¬Õâ»áÇ¿Ôì·¢ËÍ·½ÆÚ´ýÍù·µ¹¦·òÒÔÕÒ³öÿ¸öÃÔʧµÄÊý¾Ý°ü£¬£¬£¬£¬£¬£¬£¬£¬»òÕß²»Óø¹µØ³Áд«ÊäÒÑÕýÈ·½Ó¹ÜµÄ¶Î£¬£¬£¬£¬£¬£¬£¬£¬´Ó¶ø½µµÍÕûÌåÍÌÍÂÁ¿¡£¡£¡£¡£¡£¡£
×î´ó·Ö¶Î´óÓ×£¡£¡£¡£¡£¡£¨Maximum Segment Size£©
MSS£¨Maximum Segment Size£¬£¬£¬£¬£¬£¬£¬£¬×î´ó±¨ÎĶδóÓ×£¡£¡£¡£¡£¡£©µÄ¸ÅÏëÊÇÖ¸TCP²ãËù¿ÉÄܽӹܵÄ×î´ó·Ö¶Î´óÓ×£¡£¡£¡£¡£¡£¬£¬£¬£¬£¬£¬£¬£¬¸ÃÖµÖ»Ô̺¬TCP¶ÎµÄÊý¾Ý²¿ÃÅ£¬£¬£¬£¬£¬£¬£¬£¬²»Ô̺¬Option²¿ÃÅ¡£¡£¡£¡£¡£¡£Áí±í£¬£¬£¬£¬£¬£¬£¬£¬ÔÚTCPÊײ¿ÓÐÒ»¸öMSSÑ¡Ï£¬£¬£¬£¬£¬£¬£¬ÔÚÈý´ÎÎÕÊÖ¹ý³ÌÖУ¬£¬£¬£¬£¬£¬£¬£¬TCP·¢ËͶËʹÓøÃÑ¡Ïî֪ͨ¶Ô·½×Ô¼ºËùÄܽÓÊܵÄ×î´ó·Ö¶Î´óÓס£¡£¡£¡£¡£¡£
TSO£¨TCP Segmentation Offload£©
TSOÊÇÒ»ÖÖÀûÓÃÍø¿¨À´¶Ô´óÊý¾Ý°ü½øÐÐ×Ô¶¯·Ö¶Î£¬£¬£¬£¬£¬£¬£¬£¬½µµÍCPU¸ºÔصļ¼Êõ¡£¡£¡£¡£¡£¡£ÆäÖØÒªÊÇÑÓ³¤·Ö¶Î¡£¡£¡£¡£¡£¡£
GSO(Generic Segmentation Offload)
·ì϶µÀÀí
CVE-2019-11477
¸Ãtcp_skb_cb½á¹¹Ìå´æ·Å×ÅTCPÿ¸öÊý¾Ý°üµÄ½ÚÔìÐÅÏ¢£¬£¬£¬£¬£¬£¬£¬£¬Æ¾¾Ý×¢½â¿ÉÖª£¬£¬£¬£¬£¬£¬£¬£¬tcp_gso_segs/sizeÖ»ÓÃÓÚд¶ÓÁйý³ÌÖÓ×£¡£¡£¡£¡£¡£
½á¹¹Ìå×îºóÒ»¸ö³ÉÔ±ÊÇfrags[MAX_SKB_FRAGS]Êý¾Ý¡£¡£¡£¡£¡£¡£MAX_SKB_FRAGSÉêÃ÷ÈçÏÂËùʾ£º
Êý¾Ý·Ôì¬skb_frag_struct½á¹¹ÌåÈçÏÂËùʾ£º
ÔÚÕû¸öºÍ̸ջ²Ù×÷¹ý³ÌÖУ¬£¬£¬£¬£¬£¬£¬£¬Êý¾Ý°ü¼ÈÒª½øÐÐIP±»·Ô쬵쬣¬£¬£¬£¬£¬£¬£¬ÓÖÒª½øÐÐTCP·Ö¶Î¡£¡£¡£¡£¡£¡£´«ÊäÊý¾Ýʱ£¬£¬£¬£¬£¬£¬£¬£¬ºÍ̸ջ»áƾ¾ÝGSOÖµ£¬£¬£¬£¬£¬£¬£¬£¬MSSÖµÒÔ¼°»¬¶¯´°¿ÚÈýÕßÖ®¼äµÄ´óÓ×¹ØÏµÅжÏÊÇ·ñ½øÐзÔ쬡£¡£¡£¡£¡£¡£²¢Í¨¹ýtcp_set_skb_tso_segs()º¯ÊýÉèÖÃGSO£¬£¬£¬£¬£¬£¬£¬£¬¾ßÌåʵÏÖÈçÏÂͼËùʾ£º
ÈôÊÇskb->len´óÓÚmss_now£¬£¬£¬£¬£¬£¬£¬£¬ÐÐ1207£¬£¬£¬£¬£¬£¬£¬£¬½«tcp_gso_segsÉèÖÃΪskb->len/mss_now¡£¡£¡£¡£¡£¡£ÐÐ1208£¬£¬£¬£¬£¬£¬£¬£¬½«tcp_gso_sizeÉèÖÃΪmss_now¡£¡£¡£¡£¡£¡£
ÈôÊÇÆôÓÃÁËSACK£¬£¬£¬£¬£¬£¬£¬£¬ÔÚ²úÉú¶ª°üºó£¬£¬£¬£¬£¬£¬£¬£¬½Ó¹Ü¶Ë»á·µ»ØSACK¿é£¬£¬£¬£¬£¬£¬£¬£¬SACK¿éÖмͼ³ÁÃÔʧ°üµÄÐòÁбàºÅ¡£¡£¡£¡£¡£¡£·¢ËͶ˻á½âÎöSACK¿éÖмͼµÄÃÔʧ°üÐòÁбàºÅ£¬£¬£¬£¬£¬£¬£¬£¬²¢³Áд«Ê䣬£¬£¬£¬£¬£¬£¬£¬²¢ÇÒÔÚÒ»¸ö»¬¶¯´°¿ÚÖпÉÄÜÔ̺¬¶à¸öSACK¿é£¬£¬£¬£¬£¬£¬£¬£¬SACK¿éÖÐÒ²¿ÉÄÜÔ̺¬¶à¸öskb¶ÓÁÓ×£¡£¡£¡£¡£¡£ÔÚTCP³Á´«Êý¾Ý°ü¹ý³ÌÖУ¬£¬£¬£¬£¬£¬£¬£¬Äܹ»½«¶à¸öskb¶ÓÁй鲢µ½Ò»¸öskb¶ÓÁÐÖнøÐгÁ´«¡£¡£¡£¡£¡£¡£
skb_shift()ºÍtcp_shifted_skb()Á½¸öº¯ÊýÖØÒªÊµÏÖ¸ÃÖ°ÄÜ¡£¡£¡£¡£¡£¡£³Á´«¹ý³ÌÖжà¸öskb¶ÓÁй鲢µ½Ò»¸öskb¶ÓÁÐÖУ¬£¬£¬£¬£¬£¬£¬£¬ÈôÊÇÌî³ä17¸ö·Ô쬵½×î´óÈÝÁ¿£¬£¬£¬£¬£¬£¬£¬£¬ 17*32*1024/8=69632£¬£¬£¬£¬£¬£¬£¬£¬ÒѾ´óÓÚ65535£¬£¬£¬£¬£¬£¬£¬£¬µ¼ÖÂÎÞ·ûºÅÕûÊýÒç³ö¡£¡£¡£¡£¡£¡£
ÐÐ1299£¬£¬£¬£¬£¬£¬£¬£¬ÅжÏtcp_gso_segsºÍpcountµÄ´óÓ×£¡£¡£¡£¡£¡£¬£¬£¬£¬£¬£¬£¬£¬ÈôÊÇtcp_gas_segsÓ×ÓÚpcount£¬£¬£¬£¬£¬£¬£¬£¬BUG_ON¶ÏÑÔ´¥·¢µ¼ÖÂÄں˱ÀÀ£¡£¡£¡£¡£¡£¡£
²¹¶¡Æ½±ðÀëÅжÏÁËskb->len+shift_len²»ÄÜ´óÓÚ65535*8×Ö½ÚºÍtcp_skb_pcount(to) + pcount²»ÄÜ´óÓÚ65535¡£¡£¡£¡£¡£¡£µÚÒ»¸öÅжϣ¬£¬£¬£¬£¬£¬£¬£¬skb->lenÊǰµÊ¾sk_buff½á¹¹ÌåÖаµÊ¾payload³¤¶È£¬£¬£¬£¬£¬£¬£¬£¬shift_len°µÊ¾Òª¹é²¢µ½skbÖеÄpayload¡£¡£¡£¡£¡£¡£
CVE-2019-11478
²¹¶¡ÔÚtcp_fragment()º¯ÊýÖвÎÓëÁË×îÓ׿ռäÅжϡ£¡£¡£¡£¡£¡£SkÊÇsock½á¹¹ÌåÀàÐÍ£¬£¬£¬£¬£¬£¬£¬£¬Ã¿Ò»¸ötcpÁ´½Ó¶ÔÓ¦Ò»¸ö¡£¡£¡£¡£¡£¡£ËùÒÔËùÓÐÒª·¢Ë͵ÄskbÊý¾Ý´óÓ×¶¼ÒªÀÛ¼Óµ½sk->sk_wmem_queuedÖУ¬£¬£¬£¬£¬£¬£¬£¬sk->sk_wmem_queued°µÊ¾Îª¸ÃÌ×½Ó×ÖTCPд¶ÓÁлº³åÇø´óÓס£¡£¡£¡£¡£¡£Í¨³£ÔÚʹÓÃʱ³½±ØÒªÅжϸÃÖµÊÇ·ñ¹»Óᣡ£¡£¡£¡£¡£ÈçÏÂËùʾ£º
ƾ¾Ý×¢½â¿ÉÖª£¬£¬£¬£¬£¬£¬£¬£¬ÅжÏ×îÐÂÁжÓskb°üËùÐèµÄ×îÓ׿Éд¿Õ¼ä¡£¡£¡£¡£¡£¡£²¹¶¡ÖУ¬£¬£¬£¬£¬£¬£¬£¬ÅжÏÔü×Ò·¢ËÍ»º´æÎª´óÓÚµÅ×Úµ±Ç°·¢ËͶÓÁÐÕ¼ÓÿռäµÄÒ»°ë£¬£¬£¬£¬£¬£¬£¬£¬¼´»¹ÓÐ1/3ÒÔÉϵĿÕÓà¿Õ¼äʱ£¬£¬£¬£¬£¬£¬£¬£¬²¢ÇÒÓ×ÓÚsk->sk_sndbuf·¢·îÉÏÏÞÄÜÁ¦¹»Õý³£·¢ËÍ£¬£¬£¬£¬£¬£¬£¬£¬²»È»¾ÍÅж¨TCPд¶ÓÁÐÌ«´ó¡£¡£¡£¡£¡£¡£
CVE-2019-11479
Ô¤·ÀÁ˹¥»÷ÕßʹÓü«Ó×MSSÖµ¡£¡£¡£¡£¡£¡£
Ó°Ïì°æ±¾¼°²¹¶¡½¨¸´
ʵʱ¸üÐÂ×îв¹¶¡»ò½ûÓÃSACKºÍ¹ýÂ˼«Ó×MSSµÄÊý¾Ý°ü¡£¡£¡£¡£¡£¡£
|
CVE-2019-11477 |
Ó°Ïì°æ±¾£º
|
|
½ûÓÃsack£º
|
|
|
²¹¶¡£¡£¡£¡£¡£¡£º
|
|
|
CVE-2019-11478 |
Ó°Ïì°æ±¾£º
|
|
½ûÓÃsack£º
|
|
|
²¹¶¡£¡£¡£¡£¡£¡£º
|
|
|
CVE-2019-11479 |
Ó°Ïì°æ±¾£º
|
|
¹ýÂ˺ÅÁ
¹Ø¹Øtcp_mtu_probing£º
|
|
|
²¹¶¡£¡£¡£¡£¡£¡£º
|


¾©¹«Íø°²±¸11010802024551ºÅ