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

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

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


Ó¦¶Ô´ëÊ©


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


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


PART1


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


PART2


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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