¡¾Ô­´´Â©¶´¡¿Î¢Èí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