¡¾Ô­´´Â©¶´¡¿Î¢ÈíIE/Edge½Å±¾ÒýÇæÂ©¶´CVE-2020-0768·ÖÎö

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

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


Ó¦¶Ô´ëÊ©


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


©¶´ºÍ²¹¶¡·ÖÎö


PART1


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


×ðÁú¶¶È¦ - Ϊdu¶øÉú


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


×ðÁú¶¶È¦ - Ϊdu¶øÉú


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


×ðÁú¶¶È¦ - Ϊdu¶øÉú


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


×ðÁú¶¶È¦ - Ϊdu¶øÉú


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


×ðÁú¶¶È¦ - Ϊdu¶øÉú


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


×ðÁú¶¶È¦ - Ϊdu¶øÉú


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


×ðÁú¶¶È¦ - Ϊdu¶øÉú


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


×ðÁú¶¶È¦ - Ϊdu¶øÉú


ÉÏÊö¹ý³Ì¿ÉÒÔͨ¹ýÏÂͼÀ´ÌåÏÖ ¡£¿ÉÒÔ¿´µ½£¬´íÎóµÄÊý¾Ý¾­¹ýÁËÕýÏòÁ÷´«ºÍ·´ÏòÁ÷´«£¬×îÖÕÔÚÑ­»·ÌåµÄÈ«²¿·¶Î§¶¼±»ÎÛȾ ¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


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


×ðÁú¶¶È¦ - Ϊdu¶øÉú


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


PART2


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


×ðÁú¶¶È¦ - Ϊdu¶øÉú


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