¡¾Ô­´´·ì϶¡¿Î¢ÈíIE/Edge¾ç±¾ÒýÇæ·ì϶CVE-2020-0768·ÖÎö

°ä²¼¹¦·ò 2020-03-13

΢ÈíÔÚ½üÈÕ°ä²¼µÄ²¹¶¡²¼¸æÖУ¬½¨¸´ÁËÒ»¸öÓÉGA»Æ½ð¼×ADLab°²È«×êÑÐÔ±Ìá½»µÄ·ì϶£¬·ì϶±àºÅΪCVE-2020-0768 ¡£·ì϶λÓÚChakraCoreÒýÇæ´úÂë¿âÖУ¬¿ÉͬʱӰÏìInternet Explorer 11ºÍMicrosoft Edge (»ùÓÚEdgeHTML)ä¯ÀÀÆ÷ ¡£¸Ã·ì϶ÊÇÒ»¸öÄÚ´æ·ÛËéÐÍ·ì϶£¬ÓÐÔ¶³Ì´úÂëÖ´ÐеķçÏÕ£¬Òò¶øÎ¢Èí½«ÆäÆÀ¼¶Îª¡°ÑϳÁ¡±£¬²¢³ÆÐ»ADLab ¡£


Ó¦¶Ô´ëÊ©


ʹÓÃWindows×Ô¶¯¸üлòÊÖ¶¯ÏÂÔØ²¹¶¡°ü½¨¸´·ì϶ ¡£


·ì϶ºÍ²¹¶¡·ÖÎö


PART1


±¾·ì϶ÊÇChakraCoreÒýÇæÔÚJIT±àÒë¹ý³ÌÖУ¬µ¥Ò»Ö¸ÁîµÄÊý¾ÝÁ÷·ÖÎöÃýÎ󣬵¼ÖµıäÁ¿»îÔ¾ÐÔ·ÖÎöºÍ¼Ä·ÅÆ÷·ÖÅä·¸´í ¡£Ê×ÏÈ£¬´Ó·ì϶Ñù±¾µÄ½ÚÔìÁ÷ͼÆðÍ· ¡£


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


ÆäÖУ¬ÔÚBlock 4ÓÐÈçϵÄ×Ö½ÚÂ룺


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


·ûºÅs10´ú±í[1337]£¬s6´ú±íconst½¨ÊεÄarr ¡£ÒÀÕÕ±àÒëµÀÀíµÄÊõÓ±äÁ¿»ñÈ¡½ç˵ֵ³ÆÎªdef£¬±äÁ¿Öµ±»Ê¹ÓóÆÎªuse£¬ÔÚInitConstÖ¸ÁîÖÐs6±»def£¬s10±»use£¬ËæºóÔÚStElemCÕâÌõÖ¸ÁîÏ£¬s6±»use ¡ £Äܹ»¿´µ½s6Óës10¹ØÏµÇ×êÇ£¬s6Äܹ»¿´×÷s10ÒÀÕÕÁíÒ»ÖÖ²½Öè¶Ôͳһ±äÁ¿µÄÒýÓã¬ChakraCore³ÆÎªcopy-prop·ûºÅ¶Ôԭʼ·ûºÅµÄÒýÓà ¡£µ«µ÷ÊÔÏÔʾ£¬ÕâÀï²úÉúÁËÃýÎó ¡£


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


Èç´ËÒ»À´ÐγÉÁËԭʼ·ûºÅΪs10£¬copy-prop·ûºÅΪs6£¬¼´s6->s10µÄ¼üÖµ¶Ô ¡£ÆäÕ»»ØËÝλÓÚ£º


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


ÃýÎó¼üÖµ¶ÔÊÇÆ¾¾ÝÊý¾ÝÁ÷·ÖÎöµÄÃýÎóÁ˾ֵóöµÄ ¡£Ëæºó£¬Õâ¸ö¼üÖµ¶Ô±»²ÎÓëÁËBlock 4ÖÐblockOptData->capturedValues->copyPropSyms£¬ÆäÕ»»ØËÝλÓÚ£º


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


Ëæºó£¬ÔÚJIT ForwardPassÕâÑùÔçÄêÏòºóµÄÓÅ»¯¹ý³ÌÖУ¬Block 4µÄblockOptData->capturedValues±»¹é²¢¸øBlock 5£¬ÆäÖÐÔ̺¬s6->s10ÕâÒ»¼üÖµ¶Ô£¬ÆäÕ»»ØËÝλÓÚ£º


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


ÔÙÖ®ºó£¬ÔÚJIT BackwardPassÕâÑù´ÓºóÏòǰµÄÓÅ»¯¹ý³ÌÖУ¬Block 5µÄupwardExposedUsesͨ¹ý½Ó¼ûblockOptData->capturedValues->copyPropSyms£¬°Ñs6->s10ÕâÒ»¼üÖµ¶Ô²ÎÓë ¡£ÆäÕ»»ØËÝλÓÚ£º


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


upwardExposedUsesÔÚ±àÒëµÀÀíÖб»³ÆÎª¡°ÏòÉ϶³öµÄʹÓá±£¬ËüÊDZäÁ¿»îÔ¾ÐÔ·ÖÎöµÄ¶Ô³Æ¹ý³Ì ¡£ËæºóÔÚ·´Ïò´«²¼µÄ¹ý³ÌÖУ¬º¬ÓÐÉÏÊö¼üÖµ¶ÔµÄupwardExposedUses±»´«µÝ¸øBlock 4¡¢Block 3ºÍBlock 2 ¡£¶ø×÷ΪLoop HeaderµÄBlock 2½«ÆäupwardExposedUsesÓÃÓÚ»îÔ¾ÐÔ·ÖÎöºÍºóÐøµÄ¼Ä·ÅÆ÷·ÖÅä¹ý³Ì ¡£


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


ÉÏÊö¹ý³ÌÄܹ»Í¨¹ýÏÂͼÀ´°µÊ¾ ¡ £Äܹ»¿´µ½£¬ÃýÎóµÄÊý¾Ý¾­¹ýÁËÕýÏò´«²¼ºÍ·´Ïò´«²¼£¬×îÖÕÔÚÑ­»·ÌåµÄÈ«ÊýÁìÓò¶¼±»´«È¾ ¡£


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


Ëæºó£¬ÓÉÓÚÉÏÊöÃýÎóÊý¾Ý£¬ÔÚJITµÄ¼Ä·ÅÆ÷·ÖÅä¹ý³ÌΪs10ÍÆËã³öÁËÃýÎóµÄÐÔÃüÖÜÆÚ£¬ÆäÐÔÃüÖÜÆÚºá¿çÑ­»·µÄÆðÍ·µ½ÊµÏÖ ¡£Òò¶øÒõ²îÑô´í£¬JIT²åÈëÁËÒ»¸öMOVÖ¸ÁÐÎÈçMOV labelReg, mem£¬µ«²¢Ã»Óгõʼ»¯Æäinstr->src->m_offset£¬¸ÃֵʼÖÕΪ0 ¡£ÔÚ×îºóÌì»îÁ¦ÐµÂëµÄʱ³½£¬ÌìÉúÁËÒ»¸öÖ¸ÏòÕ»Ö¡Ö¸Õë¡¢Æ«ÒÆÎª0µÄ¶ÁÄÚ´æ²Ù×÷£¬°µÊ¾Îª[EBP+0x0]»ò[RBP+0x0] ¡£


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


ÕâÑù£¬Ò»¸ö·ÇÔ¤ÆÚµÄÄÚ´æ½Ó¼û°Ñ·¸·¨µÄÊý¾Ý¶ÁÈëÁËJavaScriptÒýÇæ¸ßµÍÎÄ£¬ËæºóÔÚBailOut»òÆäËûÇé¿ö»áÒýÓõ½£¬ÕâÑùµÄ·¸·¨Êý¾Ý½«»áÔì³ÉÀàÐÍ»ìºÏ ¡£


PART2


Ôì³ÉÉÏÊöÃýÎóÊý¾Ý´«²¼µÄÔ­ÒòÔÚÓÚInitConstÕâÒ»Ö¸ÁîÆäʵûÓÐÔÚChakraCoreµÄJIT´úÂëÖеõ½ÕýÈ·µÄÊý¾ÝÁ÷·ÖÎö£¬Òò¶øÔÚ΢ÈíµÄ½¨¸´ÖУ¬ÔÚJIT¸ÕÆðͷȾָµÄʱ³½£¬InitConstÖ¸Áî¾Í±»´úÌæ³ÉLd_AÖ¸Áî ¡£


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


ChakraCoreÆëȫʵÏÖÁ˶ÔLd_AÖ¸ÁîµÄÊý¾ÝÁ÷·ÖÎö ¡£´Ëʱ£¬ÔÚ·ÖÎöForward PassÖУ¬·¢ÏÖBlock 4ÖеļüÖµ¶Ô²»ÔÙÊÇs6->s10£¬¶øÊÇs10->s6£¬Ò²¾ÍÊÇ˵s10ÊÇԭʼ·ûºÅ£¬s6ÊÇÒýÓÃs10µÄcopy-prop·ûºÅ ¡£Èç´ËÒ»À´£¬ÌìÈ»²»»áÔì³ÉÃýÎóÊý¾ÝµÄ´«²¼ ¡£Î¢ÈíÔÚIE11ä¯ÀÀÆ÷ÖÐʹÓÃÁËÒ»ÑùµÄ´úÂëÀ´½¨²¹Õâ¸ö·ì϶ ¡£


ÊÂʵÉÏ£¬ÔÚECMAScript 6³ß¶ÈÖУ¬const½¨ÊηûÓÃÀ´°µÊ¾Ò»¸ö±äÁ¿ÔÚ½ç˵֮ºó²»³ÉÔÙ±»¸³Öµ£¬ÊÇÓï·¨µµ´ÎµÄÔ¼Êø£»¶øJavaScriptÒýÇæÖеÄJIT¹ý³ÌʼÖÕ²úÉúÔÚÚ¹ÊÍÖ´ÐÐÖ®ºó£¬ÈôÊÇconst½¨ÊηûµÄÔ¼ÊøÔÚÚ¹ÊÍÖ´Ðн׶α»Î¥·´£¬½«»áµ±¼´Í˳ö£¬²»»áÓÅ»¯Ö´ÐÐJIT¹ý³Ì ¡£Òò¶ø£¬JIT¹ý³ÌÖ»±ØÒªË¼¿¼Êý¾ÝÁ÷ÎÊÌ⣬¶ø²»ÓÃ˼¿¼const½¨ÊηûµÄÔ¼Êø ¡£ÓÉÓÚChakraCoreÔÚJITµÄÓÅ»¯½×¶ÎÓëÚ¹ÊÍÖ´Ðн׶ÎʹÓÃͳһÌ×ÖÐÑë˵»°£¬²»ÂÛÊÇLd_A»¹ÊÇInitConst¶¼¼æÈÝJITµÄÈ«¹ý³Ì£¬±¾·ì϶Äܹ»Ã÷È·ÒÔΪÊÇÒ»¸öÒµÎñÂß¼­·ì϶ ¡£


²Î¿¼Á´½Ó£º

1.https://portal.msrc.microsoft.com/en-us/security-guidance/acknowledgments

2.https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-0768