LinuxÄÚºËSCTPºÍ̸·ì϶·ÖÎöÓ븴ÏÖ
°ä²¼¹¦·ò 2019-05-30LinuxÄÚºËSCTPºÍ̸ʵÏÖÖдæÔÚÒ»¸ö°²È«·ì϶CVE-2019-8956£¨CNVD-2019-06182¡¢CNNVD-201902-823£©£¬£¬£¬£¬£¬£¬£¬£¬Äܹ»µ¼Ö»ؾø·þÎñ¡£¡£¡£¡£¡£¡£¸Ã·ì϶´æÔÚÓÚnet/sctp/socket.cÖеÄsctp_sendmsg()º¯Êý£¬£¬£¬£¬£¬£¬£¬£¬¸Ãº¯ÊýÔÚ´¦ÖÃSENDALL±êÖ¾²Ù×÷¹ý³Ìʱ´æÔÚuse-after-free·ì϶¡£¡£¡£¡£¡£¡£
SCTPºÍ̸¼ò½é
Á÷½ÚÔì´«ÊäºÍ̸£¨Stream Control Transmission Protocol£¬£¬£¬£¬£¬£¬£¬£¬SCTP£©ÊÇÒ»ÖÖ¿¿µÃסµÄ´«ÊäºÍ̸£¬£¬£¬£¬£¬£¬£¬£¬ËüÔÚÁ½¸ö¶ËµãÖ®¼äÌṩ²»±ä¡¢ÓÐÐòµÄÊý¾Ý´«µÝ·þÎñ£¨¼«¶ÈÀàËÆÓÚ TCP£©£¬£¬£¬£¬£¬£¬£¬£¬²¢ÇÒÄܹ»±£»£»£»£»£»£»£»£»¤Êý¾ÝÐÂÎÅÌìǵ£¨ÀýÈç UDP£©¡£¡£¡£¡£¡£¡£ÓëTCPºÍ UDP·ÖÆç£¬£¬£¬£¬£¬£¬£¬£¬SCTP ÊÇͨ¹ý¶àËÞÖ÷£¨Multi-homing£©ºÍ¶àÁ÷£¨Multi-streaming£©Ö°ÄÜÌṩÕâЩÊÕÒæµÄ£¬£¬£¬£¬£¬£¬£¬£¬ÕâÁ½ÖÖÖ°Äܾù¿ÉÌá¸ß¿ÉÓÃÐÔ¡£¡£¡£¡£¡£¡£
·ì϶µÀÀí
·ì϶²¹¶¡´úÂëÈçÏ£¬£¬£¬£¬£¬£¬£¬£¬²¹¶¡´úÂ뽫list_for_each_entry»»³ÉÁËlist_for_each_entry_safe¡£¡£¡£¡£¡£¡£
ºê½ç˵list_for_each_entry_safeÖÐÔö³¤ÁËÒ»¸ön£¬£¬£¬£¬£¬£¬£¬£¬¸ÃnÓÃÀ´´æ·ÅposÖ¸ÏòµÄ½ÚµãµÄÏÂÒ»¸ö½ÚµãµØÎ»¡£¡£¡£¡£¡£¡£Ê¹ÓøúêÄܹ»¶ÔÁ´±í½øÐÐɾ³ý²Ù×÷¡£¡£¡£¡£¡£¡£
ÐÐ2038£¬£¬£¬£¬£¬£¬£¬£¬´ÓmsgÖнâÎö³ösinfo£»£»£»£»£»£»£»£»ÐÐ2043£¬£¬£¬£¬£¬£¬£¬£¬»ñÈ¡µ½sflags¡£¡£¡£¡£¡£¡£
ÐÐ2055£¬£¬£¬£¬£¬£¬£¬£¬ÅжÏsflagsÊÇ·ñΪSCTP_SENDALL¡£¡£¡£¡£¡£¡£ÈôÊÇ´æÔÚ£¬£¬£¬£¬£¬£¬£¬£¬½øÈëlist_for_each_entryÑ»·ÖУ¬£¬£¬£¬£¬£¬£¬£¬Ë³´Î±éÀúep->asocsÁ´±í¡£¡£¡£¡£¡£¡£ÕâÀïµÄasocs¾ÍÊÇ´æ·Å¶à¸öassociationÏνӵÄÁ´±í¡£¡£¡£¡£¡£¡£SCTP_SENDALL±êÖ¾´ú±íÏòasocsÁ´±íÖеÄËùÓÐassociationÏνӷ¢ËÍÊý¾Ý°ü¡£¡£¡£¡£¡£¡£ËùÒÔasocsÁ´±íÖÐÖÁÉÙÒª´æÔÚÒ»¸öassociation½Úµã¡£¡£¡£¡£¡£¡£½øÈësctp_sendmsg_check_sflagsº¯Êýºó£¬£¬£¬£¬£¬£¬£¬£¬¸Ãº¯ÊýʵÏÖÈçÏ£º
Ê×ÏÈ£¬£¬£¬£¬£¬£¬£¬£¬²é³asocÊÇ·ñ´¦ÓÚCLOSED״̬£¬£¬£¬£¬£¬£¬£¬£¬²é³asocÊÇ·ñ´¦ÓÚ¼àÌý״̬£¬£¬£¬£¬£¬£¬£¬£¬²é³asocÊÇ·ñshutdown¡£¡£¡£¡£¡£¡£
½ÓÏÂÀ´£¬£¬£¬£¬£¬£¬£¬£¬²é³sflagsÊÇ·ñΪSCTP_ABORT£¬£¬£¬£¬£¬£¬£¬£¬Æ¾¾ÝrfcÎĵµ¿ÉÖªABORTµÄÓ÷¨ÒÔ¼°ABORTÖ¸ÁîµÄÊý¾Ý°üÌåʽ¡£¡£¡£¡£¡£¡£SCTP_ABORT±êÖ¾´ú±í¶ôÖÆÒ»¸öassociationÏνӣ¬£¬£¬£¬£¬£¬£¬£¬Õâ¸öÒ²Êǵ¼Ö·ì϶µÄ¹Ø¼ü¡£¡£¡£¡£¡£¡£
ÐÐ1863£¬£¬£¬£¬£¬£¬£¬£¬sctp_make_abort_user»ú¹ØABORTÖ¸ÁîµÄchunk£»£»£»£»£»£»£»£»ÐÐ1868£¬£¬£¬£¬£¬£¬£¬£¬Å²ÓÃsctp_primitive_ABORT·¢ËͶôÖÆÒ»¸öassociationµÄchunk¡£¡£¡£¡£¡£¡£
ͨ¹ýµ÷ÊÔ¿É֪ŲÓÃsctp_sf_do_9_1_prm_abortº¯Êý½øÐÐABORT²Ù×÷£¬£¬£¬£¬£¬£¬£¬£¬¸Ãº¯Êý½«»á½øÐÐÈçϲÙ×÷£º
Ôö³¤Ò»Ìõɾ³ýasocµÄcommands£¬£¬£¬£¬£¬£¬£¬£¬¶øºó·µ»ØSCTP_DISPOSITION_ABORT¡£¡£¡£¡£¡£¡£Õý³£·µ»Ø£¬£¬£¬£¬£¬£¬£¬£¬³ÖÐø·ÖÎö£¬£¬£¬£¬£¬£¬£¬£¬·µ»Øµ½sctp_do_smº¯ÊýÖÓ×£¡£¡£¡£¡£¡£
ÐÐ1188Õý³£·µ»Øºó£¬£¬£¬£¬£¬£¬£¬£¬ÐÐ1191ŲÓÃsctp_side_effectsº¯Êýƾ¾Ý״̬»ú¶ÔÓ¦µÄ״̬½øÐвÙ×÷¡£¡£¡£¡£¡£¡£
ÐÐ1246£¬£¬£¬£¬£¬£¬£¬£¬½«asocÖÿգ¬£¬£¬£¬£¬£¬£¬£¬ABORT±êÖ¾´ú±í¶ôÖÆÒ»¸öassociation²Ù×÷ʵÏÖ¡£¡£¡£¡£¡£¡£´Ósctp_sendmsg_check_sflagsº¯Êý·µ»Øµ½sctp_sendmsgº¯ÊýÖУ¬£¬£¬£¬£¬£¬£¬£¬ºêlist_for_each_entryÑ»·ÖбéÀú»ñÈ¡µÚÒ»¸öasoc½Úµãʱ£¬£¬£¬£¬£¬£¬£¬£¬½øÈësctp_sendmsg_check_sflagsº¯Êý½«µÚÒ»¸öasocÖÿգ¬£¬£¬£¬£¬£¬£¬£¬¶øºóÔÙ½øÐбéÀúºóÃæ½Úµãʱ£¬£¬£¬£¬£¬£¬£¬£¬¾Í²úÉúÁËÁãµØÖ·ÒýÓõ¼Ö·ì϶²úÉú¡£¡£¡£¡£¡£¡£
·ì϶¸´ÏÖ
½«sflagsÉèÖóÉSENDALL | ABORT£¬£¬£¬£¬£¬£¬£¬£¬±£ÕϽøÈëlist_for_each_entryÑ»·ºÍsctp_sendmsg_check_sflags()º¯Êý¼´¿É¡£¡£¡£¡£¡£¡£ÔÚ4.20ÄÚºËÏÂÑéÖ¤ÈçÏ¡£¡£¡£¡£¡£¡£ÓÉÓڸ÷ì϶ÊÇNULL-PTR deref£¬£¬£¬£¬£¬£¬£¬£¬¼´ÊÇÁãµØÖ·½âÒýÓ㬣¬£¬£¬£¬£¬£¬£¬ÎÞ·¨½øÒ»²½ÀûÓᣡ£¡£¡£¡£¡£
½¨¸´½¨Òé
¸Ã·ì϶ӰÏìLinux Kernel 4.19.xºÍ4.20.x£¬£¬£¬£¬£¬£¬£¬£¬½¨Òé¸üе½version 4.20.8 »ò4.19.21¡£¡£¡£¡£¡£¡£²¹¶¡Á´½ÓÈçÏ£ºhttps://git.kernel.org/linus/ba59fb0273076637f0add4311faa990a5eec27c0


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