¡¾Ô­´´Îó²î¡¿Î¢ÈíIE/Edge¾ç±¾ÒýÇæÎó²îCVE-2020-0768ÆÊÎö

Ðû²¼Ê±¼ä 2020-03-13

΢ÈíÔÚ¿ËÈÕÐû²¼µÄ²¹¶¡Í¨¸æÖУ¬£¬ÐÞ¸´ÁËÒ»¸öÓÉ¿­Ðý¹ú¼ÊÓÎÏ·ADLabÇå¾²Ñо¿Ô±Ìá½»µÄÎó²î£¬£¬Îó²î±àºÅΪCVE-2020-0768¡£¡£¡£ ¡£Îó²îλÓÚChakraCoreÒýÇæ´úÂë¿âÖУ¬£¬¿ÉͬʱӰÏìInternet Explorer 11ºÍMicrosoft Edge (»ùÓÚEdgeHTML)ä¯ÀÀÆ÷¡£¡£¡£ ¡£¸ÃÎó²îÊÇÒ»¸öÄÚ´æÆÆËðÐÍÎó²î£¬£¬ÓÐÔ¶³Ì´úÂëÖ´ÐеÄΣº¦£¬£¬Òò´Ë΢Èí½«ÆäÆÀ¼¶Îª¡°ÑÏÖØ¡±£¬£¬²¢ÖÂлADLab¡£¡£¡£ ¡£


Ó¦¶Ô²½·¥


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


Îó²îºÍ²¹¶¡ÆÊÎö


PART1


±¾Îó²îÊÇChakraCoreÒýÇæÔÚJIT±àÒëÀú³ÌÖУ¬£¬¼òµ¥Ö¸ÁîµÄÊý¾ÝÁ÷ÆÊÎö¹ýʧ£¬£¬µ¼ÖµıäÁ¿»îÔ¾ÐÔÆÊÎöºÍ¼Ä´æÆ÷·ÖÅÉÍÉ»¯¡£¡£¡£ ¡£Ê×ÏÈ£¬£¬´ÓÎó²îÑù±¾µÄ¿ØÖÆÁ÷ͼ×îÏÈ¡£¡£¡£ ¡£


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


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


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


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


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


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


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


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


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


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


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


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


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


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


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ÉÏÊöÀú³Ì¿ÉÒÔͨ¹ýÏÂͼÀ´ÌåÏÖ¡£¡£¡£ ¡£¿£¿£¿£¿£¿£¿ÉÒÔ¿´µ½£¬£¬¹ýʧµÄÊý¾Ý¾­ÓÉÁËÕýÏòÈö²¥ºÍ·´ÏòÈö²¥£¬£¬×îÖÕÔÚÑ­»·ÌåµÄËùÓйæÄ£¶¼±»ÎÛȾ¡£¡£¡£ ¡£


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


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


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


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


PART2


Ôì³ÉÉÏÊö¹ýʧÊý¾ÝÈö²¥µÄÔµ¹ÊÔ­ÓÉÔÚÓÚInitConstÕâÒ»Ö¸Áî×ÅʵûÓÐÔÚChakraCoreµÄJIT´úÂëÖлñµÃ׼ȷµÄÊý¾ÝÁ÷ÆÊÎö£¬£¬Òò´ËÔÚ΢ÈíµÄÐÞ¸´ÖУ¬£¬ÔÚJIT¸Õ×îÏȽéÈëµÄʱ¼ä£¬£¬InitConstÖ¸Áî¾Í±»Ìæ»»³ÉLd_AÖ¸Áî¡£¡£¡£ ¡£


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


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