LinuxÄÚºËeBPF verifierÌìÇµÍÆËãÃýÎó·ì϶·ÖÎöÓëÀûÓã¨CVE-2021-31440£©
°ä²¼¹¦·ò 2021-05-31·ì϶²¼¾°
½üÈÕ£¬£¬£¬£¬£¬£¬£¬ZDI¹ÙÍøÅû¶һ¸öLinuxÄÚºËeBPF verifierÌìÇµÍÆËãÃýÎó·ì϶£¬£¬£¬£¬£¬£¬£¬¸Ã·ì϶ԴÓÚeBPFÑéÖ¤Æ÷ÔÚLinuxÄÚºËÖÐûÓÐÕýÈ·ÍÆËã64λת32λ²Ù×÷µÄ¼Ä·ÅÆ÷Ììǵ£¬£¬£¬£¬£¬£¬£¬µ¼Ö±¾µØ¹¥»÷ÕßÄܹ»ÀûÓôËȱµã½øÐÐÄÚºËÐÅϢй¶»òÌØÈ¨ÌáÉý£¬£¬£¬£¬£¬£¬£¬¸Ã·ì϶±àºÅΪCVE-2021-31440¡£¡£¡£¡£¡£
Ó°ÏìÁìÓòÓë·À»¤´ëÊ©
£¨1£©Ó°ÏìÁìÓòLinux-5.7 ~ Linux- 5.11.15Ubuntu 20.10
£¨2£©·À»¤´ëÊ©
ʵʱ¸üÐÂÉý¼¶Äں˽«kernel.unprivileged_bpf_disabled.sysctlÉèÖÃΪ1£¬£¬£¬£¬£¬£¬£¬Ò»Ê±ÏÞ¶Èͨ³£Óû§È¨ÏÞ
·ì϶µÀÀíÓëµ÷ÊÔ·ÖÎö
£¨1£©·ì϶µÀÀí
¸Ã·ì϶ºÍCVE-2020-8835£¬£¬£¬£¬£¬£¬£¬CVE-2020-27194ÕâÁ½¸ö·ì϶µÄµÀÀíÀàËÆ£¬£¬£¬£¬£¬£¬£¬¾ùÊÇÔÚ32λºÍ64λ֮¼ä½øÐÐת»»²Ù×÷ʱ£¬£¬£¬£¬£¬£¬£¬ÃýÎóÍÆËãÁË¼Ä·ÅÆ÷µÄÔ¼ÊøÌìǵ£¬£¬£¬£¬£¬£¬£¬µ¼ÖÂÄܹ»ÈƹýÑéÖ¤Æ÷²é³ÊµÏÖÔ½½ç¶Áд¡£¡£¡£¡£¡£È±µã´úÂë³Ê´Ë¿Ìkernel/bpf/verifier.cµÄ__reg_combine_64_into_32()º¯ÊýÖУ¬£¬£¬£¬£¬£¬£¬¸Ãº¯ÊýÊÇÔÚcommit_id£º3f50f132d840ÖÐÒýÈëµÄ£¬£¬£¬£¬£¬£¬£¬¸ÃÖ°ÄÜʵÏÖÁËÓÃ64λ¼Ä·ÅÆ÷ÉϵÄÒÑÖªÁìÓòÀ´´§¶È¸Ã¼Ä·ÅÆ÷µÍ32λµÄÁìÓò£¬£¬£¬£¬£¬£¬£¬µ«ÊÇͬÑù³öÏÖÁËÀàËÆµÄÍÆËãÃýÎ󣬣¬£¬£¬£¬£¬£¬¸Ãº¯ÊýʵÏÖÈçÏ£º

ÐÐ1316£¬£¬£¬£¬£¬£¬£¬ÈôÊÇsmin_valueºÍsmax_value¶¼ÔÚ´ø·ûºÅµÄ32λÕûÊýÁìÓòÄÚ£¬£¬£¬£¬£¬£¬£¬Ôò½«ÏàÓ¦µØ¸üÐÂ32λµÄ´ø·ûºÅÁìÓò´óС£¡£¡£¡£¡£¬£¬£¬£¬£¬£¬£¬¶ÔÓÚÓзûºÅÁìÓòÀ´Ëµ£¬£¬£¬£¬£¬£¬£¬ÕâÖÖ²Ù×÷ÊÇÕýÈ·µÄ¡£¡£¡£¡£¡£½Ó×Å¿´£¬£¬£¬£¬£¬£¬£¬ÔÚÎÞ·ûºÅÁìÓòµÄÏàÓ¦Âß¼ÖУ¬£¬£¬£¬£¬£¬£¬¶Ôumin_valueºÍumax_value±ðÀëÔÚÐÐ1320ºÍÐÐ1322½øÐÐÁ˲鳡£¡£¡£¡£¡£ÕâÀïÂß¼²»ÕýÈ·£¬£¬£¬£¬£¬£¬£¬ÀýÈçÉèÖÃdreg->umin_value=1£¬£¬£¬£¬£¬£¬£¬dreg->umax_value=1<<32£¬£¬£¬£¬£¬£¬£¬¼´0x100000000£¬£¬£¬£¬£¬£¬£¬µ±½øÐÐÈçÉϲÙ×÷ºó£¬£¬£¬£¬£¬£¬£¬reg->u32_min_valueÉèÖÃΪ1£¬£¬£¬£¬£¬£¬£¬Õâ¸öÊÇÕýÈ·µÄ£¬£¬£¬£¬£¬£¬£¬µ«ÊÇreg->u32_max_valueÈ´Ôì³ÉÁË0£¬£¬£¬£¬£¬£¬£¬¸ßλ±»½Ø¶Ï¡£¡£¡£¡£¡£Õâʱreg¼Ä·ÅÆ÷µÄµÍ32λÁìÓòÒѾ»ìÂÒ¡£¡£¡£¡£¡£¶ÔÓÚÑéÖ¤Æ÷À´ËµÊÇ»ìÂҵ쬣¬£¬£¬£¬£¬£¬µ«ÊÇÔËÐÐ̬ʱ£¬£¬£¬£¬£¬£¬£¬regµÄÁìÓòÊÇÕý³£µÄ¡£¡£¡£¡£¡£Æäʵ¶ÔÓÚÓзûºÅÌìǵµÄÇé¿ö£¬£¬£¬£¬£¬£¬£¬ÒѾ½øÐÐÁËÅú¸Ä¡£¡£¡£¡£¡£²¹¶¡commitΪ£ºb02709587ea3£¬£¬£¬£¬£¬£¬£¬¹Ø¼ü²¹¶¡´úÂëÈçÏÂËùʾ£º

¶øÎ´¶ÔÎÞ·ûºÅÌìǵµÄÇé¿ö½øÐнâ¾ö¡£¡£¡£¡£¡£¸Ã·ì϶²¹¶¡ÖУ¬£¬£¬£¬£¬£¬£¬Åú¸ÄΪͬʱ¶Ôumin_valueºÍumax_value½øÐÐÁËÅжϣ¬£¬£¬£¬£¬£¬£¬ÈçÏÂËùʾ£º

£¨2£©µ÷ÊÔ·ÖÎö
Ê×ÏȽ«BPF_REG_7¼Ä·ÅÆ÷ÉèÖÃΪ1<<32£¬£¬£¬£¬£¬£¬£¬¼´0x10000000£¬£¬£¬£¬£¬£¬£¬²¢Í¨¹ýÁ½¸öÂ½ÐøµÄNEGÖ¸ÁîʹÑéÖ¤Æ÷ÎÞ·¨¸ú×Ù¼Ä·ÅÆ÷µÄÁìÓò£¬£¬£¬£¬£¬£¬£¬Í¬Ê±Äܹ»±£ÕÏ¼Ä·ÅÆ÷µÄÖµÔÚÔËÐÐʱ²»±ä¡£¡£¡£¡£¡£¿£¿£¿£¿£¿£Äܹ»Í¨¹ýÈçÏÂBPFÖ¸ÁîʵÏÖ£º

Ö´Ðе½LSHÖ¸Áîʱ£¬£¬£¬£¬£¬£¬£¬ÈçÏÂËùʾ£º

´ËʱBPF_REG_7¼Ä·ÅÆ÷µÄ״̬ÈçÏÂËùʾ£º

Ö´ÐÐÍêLSHºó£¬£¬£¬£¬£¬£¬£¬´ËʱBPF_REG_7¼Ä·ÅÆ÷µÄ״̬ÈçÏÂͼËùʾ£º

µ«ÊÇ´Ëʱumin_valueÒ²ÊÇ0x100000000£¬£¬£¬£¬£¬£¬£¬»¹Ð轫umin_valueÉèÖóÉ0x1£¬£¬£¬£¬£¬£¬£¬Äܹ»Í¨¹ýÈçÏÂeBPFÖ¸ÁîʵÏÖ£º

¶ÏµãÉäÖк󣬣¬£¬£¬£¬£¬£¬Å²ÓÃÕ»ÈçÏÂËùʾ£º

¶ÔBPF_JGEºÍBPF_JGTÖ¸Áî½øÐд¦Ö㬣¬£¬£¬£¬£¬£¬ÕâÀï²»ÊÇ32λָÁî²Ù×÷£¬£¬£¬£¬£¬£¬£¬Ö´ÐÐÈçÏ´úÂ룺

ÈôÊÇR7 >= 0x1£¬£¬£¬£¬£¬£¬£¬ÔòÑéÖ¤Æ÷ÕýÈ··ÖÖ§ÉÏ£¬£¬£¬£¬£¬£¬£¬true_reg->umin_valueÉèÖÃΪtrue_reg->umin_valueºÍtrue_uminÖ®¼äµÄ×î´óÖµ£¬£¬£¬£¬£¬£¬£¬ÕâÀïÉèÖóÉtrue_umin£¬£¬£¬£¬£¬£¬£¬Îª0x1¡£¡£¡£¡£¡£¶øºóŲÓÃ__reg_combine_64_into_32()º¯Êý¸üÐÂÒ»ÏÂtrue_regµÄÁìÓò¡£¡£¡£¡£¡£ÈçÏ´úÂëËùʾ£º

½øÈë¸Ãº¯Êýºó£¬£¬£¬£¬£¬£¬£¬Ê×ÏÈÅжÏÓзûºÅÁìÓòµÄÇé¿ö£¬£¬£¬£¬£¬£¬£¬ÈçÏ´úÂëËùʾ£º

ÕâÀïͬʱÅжÏÓзûºÅ´óÓ×Öµ£¬£¬£¬£¬£¬£¬£¬Á˾ֲ»ÎªÕ棬£¬£¬£¬£¬£¬£¬²»½øÈëifÓï¾ä£¬£¬£¬£¬£¬£¬£¬Òò¶ø²»»áÅú¸Ä32λµÄÓзûºÅ´óÓ×Öµ£¬£¬£¬£¬£¬£¬£¬´òÓ¡true_regµÄ״̬ÈçÏÂËùʾ£º

¶øºóÆðÍ·ÅжÏÎÞ·ûºÅ×îÓ×ÖµµÄÇé¿ö£¬£¬£¬£¬£¬£¬£¬Á˾ÖÎªÕæ£¬£¬£¬£¬£¬£¬£¬¶øºóÅú¸Ä32λÎÞ·ûºÅ×îÓ×Öµ£¬£¬£¬£¬£¬£¬£¬ÈçÏ´úÂ룺

ÓÉÓÚÕâÀï·Ö¸ô½øÐÐÅжϣ¬£¬£¬£¬£¬£¬£¬Äܹ»³É¹¦ÉèÖÃreg->u32_min_valueΪ0x1¡£¡£¡£¡£¡£½ÓÏÂÀ´ÅжÏÎÞ·ûºÅ×î´óÖµ£¬£¬£¬£¬£¬£¬£¬reg->umax_valueΪ0xffffffffffffffff£¬£¬£¬£¬£¬£¬£¬´óÓÚ0xffffffff¡£¡£¡£¡£¡£Òò¶øÇ°Ìá²»ÎªÕæ£¬£¬£¬£¬£¬£¬£¬²»Åú¸Äreg->u32_max_value¡£¡£¡£¡£¡£×îºótrue_regµÄ״̬ÈçÏÂËùʾ£º

½«¼Ä·ÅÆ÷µÄumin_valueºÍu32_min_value¶¼ÉèÖÃΪ0x1¡£¡£¡£¡£¡£½ÓÏÂÀ´Í¨¹ýÈçÏÂeBPFÖ¸Áî×éºÏ½«u32_max_valueÒ²ÉèÖÃΪ0x1¡£¡£¡£¡£¡£ÈçÏÂËùʾ£º

¸ÃÖ¸ÁîΪW7<=0x1£¬£¬£¬£¬£¬£¬£¬W7Ϊ32λ¼Ä·ÅÆ÷¡£¡£¡£¡£¡£ÉäÖжϵãºó£¬£¬£¬£¬£¬£¬£¬Å²ÓÃÕ»ÈçÏÂËùʾ£º

ÈôÊÇW7<=0x1£¬£¬£¬£¬£¬£¬£¬½ÓÏÂÀ´ÉèÖÃÕýÈ··Ö֧ϵÄtrue_reg->u32_max_value£¬£¬£¬£¬£¬£¬£¬ÈçÏÂͼËùʾ£º

ÐÐ7200£¬£¬£¬£¬£¬£¬£¬½«true_reg->u32_max_valueÉèÖÃΪtrue_umax£¬£¬£¬£¬£¬£¬£¬Îª0x1¡£¡£¡£¡£¡£´Ëʱtrue_regµÄ״̬ÈçÏÂËùʾ£º

¶øºóŲÓÃ__reg_combine_32_into_64()º¯Êý¸üÐÂtrue_regµÄÁìÓò£¬£¬£¬£¬£¬£¬£¬ÈçÏÂËùʾ£º

¸üÐÂÁìÓòºó£¬£¬£¬£¬£¬£¬£¬×îºótrue_regµÄ״̬ÈçÏÂËùʾ£º

´ËʱÔÚÑéÖ¤Æ÷µÄÊÓ½ÇÖУ¬£¬£¬£¬£¬£¬£¬R7¼Ä·ÅÆ÷µÄ32λÁìÓòÊǹ̶¨Öµ£¬£¬£¬£¬£¬£¬£¬Îª³£Êý0x1¡£¡£¡£¡£¡£½ÓÏÂÀ´Í¨¹ýÈçÏÂeBPF×éºÏ½«R7±ä»»³É0£¬£¬£¬£¬£¬£¬£¬ÈçÏÂËùʾ£º

Ê×ÏÈͨ¹ýMOV32½«R7µÄ64λÁìÓòÒ²ÉèÖó£Êý0x1¡£¡£¡£¡£¡£Ö´ÐÐÍêMOV32Ö¸Áîºó£¬£¬£¬£¬£¬£¬£¬ÔÚÑéÖ¤Æ÷µÄÊÓ½ÇÏÂR7¼Ä·ÅÆ÷µÄ״̬ÈçÏÂËùʾ£º

¶øÔÚÔËÐÐʱ£¬£¬£¬£¬£¬£¬£¬R7µÄֵΪ1<<32£¬£¬£¬£¬£¬£¬£¬¼´0x100000000£¬£¬£¬£¬£¬£¬£¬µÍ32Ϊ0£¬£¬£¬£¬£¬£¬£¬¼´R7µÄ32λÁìÓòΪ³£Êý0£¬£¬£¬£¬£¬£¬£¬¶øºóͨ¹ýMULºÍADDÁ½´Î²Ù×÷£¬£¬£¬£¬£¬£¬£¬½«R7¼Ä·ÅÆ÷µÄ״̬ת»»³ÉÔÚÑéÖ¤Æ÷µÄÊÓ½ÇÏÂΪ0x0£¬£¬£¬£¬£¬£¬£¬ÔÚÔËÐÐʱΪ0x1£¬£¬£¬£¬£¬£¬£¬×îÖÕ±ãÄܹ»ÊµÏÖÔ½½ç¶Áд¡£¡£¡£¡£¡£
·ì϶¸´ÏÖ
ÔÚLinux-5.11.0Äں˰汾µÄÌØ¶¨²âÊÔ»·¾³ÖнøÐзì϶ÀûÓòâÊÔ£¬£¬£¬£¬£¬£¬£¬³É¹¦ÌáȨ¡£¡£¡£¡£¡£

²Î¿¼Á´½Ó
1.https://www.zerodayinitiative.com/blog/2021/5/26/cve-2021-31440-an-incorrect-bounds-calculation-in-the-linux-kernel-ebpf-verifier
2.https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=10bf4e83167cc68595b85fd73bb91e8f2c086e36
3.https://github.com/torvalds/linux/commit/b02709587ea3d699a608568ee8157d8db4fd8cae
4.https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-31440
8827Ì«Ñô¼¯ÍÅ»ý¼«·ÀÓù³¢ÊÔÊÒ£¨ADLab£©
ADLab³ÉÁ¢ÓÚ1999Ä꣬£¬£¬£¬£¬£¬£¬ÊÇÖйú°²È«ÐÐÒµ×îÔç³ÉÁ¢µÄ¹¥·À¼¼Êõ×êÑг¢ÊÔÊÒÖ®Ò»£¬£¬£¬£¬£¬£¬£¬Î¢ÈíMAPP´òËãÖ÷Ìâ³ÉÔ±£¬£¬£¬£¬£¬£¬£¬¡°ºÚȸ¹¥»÷¡±¸ÅÏëÊ×ÍÆÕß¡£¡£¡£¡£¡£½ØÖ¹Ä¿Ç°£¬£¬£¬£¬£¬£¬£¬ADLabÒÑͨ¹ýCVEÀۼư䲼°²È«·ì϶½ü1100¸ö£¬£¬£¬£¬£¬£¬£¬Í¨¹ý CNVD/CNNVDÀۼư䲼°²È«·ì϶1000Óà¸ö£¬£¬£¬£¬£¬£¬£¬³ÖÐøÎ¬³Ö¹ú¼ÊÍøÂ簲ȫÁìÓòÒ»Á÷Ë®×¼¡£¡£¡£¡£¡£³¢ÊÔÊÒ×êÑз½Ïòº¸Ç²Ù×÷ϵͳÓëÀûÓÃϵͳ°²È«×êÑÓ×¢ÖÇÄÜÖն˰²È«×êÑÓ×¢ÎïÁªÍøÖÇÄÜÉ豸°²È«×êÑÓ×¢Web°²È«×êÑÓ×¢¹¤¿ØÏµÍ³°²È«×êÑÓ×¢ÔÆ°²È«×êÑС£¡£¡£¡£¡£×êÑгɾÍÀûÓÃÓÚ²úÆ·Ö÷Ìâ¼¼Êõ×êÑÓ×¢¹ú¶È³Áµã¿Æ¼¼ÏîÄ¿¹¥¹Ø¡¢×¨Òµ°²È«·þÎñµÈ¡£¡£¡£¡£¡£



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