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
OG¶«·½Ìü»ý¼«·ÀÓù³¢ÊÔÊÒ£¨ADLab£©
ADLab³ÉÁ¢ÓÚ1999Ä꣬£¬£¬ÊÇÖйú°²È«ÐÐÒµ×îÔç³ÉÁ¢µÄ¹¥·À¼¼Êõ×êÑг¢ÊÔÊÒÖ®Ò»£¬£¬£¬Î¢ÈíMAPP´òËãÖ÷Ìâ³ÉÔ±£¬£¬£¬¡°ºÚȸ¹¥»÷¡±¸ÅÄîÊ×ÍÆÕß¡£¡£½ØÖ¹Ä¿Ç°£¬£¬£¬ADLabÒÑͨ¹ýCVEÀۼư䲼°²È«·ì϶½ü1100¸ö£¬£¬£¬Í¨¹ý CNVD/CNNVDÀۼư䲼°²È«·ì϶1000Óà¸ö£¬£¬£¬³ÖÐøÎ¬³Ö¹ú¼ÊÍøÂ簲ȫÁìÓòÒ»Á÷Ë®×¼¡£¡£³¢ÊÔÊÒ×êÑз½Ïòº¸Ç²Ù×÷ϵͳÓëÀûÓÃϵͳ°²È«×êÑС¢ÖÇÄÜÖն˰²È«×êÑС¢ÎïÁªÍøÖÇÄÜÉ豸°²È«×êÑС¢Web°²È«×êÑС¢¹¤¿ØÏµÍ³°²È«×êÑС¢Ôư²È«×êÑС£¡£×êÑгɾÍÀûÓÃÓÚ²úÆ·Ö÷Ìâ¼¼Êõ×êÑС¢¹ú¶ÈÖØµã¿Æ¼¼ÏîÄ¿¹¥¹Ø¡¢×¨Òµ°²È«·þÎñµÈ¡£¡£



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