LinuxÄÚºËÀ¶ÑÀºÍ̸ջ·ì϶£¨BleedingTooth£©ÀûÓ÷ÖÎöÓ븴ÏÖ
°ä²¼¹¦·ò 2021-04-16·ì϶¸ÅÊö
2020Äê10Ô£¬¹È¸è°²È«×êÑÐÈËÔ±Åû¶ÁËÈý¸öLinuxÄÚºËÀ¶ÑÀºÍ̸ջ·ì϶£¬¿Éµ¼ÖÂÔ¶³Ì´úÂëÖ´ÐУ¬±»³ÆÎªBleedingTooth¡£ÕâÈý¸ö·ì϶ÖУ¬Ò»¸öÊǶÑÒç³ö£¬±àºÅΪCVE-2020-24490£»ÁíÒ»¸öÊÇÀàÐÍ»ìºÏ£¬±àºÅΪCVE-2020-12351£¬×îºóÒ»¸öÊÇÐÅϢй¶£¬±àºÅΪCVE-2020-12352¡£½üÈÕ£¬¹È¸è°²È«×êÑÐÈËÔ±ÓÖÅû¶ÁËBleedingToothÖÐCVE-2020-12351ºÍCVE-2020-12352×éºÏµÄ·ì϶ÀûÓü°Ï¸½Ú£¬²¢ÔÚÀ¶ÑÀ4.0Ï£¬ÊµÏÖÁËÁãµã»÷Ô¶³Ì´úÂëÖ´ÐС£
·ì϶·ÖÎö
CVE-2020-12351
¸Ã·ì϶³Ê´Ë¿Ìnet/bluetooth/l2cap_core.cÖС£l2cap_recv_frame()ÊǽâÎöºÍ´¦ÖÃl2capºÍ̸Êý¾Ý°üµÄº¯Êý¡£´úÂëʵÏÖÈçÏÂËùʾ£º

»ñȡͨ·cidºÍl2capÊý¾Ý°ü³¤¶Èlen¡£´úÂëʵÏÖÈçÏÂËùʾ£º

ƾ¾Ý·ÖÆçµÄͨ·cid£¬½øÈë·ÖÆçµÄ×Ó¹ý³Ì½øÐд¦Ö㬽øÈël2cap_data_channel()º¯Êý¡£´úÂëʵÏÖÈçÏÂËùʾ£º

Ê×ÏÈ£¬Í¨¹ýcidÕÒµ½Í¨Â·chan£»ÈôÊÇûÓÐÕÒµ½£¬ÅжÏcidÊÇ·ñΪL2CAP_CID_A2MP£»ÈôÊÇÊÇ£¬Å²ÓÃa2mp_channel_create()´´½¨Ò»¸öеÄͨ·chan¡£a2mp_channel_create()º¯ÊýʵÏÖÈçÏÂËùʾ£º

ŲÓÃamp_mgr_create()´´½¨mgr£¬ÔÚamp_mgr_create()º¯ÊýÖУ¬´úÂëʵÏÖÈçÏÂËùʾ£º

ŲÓÃa2mp_chan_open()´´½¨Í¨Â·chan£¬¸Ãº¯Êý½«³õʼ»¯Ò»²¿ÃÅÊý¾Ý£¬´úÂëʵÏÖÈçÏÂËùʾ£º

È罫chan->mode³õʼ»¯ÎªL2CAP_MODE_ERTM¡£chan->data¸³ÖµÎªmgr£¬ÀàÐÍΪstruct amp_mgr¡£³É¹¦´´½¨a2mpͨ··µ»Øµ½l2cap_data_channel()ÖУ¬´úÂëʵÏÖÈçÏÂËùʾ£º

ƾ¾Ýchan->modeµÄ·ÖÆç£¬½øÈë·ÖÆçµÄdata´¦ÖÃ×Ó¹ý³Ì£¬µ±modeΪL2CAP_MODE_ERTMºÍL2CAP_MODE_STREAMINGʱ£¬½øÈël2cap_data_rcv()º¯ÊýÖУ¬´úÂëʵÏÖÈçÏÂËùʾ£º

¸ÃifǰÌáÖУ¬»áŲÓÃsk_filter()º¯Êý£¬´Ëʱchan->dataΪ²ÎÊý¡£¶øsk_filter()º¯Êý½ç˵ÈçÏÂËùʾ£º

µÚÒ»¸ö²ÎÊýÀàÐÍΪstruct sock£¬¶øchan->dataÀàÐÍΪstruct amp_mgr£¬²úÉúÀàÐÍ»ìºÏ¡£
CVE-2020-12352
¸Ã·ì϶Êdzʴ˿Ìa2mpºÍ̸ÖУ¬·ì϶´úÂëλÓÚnet/bluetooth/a2mp.c£¬¶à¸öº¯ÊýʹÓÃδ³õʼ»¯µÄ½á¹¹Ì壬½«Êý¾Ý·µ»Øµ½Óû§²ã£¬µ¼ÖÂÐÅϢй¶£¬¿Éй¶ÄÚºËÕ»ÉϵÄÄÚ´æÊý¾Ý¡£·ì϶µÀÀí½ÏΪµ¥Ò»£¬ÒÔa2mp_getinfo_req()º¯ÊýΪÀý£¬¸Ãº¯ÊýÊÇÏìÓ¦getinfoÒªÇóʱŲÓõ쬴úÂëʵÏÖÈçÏÂËùʾ£º

ÐÐ304£¬Í¨¹ýreq->id»ñÈ¡hdev£¬ÈôÊDz»´æÔÚhdev»òhdev->type²»ÊÇHCI_AMP£¬½øÈëifÓï¾äÖУ¬½ç˵struct a2mp_info_rspÀàÐ굀 rsp£¬¸Ã½á¹¹Ìå½ç˵ÈçÏÂËùʾ£º

ÆäֻʹÓÃÁËrsp.idºÍrsp.status£¬ÆäËûµÄÊý¾ÝÓòδʹÓÃҲδ³õʼ»¯£¬Äܹ»Ð¹Â¶16×Ö½ÚÊý¾Ý£¬¶øºóŲÓÃa2mp_send()º¯Êý½«ÏìÓ¦°ü·¢Ë͵½Óû§²ã£¬Ð¹Â¶ÄÚ´æÊý¾Ý¡£
CVE-2020-24490
¸Ã·ì϶ֻÄÜÔÚbluetooth 5.0Ï´¥·¢£¬ÔÚbluetooth 5.0֮ǰ£¬HCI½øÐй㲥µÄ×î´óÊý¾Ý³¤¶ÈΪ0x1F£¬0x20-0xFF±£Áô¡£ÈçÏÂËùʾ£º

ÔÚbluetooth 5.0ÖУ¬¸Ãlength×î´óÀ©´óµ½229×Ö½Ú¡£ÈçÏÂËùʾ£º

¸Ã·ì϶´úÂëλÓÚnet/bluetooth/hci_event.cÖУ¬ÔÚ´¦ÖÃHCI_LE_Extended_Advertising_ReportÊÂÎñÖУ¬Î´ÅжϹ㲥Êý¾Ý³¤¶È×î´óÖµ£¬ºóÐø¿½±´¹ã²¥Dataµ¼ÖÂÒç³ö¡£Å²Óùý³ÌÈçÏÂËùʾ£º

process_adv_report()º¯Êý´¦Öù㲥Êý¾Ý£¬½«¹ã²¥Êý¾Ý¿½±´µ½·¢ÏÖµÄÉ豸ÖУ¬´úÂëʵÏÖÈçÏÂËùʾ£º

ŲÓÃstore_pending_adv_report()º¯Êý£¬¸Ãº¯ÊýʵÏֹ㲥Êý¾Ý¿½±´£¬´úÂëʵÏÖÈçÏÂËùʾ£º

ÆäÖУ¬discovery_state½á¹¹Ìå½ç˵ÈçÏÂËùʾ£º

last_adv_dataÊý¾Ý´óÓ×ΪHCI_MAX_AD_LENGTH£¬¹²31×Ö½Ú£¬µ±Ö´ÐÐmemcpyʱ²úÉúÒç³ö¡£
ÀûÓ÷ÖÎöÓ븴ÏÖ
½ÚÔì´úÂëÖ´ÐÐÁ÷³Ì
ǰÎÄ·ÖÎöµ½CVE-2020-12351ÀàÐÍ»ìºÏÊÇÔÚsk_filter()º¯ÊýÖвúÉúµÄ£¬sk_filter()º¯ÊýŲÓÃsk_filter_trim_cap()º¯Êý£¬¸Ãº¯Êý´úÂëʵÏÖÈçÏ£º

¸Ãº¯ÊýµÚÒ»¸ö²ÎÊýΪsk£¬²ÎÊýÀàÐÍΪsock½á¹¹Ì壬ÕⲿÃÅ´úÂëÖжÔskºÍskbµÄ²é³ÈÝÒ×ÈÆ¹ý¡£½ÓÏÂÀ´¹Ø¼ü´úÂëÈçÏÂËùʾ£º

ÐÐ113£¬¶Ôsk->sk_filter½øÐнâÒýÓã¬ÈôÊdzɹ¦»ñÈ¡filterÖ¸Õ룬½øÈëÐÐ115¡£ÐÐ119£¬Å²ÓÃbpf_prog_run_save_cb()º¯Êý£¬²ÎÊý±ðÀëΪfilter->progºÍskb£¬¸Ãº¯Êý´úÂëʵÏÖÈçÏÂËùʾ£º

¶øºó£¬ÐÐ676£¬Å²ÓÃ__bpf_prog_run_save_cb()º¯Êý£¬¸Ãº¯ÊýʵÏÖ´úÂëÈçÏ£º

½Ó×Å£¬ÐÐ662£¬Å²ÓÃBPF_PROG_RUN(prog,skb)£¬¸Ãº¯Êý½ç˵Ϊһ¸öºê£¬ÊµÏÖ´úÂëÈçÏÂËùʾ£º

һ·ŲÓÃÏÂÀ´£¬×îÖÕ»áŲÓõ½ºì¿òÖеĴúÂ룬¼ò»¯Ò»ÏÂŲÓùý³ÌΪ£º
sk->sk_filter->prog->bpf_func(skb, sk->sk_filter->prog->insnsi)¡£Òò¶ø£¬Ö»ÓнÚÔìsk->sk_filter¾ÍÄܹ»½ÚÔìÖ´ÐÐÁ÷³Ì¡£
¶ÑÅçռλ
º¯Êýsk_filter()µÄµÚÒ»¸ö²ÎÊýÀàÐÍΪstruct sock£¬¶øÏÖʵ´«ÈëµÄ²ÎÊýÀàÐÍΪstruct amp_mgr£¬Äܹ»Ñ¡È¡¶ÑÅç128´óÓ×µÄÄÚ´æ¿é½øÐÐռλ£¬Î±Ôìamp_mgr ¶ÔÏó¡£ÕâÀïÓиöÎÊÌ⣬sk->sk_filterÔÚsockÖÐµÄÆ«ÒÆÎª0x110£¬¶øamp_mgr½á¹¹Ìå´óÓ×Ϊ0x70£¬Æ«ÒÆÒѾ³¬³öÁËÁìÓò¡£Òª½â¾öÕâ¸öÎÊÌ⣬ÕâÀïÄܹ»Ñ¡È¡ÈçÏÂÆæÃîµÄ¶ÑÅç²¼¾Ö£º

½á¹¹Ìåamp_mgrÔÚkmalloc-128ÀàÐ͵ÄslubÖб»·ÖÅ䣬´ÓµÚÈý¸ö¿éÆðÍ·£¬amp_mgr½á¹¹ÌåÆ«ÒÆ0x10´¦£¬Äܹ»±»Î±Ôì³Ésk_filter£¬±ãÄܹ»Âú×ãsk¶Ôsk_filterÓòµÄ½âÒýÓ㬲¢Çҿɿء£
²¼¾ÖÔØºÉ
ͨ¹ý¶ÑÅçռλ½ÚÔì´úÂëÖ´ÐÐÁ÷³Ìºó£¬½ÓÏÂÀ´¾ÍÊDz¼¾Ö¹¥»÷ÔØºÉ¡£Äܹ»Ñ¡È¡¶ÑÅç1024´óÓ×µÄÄÚ´æ¿éȥαÔìl2cap_chan¶ÔÏó£¬ÓÉÓڽṹÌå´óÓ×Ϊ792£¬ÕýºÃÂäÔÚkmalloc-1024 slub¿éÖУ¬²¢ÇÒa2mpͨ·ҲÊôÓÚl2capͨ·ÖУ¬¿ªÊÍa2mpͨ·ʱ£¬l2capͨ·Ҳ½«±»¿ªÊÍ£¬²Ù¿ØÆðÀ´½ÏΪ½Ã½Ý£¬×îÖÕ²¼¾ÖÈçÏÂËùʾ£º

й¶l2cap_chan¶ÔÏóµØÖ·
ͨ¹ý¶ÑÅç²¼¾ÖºÍ´´½¨¿ªÊÍl2cap_chanͨ·µÈһϵÁвÙ×÷ºó£¬¿ÉÄÜ´æÔÚÒ»¸öÖ¸Ïòkmalloc-1024ÄÚ´æ¿éµØÖ·µÄl2cap_chan¶ÔÏó£¬Äܹ»Í¨¹ýCVE-2020-12352·ì϶й¶һ¸öÄÚºËÕ»ÉÏÃæµÄÄں˵ØÖ·£¬ÈçÏÂͼÖкì¿òËùʾ£º

ͨ¹ý¸ÃÄڵصØÖ·¼õÈ¥Ò»¸ö0x110Æ«ÒÆ±ãÄܹ»ÕÒµ½Ò»¸öl2cap_chan¶ÔÏóµØÖ·£¬Äܹ»Í¨¹ýamp_mgr½á¹¹ÌåÄÚ´æµØÖ·²é³Ò»ÏÂÊÇ·ñÕýÈ·£¬ÓÉÓÚamp_mgr½á¹¹ÌåÆ«ÒÆ0x18´¦Îªl2cap_chanÖ¸Õ룬ÈçÏÂͼÖкì¿òËùʾ£º

³É¹¦Ð¹Â¶l2cap_chan¶ÔÏóµØÖ·ºó£¬¶øºóÈ¥Ìî³äamp_mgr½á¹¹ÌåÆ«ÒÆ0x10´¦µÄÊý¾ÝÓò¡£
¸´ÏÖ²âÊÔ
ÎÒÃÇÔÚubuntu 5.4.0-26-genericϵͳϸ´ÏÖ²âÊÔ·ì϶ÀûÓã¬Ö´Ðйý³ÌÈçÏ£º

³É¹¦·´µ¯root¼¶shell£¬ÈçÏÂËùʾ£º

²Î¿¼Á´½Ó£º
[1]https://google.github.io/security-research/pocs/linux/bleedingtooth/writeup
[2]https://github.com/google/security-research/security/advisories/GHSA-ccx2-w2r4-x649
[3]https://github.com/google/security-research/security/advisories/GHSA-7mh3-gq28-gfrq
[4]https://github.com/google/security-research/security/advisories/GHSA-h637-c88j-47wq
GA»Æ½ð¼×»ý¼«·ÀÓù³¢ÊÔÊÒ£¨ADLab£©
ADLab³ÉÁ¢ÓÚ1999Ä꣬ÊÇÖйú°²È«ÐÐÒµ×îÔç³ÉÁ¢µÄ¹¥·À¼¼Êõ×êÑг¢ÊÔÊÒÖ®Ò»£¬Î¢ÈíMAPP´òËãÖ÷Ìâ³ÉÔ±£¬¡°ºÚȸ¹¥»÷¡±¸ÅÏëÊ×ÍÆÕß¡£½ØÖ¹Ä¿Ç°£¬ADLabÒÑͨ¹ýCVEÀۼư䲼°²È«·ì϶½ü1100¸ö£¬Í¨¹ý CNVD/CNNVDÀۼư䲼°²È«·ì϶1000Óà¸ö£¬³ÖÐøÎ¬³Ö¹ú¼ÊÍøÂ簲ȫÁìÓòÒ»Á÷Ë®×¼¡£³¢ÊÔÊÒ×êÑз½Ïòº¸Ç²Ù×÷ϵͳÓëÀûÓÃϵͳ°²È«×êÑÓ×¢ÖÇÄÜÖն˰²È«×êÑÓ×¢ÎïÁªÍøÖÇÄÜÉ豸°²È«×êÑÓ×¢Web°²È«×êÑÓ×¢¹¤¿ØÏµÍ³°²È«×êÑÓ×¢ÔÆ°²È«×êÑС£×êÑгɾÍÀûÓÃÓÚ²úÆ·Ö÷Ìâ¼¼Êõ×êÑÓ×¢¹ú¶È³Áµã¿Æ¼¼ÏîÄ¿¹¥¹Ø¡¢×¨Òµ°²È«·þÎñµÈ¡£



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