ChakraÒýÇæÖÐJIT±àÒëÓÅ»¯Àú³ÌÖеÄÊý×éÀàÐÍ»ìÏýÎó²îÆÊÎö

Ðû²¼Ê±¼ä 2018-12-18
1¡¢Ñо¿Åä¾°

ChakraÊÇÒ»¸öÓÉ΢ÈíΪMicrosoft Edgeä¯ÀÀÆ÷¿ª·¢µÄJavaScriptÒýÇæ¡£¡£¡£ËüÔÚÒ»¸ö×ÔÁ¦µÄCPU½¹µãÉϼ´Ê±±àÒë¾ç±¾£¬£¬£¬£¬Óëä¯ÀÀÆ÷²¢ÐС£¡£¡£±¾ÎÄÖ÷Òª¶ÔChakraÒýÇæÖÐJIT±àÒëÓÅ»¯Àú³ÌÖеÄÊý×éÀàÐÍ»ìÏýÎó²î¾ÙÐÐÆÊÎö¡£¡£¡£


JavaScriptÒýÇæµÄÐÔÄܶÔÕû¸öä¯ÀÀÆ÷µÄÓ°ÏìÖÁ¹ØÖ÷Òª£¬£¬£¬£¬ JIT±àÒëÓÅ»¯ÊÇΪÁËÌá¸ßChakraÒýÇæÐÔÄÜ¡£¡£¡£µ±ÔÚÑ­»·Óï¾äÖÐÖØ¸´Ö´ÐÐͳһ¶Î¾ç±¾´úÂëʱ£¬£¬£¬£¬ÈôÊÇÚ¹ÊÍÖØÊÓ¸´Ö´ÐÐÏà¹ØµÄ×Ö½ÚÂ룬£¬£¬£¬Ð§ÂÊ»áºÜµÍ¡£¡£¡£JIT¿ÉÒÔ½«Ô´´úÂëÖ±½ÓÌìÉúÆøÐµÖ¸Á£¬£¬£¬ÔÚÏÂÒ»´ÎÖ´ÐÐʱֱ½ÓÖ´ÐлúеָÁî¡£¡£¡£ÔÚChakraÖÐÖ»Óе±Ä¿µÄº¯Êý»òÕßÑ­»·Óï¾ä±»ÆµÈÔŲÓÃʱ²Å»áÆôÓÃJIT±àÒ룬£¬£¬£¬JIT±àÒëºóÌìÉúÁËÏìÓ¦µÄ»úеָÁ£¬£¬£¬ÏÂÒ»´ÎŲÓõ½Õâ¸öÓï¾ä»òÊǺ¯Êýʱ¾Í»áÖ±½ÓÖ´ÐлúеָÁî¡£¡£¡£


Ò»µ©JITÌìÉúÍê³É£¬£¬£¬£¬³ÌÐò¾Í¿ÉÒÔÖ±½ÓŲÓÃJITÌìÉúµÄ»úеָÁî¡£¡£¡£ÓÉÓÚJITÊÇÖ±½Ó±àÒëΪ»úеָÁîµÄ£¬£¬£¬£¬ÒÔÊÇÐèÒªÔ¤Ïȼٶ¨²Ù×÷Ä¿µÄµÄÀàÐÍ¡£¡£¡£ÈôÊDz»Öª×ãJITµÄ¼ÙÉèµÄ»°£¬£¬£¬£¬´ËJIT´úÂë¾Í²»¿ÉÖ´ÐУ¬£¬£¬£¬²»È»¾Í»á±¬·¢ÀàÐÍ»ìÏýµÄ¹ýʧ¡£¡£¡£Òò´ËJIT´úÂëÖÐÉè¼ÆÁËbailout¹¦Ð§£¬£¬£¬£¬Ò»µ©·¢Ã÷²»Öª×ã¼ÙÉè¾Í¾ÙÐÐbailout£¬£¬£¬£¬bailout»á·ÅÆúÖ´ÐÐJIT´úÂëת»ØÊ¹ÓÃÚ¹ÊÍÆ÷¼ÌÐøÖ´ÐÐ×Ö½ÚÂë¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


2¡¢Êý×éÀàÐÍ»ìÏý˼Ð÷

ChakraÊý×é¿ÉÒÔ·ÖΪÈýÀ࣬£¬£¬£¬»®·ÖÊÇNativeIntArray¡¢NativeFloatArrayºÍVarArray¡£¡£¡£NativeIntArrayºÍNativeFloatArrayÊý×éת»¯³ÉVarArrayÊý×éÀú³ÌÖлὫÊý×éÖеÄÔ­Êý¾Ýͨ¹ýÒì»ò0xfffc000000000000ת»¯ÎªVarArrayÖеÄÊý¾Ý¡£¡£¡£Ò²¾ÍÊÇ˵VarArray»áͨ¹ýÊý×éÖÐÔªËØµÄ¸ßλÀ´ÅжÏÊý×éÖеÄÔªËØÊÇÊý¾ÝÕվɹ¤¾ß¡£¡£¡£


NativeIntArrayºÍNativeFloatArrayÖ®¼ä»ìÏýÒ»Ñùƽ³£²»¿É´øÀ´Çå¾²ÎÊÌ⣬£¬£¬£¬¿ÉÊǵ±Õâ¶þÕߺÍVarArray»ìÏýÖ®ºó¾Í»á·ºÆðÊý¾ÝºÍ¹¤¾ßÎÞ·¨Çø·ÖµÄÎÊÌâ¡£¡£¡£


ÏÈ¿´Ò»¶Î¼òÆÓ´úÂë¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾

Õâ¶Î´úÂëÔÚJITÓÅ»¯ºóµÄÌåÏÖÐÎʽÊÇÕâÑùµÄ¡£¡£¡£

918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


ÈôÊÇÔÚxxx²Ù×÷Àú³ÌÖн«NativeArrayµÄÀàÐ͸ÄÄð³ÉÁËVarArray£¬£¬£¬£¬²¢ÇÒJITµÄÓÅ»¯Àú³Ì²¢Ã»Óмì²âµ½ÕâÖÖת±äµÄ»°£¬£¬£¬£¬2.3023e-320¾Í»á±»¿´³ÉfloatÊý¾Ý´æ·Å½øÈëVarArrayµÄÔªËØÖУ¬£¬£¬£¬ÓÉÓÚÕâ¸öÀú³ÌÖÐÊý×éµÄת±äÊÇʼÁÏδ¼°µÄ£¬£¬£¬£¬ÒÔÊÇ2.3023e-320²¢Ã»ÓÐͨ¹ýÓë0xfffc000000000000Òì»ò¶øÄð³ÉÒ»¸ö¿ÉÒÔ±»VarArrayʶ±ðµÄfloat£¬£¬£¬£¬ÒÔÊÇVarArray¹¤¾ßÔÚ¶ÁÈ¡¸ÃÔªËØÊ±»á½«Æäµ±³ÉÒ»¸ö¹¤¾ßÀ´´¦Öóͷ£¡£¡£¡£


ΪÁËʵÏÖÊý×éµÄÀàÐÍ»ìÏý£¬£¬£¬£¬xxx²Ù×÷Ö÷Á÷µÄ˼Ð÷ÓÐÁ½ÖÖ£¬£¬£¬£¬Ò»ÖÖÊÇͨ¹ýûÓмì²âµÄ»Øµ÷À´ÐÞ¸ÄÊý×éµÄÀàÐÍ£¬£¬£¬£¬µÚ¶þÖÖÊÇͨ¹ýºÏÀíµÄº¯ÊýÀ´ÐÞ¸ÄÊý×éµÄÀàÐÍ¡£¡£¡£ÏÂÃæÍ¨¹ýһЩʵÀý¾ÙÐмòÒªÆÊÎö¡£¡£¡£


2.1 ˼Ð÷Ò»£ºÍ¨¹ý»Øµ÷ÐÞ¸ÄÊý×éÀàÐÍ


ÏÈÀ´¿´Ò»¸ö¼òÆÓµÄÀý×Ó£¬£¬£¬£¬Í¨¹ý»Øµ÷ÐÞ¸ÄÊý×éÀàÐÍ¡£¡£¡£

918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


funcµÄJITÖ÷ҪƬ¶ÏÈçÏ£º


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


ƾ֤ÉÏÊö´úÂ룬£¬£¬£¬¿ÉÒÔ¿´µ½call raxÖ®ºó²¢Ã»ÓÐÑéÖ¤Êý×éaÊÇ·ñÕýµ±¾ÍÖ±½Ó¾ÙÐÐÁ˸³Öµ¡£¡£¡£ÄÇôÔõÑù¸Ä±äÊý×éaµÄÀàÐÍÄØ£¿£¿£¿£¿£¿£¿£¿ÎÒÃÇÀ´¿´×îºóÒ»´Î¶ÔfuncµÄŲÓᣡ£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


Îó²î¾ç±¾½«Ò»¸ö¹¤¾ßÖ±½Ó¸³Öµ¸øÁ˲ÎÊýc£¬£¬£¬£¬²¢ÇÒÔÚÕâ¸ö¹¤¾ßÉϹÒÁËÒ»¸övalueOf»Øµ÷£¬£¬£¬£¬cÒª¸³Öµ¸øtypedÊý×éb£¬£¬£¬£¬¶øbÖеÄÔªËØÖ»ÄÜÊÇUint32ÀàÐÍ£¬£¬£¬£¬ÒÔÊÇJIT»á¶Ô²ÎÊýc¾ÙÐÐÒ»¸öת»»£¨Óõ½ToInt32£©£¬£¬£¬£¬Õâ»á´¥·¢cµÄvalueOf»Øµ÷£¬£¬£¬£¬Ôڻص÷º¯ÊýÖÐͨ¹ýa[0]={}¸øÊý×éa¸³Öµ£¬£¬£¬£¬Õâ»á½«aÓÉNativeFloatArrayÄð³ÉVarArray£¬£¬£¬£¬´ËºóÐø´úÂëÓÉÓÚûÓмì²éaÊý×é¸Ä±äÒÔÊǼÌÐø½«Æä¿´³ÉNativeFloatArray¸³ÖµÔì³ÉÁËÀàÐÍ»ìÏý¡£¡£¡£


²¹¶¡×ÓÅ®ÂëÈçÏ¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


Ò»Ñùƽ³£À´Ëµ£¬£¬£¬£¬ChakraÒýÇæÔÚ¶ÔJITÖеĻص÷¾ÙÐÐÓÅ»¯Ê±»á˼Á¿Ò»¸ö½Ð×öImplicitCallFlagsµÄ±ê¼Ç룬£¬£¬£¬Í¨¹ýÕâ¸ö±ê¼Ç룬£¬£¬£¬¾Í¿ÉÒÔ¼ì²âÓû§º¯ÊýÊÇ·ñ¿ÉÄܱ»Å²Ó㬣¬£¬£¬ÈôÊÇÊǵϰ¾Í»áÆô¶¯bailout»ò¾ÙÐÐÏà¹Ø¼ì²â¡£¡£¡£¿ÉÊÇÕâÖÖ»úÖÆ±£´æÒ»Ð©ÎÊÌ⣬£¬£¬£¬ºÃ±ÈImplicitCallFlags±ê¼Çλ¾¿¾¹ÔÚʲôλÖûᱻÖÃ룬£¬£¬£¬ËüÊÇ·ñÄܱ£»£»£»£»£»£»¤ËùÓб£´æ»Øµ÷º¯ÊýµÄλÖã¿£¿£¿£¿£¿£¿£¿


Ò»¸öµä·¶µÄÀý×Ó£ºCVE-2017-11802


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


Õâ¸öÎó²î½ÏÁ¿¼òÆÓ£¬£¬£¬£¬±£´æÓÚRegexHelper::StringReplaceº¯ÊýÖУ¬£¬£¬£¬regexpµÄreplaceÒªÁ죬£¬£¬£¬¿ÉÒÔ½ç˵һ¸ö»Øµ÷º¯Êý£¬£¬£¬£¬¿ÉÊÇÔÚ×ÅʵÏÖÖв¢Ã»ÓжԻص÷º¯Êý¾ÙÐб£»£»£»£»£»£»¤£¬£¬£¬£¬Ò²¾ÍÊÇ˵¿ÉÒÔÖ±½ÓÔÚregexpµÄreplaceÒªÁìÖÐÐÞ¸ÄÊý×éÀàÐͶø²»±»JIT¼ì²âµ½¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


¸ÃÎó²îµÄ²¹¶¡Ò²½ÏÁ¿¼òÆÓ£¬£¬£¬£¬Í¨¹ý¶ÔÁ½´¦Å²Óûص÷µÄλÖÃÌí¼ÓExecuteImplicitCallÑéÖ¤£¬£¬£¬£¬¾Í¿ÉÒÔÐÞ²¹¸ÃÎó²î¡£¡£¡£Õâ¸ö²¹¶¡Í¬Ê±ÐÞ²¹ÁËÒ»´¦Î»ÓÚJavascriptArray::ArraySpeciesCreateÖеÄÓÉÓÚ½¨Éèй¤¾ß¶øµ¼ÖµĻص÷¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


ÕâÖÖ»úÖÆÔÚʵÏÖºÍÓÅ»¯Àú³ÌÖÐÓÐûÓÐ覴ÃÄØ£¿£¿£¿£¿£¿£¿£¿ÏÂÃæÀ´¿´ÁíÒ»¸öÀý×ÓCVE-2018-0840¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


ÕâÊÇÒ»¸öÖ±½Ó¶ÔExecuteImplicitCallº¯Êý¾ÙÐжԿ¹µÄÎó²î£¬£¬£¬£¬ÆäÎÊÌâ×Ô¼ºÔÚÓÚExecuteImplicitCallº¯ÊýµÄʵÏÖ£¬£¬£¬£¬Æä´úÂëÆ¬¶ÏÈçÏ¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


º¯ÊýÊ×ÏÈ»áÖ´ÐÐimplicitCallÈ»ºó²Å»á¸üÐÂImplicitCallFlags£¬£¬£¬£¬´¿´â´Óº¯Êý×Ô¼ºÀ´Ë¼Á¿ËƺõûʲôÎÊÌ⣬£¬£¬£¬¿ÉÊÇÕâÄÚÀïºöÂÔÁËÒ»¸ö¿ÉÄܾÍÊǻص÷ÔÚÖ´ÐÐÀú³ÌÖÐÈôÊÇ·ºÆðÁËÒ»¸öÒì³£¸ÃÔõô´¦Öóͷ££¬£¬£¬£¬POCÖеÄtypeofʵÏÖλÓÚJavascriptOperators::TypeofElemº¯ÊýÖУ¬£¬£¬£¬ºÍÎó²îÓйصĴúÂëÈçÏ¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


»Øµ÷»áͨ¹ýExecuteImplicitCallº¯Êý¾ÙÐÐŲÓ㬣¬£¬£¬¿ÉÊǻص÷º¯Êý»á´¥·¢Ò»¸öÒì³££¬£¬£¬£¬¸ÃÒì³£»£»£»£»£»£»á±»TypeofElem²¶»ñ£¬£¬£¬£¬Ò²¾ÍÊÇ˵ExecuteImplicitCallº¯ÊýÖиüÐÂImplicitCallFlagsµÄ²Ù×÷±»Ìø¹ýÁË£¬£¬£¬£¬ÓÉÓÚ±ê¼ÇλûÓб»¸üУ¬£¬£¬£¬ÒÔÊÇÓÅ»¯Àú³ÌÖеÄÏìÓ¦ÅÅ´í»úÖÆÒ²¾ÍûÓб»ÌìÉú£¬£¬£¬£¬×îÖÕµ¼ÖÂÁËÎó²îµÄ±¬·¢¡£¡£¡£


ÁíÍâÒ»¸öÎÊÌâÊÇCVE-2018-8556£¬£¬£¬£¬Í¨¹ý²¹¶¡ÐÅÏ¢¿ÉÒÔÖªµÀÎó²î±£´æÓÚGlobOptBailOut.cppµÄMayNeedBailOnImplicitCallº¯ÊýÖУ¬£¬£¬£¬´ÓÃû×Ö¿ÉÒÔÍÆ²â£¬£¬£¬£¬Õâ¸öº¯ÊýÖ÷ÒªÈÏÕæÅжÏJITÓÅ»¯Àú³ÌÖÐÊÇ·ñ¶ÔImplicitCallÌìÉúbailout´úÂë¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


Ôڸú¯Êý¶Ô¹¤¾ßµÄlengthÊôÐÔ¾ÙÐлñÈ¡µÄ²Ù×÷ÖУ¬£¬£¬£¬ÅжϷµ»ØÖµµÄÂß¼­·ºÆðÁËÎÊÌâ¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


´ÓÂß¼­ÉÏ¿´£¬£¬£¬£¬stringºÍÖª×ãIsAnyArray²¢ÇÒ²»¼´ÊÇObjectWithArrayµÄ¹¤¾ß¶¼ÊÇ¿ÉÒÔͨ¹ýÑéÖ¤µÄ£¬£¬£¬£¬Ò²¾ÍÊÇ˵typedarrayÒ²ÊÇÖª×ãÌõ¼þµÄ¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾

918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


ÈôÊÇÒª¸ø¹¤¾ß»ñÈ¡lengthµÄ²Ù×÷¼Ó»Øµ÷»òÕß¹ýÂ˲Ù×÷£¬£¬£¬£¬¹¤¾ßµÄlengthÊôÐÔµÄconfigurableÌØÕ÷±ØÐèΪtrue£¬£¬£¬£¬stringºÍarrayµÄlength¶¼ÇкÏÕâ¸ö¼Ù¶¨£¬£¬£¬£¬¿ÉÊÇtypedarrayÈ´ÊǸöÆÆÀý£¬£¬£¬£¬ÒÔÊÇ¿ÉÒÔͨ¹ý¸øtypedarrayµÄlengthÊôÐԼӻص÷µÄ²Ù×÷£¬£¬£¬£¬È¥Ö´ÐÐÓû§½ç˵µÄ´úÂëÀ´´¥·¢ÀàÐÍ»ìÏýÎó²î¡£¡£¡£


2.2 ˼Ð÷¶þ£ºÍ¨¹ýºÏÀíµÄº¯ÊýŲÓÃÐÞ¸ÄÊý×éÀàÐÍ


½ÓÏÂÀ´¿´µÚ¶þÖÖ˼Ð÷£¬£¬£¬£¬Í¨¹ýºÏÀíº¯ÊýŲÓÃÀ´´¥·¢Êý×éÀàÐ͸ıä¡£¡£¡£ÔÚһЩº¯Êý´¦Öóͷ£ÖУ¬£¬£¬£¬ÓÉÓÚ¹¦Ð§Ôµ¹ÊÔ­ÓÉ»áŲÓÃToVarArrayº¯Êý¶ÔÊý×éÀàÐ;ÙÐиıä¡£¡£¡£


ÏÂÃæ¾ÙÀý˵Ã÷¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


optº¯ÊýµÄJITÓÅ»¯´úÂëÈçÏ£º


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


¿ÉÒÔ¿´µ½£¬£¬£¬£¬ÔÚcall raxÖ®ºó²¢Ã»ÓоÙÐÐÊý×éÀàÐ͵ļì²â¾ÍÖ±½Ó¸³ÖµÁË£¬£¬£¬£¬ÄÇôÕâ¸öcallÖо¿¾¹±¬·¢ÁËÊ²Ã´ÄØ£¿£¿£¿£¿£¿£¿£¿Õâ¸öcallŲÓÃÁËJavascriptOperators::OP_InitProtoº¯ÊýÀ´³õʼ»¯proto£¬£¬£¬£¬ÔÚ×îºóÒ»´ÎoptŲÓÃʱ£¬£¬£¬£¬½«array¿´³Éproto¸øÁËÊôÐÔÁ´£¬£¬£¬£¬ÔÚ¶ÔÊôÐÔÁ´¸³ÖµÊ±£¬£¬£¬£¬ÈôÊǸ³Öµ²ÎÊýÊÇÒ»¸öNativeÊý×éµÄ»°»á½«Æäת»»ÎªVarArray£¨Å²ÓÃÁËToVarArrayº¯Êý£©¡£¡£¡£ÆäŲÓú¯ÊýÕ»ÈçÏ¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


´ËʱÊý×éµÄÀàÐÍÒѾ­±¬·¢ÁË¸Ä±ä¶øJIT²¢Ã»Óмì²éµ½ÕâÒ»µãÒÔÊDZ¬·¢ÁËÎó²î¡£¡£¡£


ÔÙÀ´¿´Ò»¸ö½ÏÎªÖØ´óµãµÄÀý×ÓCVE-2018-0835¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


¸ÃÎó²î±£´æÓÚJavascriptArray::ReverseHelperº¯ÊýÖУ¬£¬£¬£¬º¯Êý»áŲÓÃJavascriptArray::FillFromPrototypes£¬£¬£¬£¬¸Ãº¯Êýͨ¹ý±éÀúprototypeÀ´Ìî³äarray¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


ÔÚ³ÌÐòÖУ¬£¬£¬£¬º¯ÊýÈ·±£prototypeÖеÄarray²»¿ÉÊÇNativeArray¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


Ò²¾ÍÊÇ˵£¬£¬£¬£¬ÈôÊÇprototypeÊÇNativeArrayÊý×éÔò»á±»³ÌÐòת»»ÎªVarArray£¬£¬£¬£¬ÈôÊÇÄܹ»Ê¹Ò»¸öÊý×éµÄprototypeΪNativeArray£¬£¬£¬£¬¾Í¿ÉÒÔͨ¹ýÊý×éµÄReverseÒªÁ콫ÆäprototypeµÄNativeArrayת»»ÎªVarArray¡£¡£¡£²»¹ýÕâÀïÉÐÓÐÒ»¸öÎÊÌâ¾ÍÊÇÔõÑùÈ·±£prototypeÊÇNativeArray£¬£¬£¬£¬Ò»Ñùƽ³£ÇéÐÎÏÂÈôÊÇÒ»¸öÊý×é±»¿´³Éprototype£¬£¬£¬£¬ÔòËü»á±»×ª»¯ÎªVarArray¡£¡£¡£


ÔÚJavascriptArray::EntrySortÖб£´æÈçÏ´úÂë¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


ÈôÊÇarrÊÇÒ»¸öNativeArray£¬£¬£¬£¬ËüÊ×ÏÈ»áÄð³ÉÒ»¸öVarArrayÖ´ÐÐsort»Øµ÷£¬£¬£¬£¬ÔÙ±ä»ØNativeArray£¬£¬£¬£¬ÈôÊÇÄܹ»Ôڻص÷Öн«Õâ¸öarr¸³¸øprototype£¬£¬£¬£¬Ö®ºóËüµÄÀàÐÍÓÖ»á±ä»ØÀ´£¬£¬£¬£¬ÕâÑù¾Í¿ÉÒÔ»ñµÃÒ»¸öÀàÐÍ»ìÏýÎó²î¡£¡£¡£


2.3 ˼Ð÷Èý£ºMissingItem


CVE-2018-0953ͬÑùÒ²ÊÇͨ¹ýº¯ÊýŲÓÃÐÞ¸ÄÊý×éÀàÐÍ£¬£¬£¬£¬Õâ¸öÎó²îÌØÊâÖ®´¦ÔÚÓÚÒý³öÁËÁíÒ»¸ö¹Ø×¢µã£¬£¬£¬£¬¼´Êý×éµÄMissingItem¡£¡£¡£MissingItemÊÇÒ»¸öÊýÖµ£¬£¬£¬£¬ÔÚ64λ³ÌÐòÉϼ´ÊÇ0x8000000280000002¡£¡£¡£ChakraÒýÇæÔÚÊý×齨ÉèµÄʱ¼ä»áʹÓÃÕâ¸öÖµ¶ÔÊý×éÔªËØ¾ÙÐгõʼ»¯£¬£¬£¬£¬ÌåÏÖÊý×éÖиÃÔªËØ»¹Î´¾ÙÐи³Öµ£¬£¬£¬£¬ÁíÍâÊý×黹»á±£´æÒ»¸ö±ê¼Ç루NoMissingValues£©À´±ê¼Ç´ËÊý×éÊÇ·ñÓÐδ±»¸³ÖµµÄÔªËØ¡£¡£¡£


ÏÈ¿´¿´ÏÂÃæÕâ¶Î´úÂë¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


µ±Ö´ÐÐÊý×éµÄ¸³Öµ²Ù×÷£¬£¬£¬£¬Å²ÓÃÁËNativeArrayµÄSetItemº¯Êý£¬£¬£¬£¬SetItemº¯ÊýʵÏÖÈçÏ¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


µ±¸øNativeArray¸³ÖµÊ±£¬£¬£¬£¬ÈôÊÇÕâ¸öÖµ¼´ÊÇMissingItem£¬£¬£¬£¬¿ÉÒÔ½«NativeArrayת»¯ÎªVarArray¡£¡£¡£ÓÅ»¯Âß¼­¼ÙÉè¶ÔÊý×é¾ÙÐи³ÖµÊÇÒ»¸öºÜÇå¾²µÄ²Ù×÷£¬£¬£¬£¬Ö»Òª´«Èë²ÎÊý²»ÊÇÒ»¸ö¹¤¾ßÄÇô¾Í²»»á¸Ä±äÊý×éÀàÐÍ£¬£¬£¬£¬¿ÉÊDz¢Ã»ÓÐ˼Á¿µ½ÈôÊǸ³ÖµµÄÖµ¼´ÊÇMissingItemµÄ»°»áÒýÆðÊý×éÀàÐ͵Äת±ä£¬£¬£¬£¬ÕýÊÇÕâÖÖÊèºöµ¼ÖÂÁËÎó²îµÄ±¬·¢¡£¡£¡£


Õâ¸öÎó²î×Ô¼ººÜÊǺÃÃ÷È·£¬£¬£¬£¬¿ÉÊÇMissingItem×Ô¼ºÓÖÒý³öÁËÒ»Á¬´®µÄÎÊÌâ¡£¡£¡£¸ÃÎó²îµÄ²¹¶¡³ÌÐòÐÞ²¹ÁËͨ¹ýOP_SetElementIÀ´Å²ÓÃSetItemµÄÇéÐΣ¬£¬£¬£¬¿ÉÊÇÕâÑùÐÞ²¹Ô¶Ô¶²»·ó£¬£¬£¬£¬ÓÉÓڶԸú¯ÊýŲÓõÄλÖÃ×ÅʵºÜÊǶ࣬£¬£¬£¬ÓÚÊÇÕÒÎó²îµÄ˼Ð÷Äð³ÉÁËѰÕÒΪNativeArray¸³ÖµµÄÖÖÖÖ·¾¶µÄÎÊÌâ¡£¡£¡£


CVE-2018-0953µÄÎó²î·¢Ã÷ÕßlokihardtÔÚ²¹¶¡ÐÞ²¹ºóÓÖÌá³öÁ½ÖÖ˼Ð÷À´Èƹý²¹¶¡£¬£¬£¬£¬µÚÒ»¸öÊÇͨ¹ýarraypushÀ´Å²ÓÃSetItem¡£¡£¡£


´¥·¢Îó²î´úÂëÈçÏ£º


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


ÓÉÓÚͨ¹ýpush¶ÔÊý×é¾ÙÐвåÈëµÄ²Ù×÷»áŲÓÃSetItem£¬£¬£¬£¬ÒÔÊÇÊý×é¸Ä±äµÄÇéÐÎÈÔÈ»»á±£´æ¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


µÚ¶þ¸ö˼Ð÷ÊÇÏÈÖ±½ÓÐÞ¸ÄÊý×éµÄÔªËØ£¬£¬£¬£¬ÔÙͨ¹ýcancatÀ´ÐÞ¸ÄÊý×éÀàÐÍ¡£¡£¡£Îó²î´¥·¢´úÂëÈçÏ£º


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


POCÊ×ÏÈͨ¹ýsetÐÞ¸ÄÁËÊý×éÖÐÔªËØµÄÖµ¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


¶ÔÓ¦µÄJIT´úÂëÊÇÕâÑùµÄ¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


ÔÚÐÞ¸ÄÁËÊý×éÔªËØºó£¬£¬£¬£¬´´Á¢ÁËÒ»¸öÓÐMissingItem¿ÉÊÇHasNoMissingValuesµÄarray¡£¡£¡£


½Óמ籾ŲÓÃÁËtriggerº¯Êý£¬£¬£¬£¬ÓÉÓÚÊý×éµÄHasNoMissingValues±ê¼ÇÎ»ÎªÕæ£¬£¬£¬£¬ÏÂͼ´úÂëÖеÄÌõ¼þÊÇÖª×ãµÄ¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


ÓÉÓÚÊý×éÓÐÁËMissingItem£¬£¬£¬£¬ÒÔÊÇ¿ÉÒÔ¾ÙÐе½ÈçÏ·ÖÖ§¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


InternalFillFromPrototypeº¯Êý»á¶ÔbuggyÊý×éprototypeÁ´ÉÏËùÓй¤¾ßŲÓÃEnsureNonNativeArray£¬£¬£¬£¬Ò²¾ÍÊÇ˵»á¶ÔarrŲÓÃEnsureNonNativeArray£¬£¬£¬£¬ÕâÑù¾Í¿ÉÒÔÐÞ¸ÄÆäÊý×éÀàÐÍ£¬£¬£¬£¬¿ÉÊÇJITÒýÇæ²¢²»ÖªµÀarrÀàÐÍÒѾ­¸Ä±ä£¬£¬£¬£¬ÒÔÊǻᵼÖÂÀàÐÍ»ìÏý¡£¡£¡£

Õë¶Ô´ËÎÊÌ⣬£¬£¬£¬ChakraµÄÊÂÇéÖ°Ô±×îÏÈ´ó¹æÄ£µÄ¼ì²éNativeArrayµÄinput£¬£¬£¬£¬ÔÚLowerStElemC¡¢


GenerateProfiledNewScObjArrayFastPath¡¢GenerateHelperToArrayPopFastPathµÈÖî¶àº¯ÊýÉÏÌí¼ÓÁËMissItemµÄ¼ì²â£¨ÓÉÓÚÐÞ²¹º¯Êý½Ï¶à£¬£¬£¬£¬ÕâÀï¾Í·×Æçһö¾ÙÁË£¬£¬£¬£¬ÏêÇéÇë²Î¿¼µØµãhttps://github.com/Microsoft/ChakraCore/commit/91bb6d68bfe0455cde08aaa5fbc3f2e4f6cc9d04£©¡£¡£¡£


¿ÉÊÇ£¬£¬£¬£¬Í¨¹ýÈçÏ´úÂëŲÓõÄOP_Memsetº¯Êý²¢Ã»ÓжÔvalue¾ÙÐмì²é£¬£¬£¬£¬ÈÔÈ»¿ÉÒÔÓÃÀ´½á¹¹ÓµÓÐMissingItem¿ÉÊÇHasNoMissingValuesµÄarray£¬£¬£¬£¬²¢Í¨¹ýconcatÀ´»ñµÃÒ»¸öÀàÐÍ»ìÏýÎó²î¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


ÖµµÃÒ»ÌáµÄÊÇ£¬£¬£¬£¬ÔÚ11ÔµIJ¹¶¡ÖÐChakraÖ±½Ó¶ÔconcatÒªÁì×öÁËÑÏ¿áµÄ´¦Öóͷ££¬£¬£¬£¬´ÓÇéÐÎÉÏÍÆ²âÓ¦¸ÃÊÇÕÒµ½ÁËеÄÒªÁìÀ´½«MissingItemдÈëarray£¬£¬£¬£¬µ«ÓÉÓÚÍøÉÏûÕÒµ½ÏìÓ¦µÄÐÅÏ¢£¬£¬£¬£¬ÔÙ¼ÓÉϲ¹¶¡²¢Ã»ÓжԽ«ÖµÐ´ÈëarrayµÄ´úÂë¾ÙÐÐÐÞ²¹£¬£¬£¬£¬·´¶øÏÞÖÆÁËconcat£¬£¬£¬£¬ÒÔÊÇÒ²ÎÞ·¨ÅжÏÏêϸÇéÐΡ£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


2.4 ˼Ð÷ËÄ£º½«Êý×éαװ³É¹¤¾ß


×îºóÒ»ÖÖ˼Ð÷£¬£¬£¬£¬Í¨¹ýÒÉ»óChakraÒýÇæ£¬£¬£¬£¬Ê¹ÆäÔÚÌìÉúJIT´úÂëÀú³ÌÖйýʧµÄ½«NativeArray¿´³ÉÆäËû¹¤¾ß£¬£¬£¬£¬ÒÔÖÁÓÚûÓÐÔÚÊʵ±µÄλÖÃÌí¼Ó¼ì²é´úÂë¡£¡£¡£


¹ûÕæµÄÀý×ÓÊÇCVE-2018-8466¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


ChakraʹÓÃJavascriptArray::GetArrayForArrayOrObjectWithArrayÀ´ÅжϹ¤¾ßÊÇ·ñÊÇarray£¬£¬£¬£¬ÆäÂß¼­ÈçÏÂËùʾ¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


ͨ¹ýCrossSite classÀ´wrapÒ»¸ö¹¤¾ßµÄʱ¼ä»áÌæ»»¸Ã¹¤¾ßµÄÐé±í£¬£¬£¬£¬ÒÔÊDZ»wrappingµÄÊý×齫²»»á±»Ê¶±ðΪÊý×飬£¬£¬£¬Õ⽫µ¼ÖÂÎÞ·¨ÔÚ׼ȷµÄµØ·½ÌìÉú¶ÔÊý×éÀàÐ͵ļì²é²¢±¬·¢ÀàÐÍ»ìÏýÎó²î¡£¡£¡£


²¹¶¡³ýÁËÑéÖ¤Ðé±íÊÇ·ñÊÇarray¹¤¾ßÖ®Í⣬£¬£¬£¬»¹¼ì²éÁ˹¤¾ßÊÇ·ñÊDZ»CrossSite wrapµÄÊý×é¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


ÁíÒ»¸öÀý×ÓÊÇCVE-2018-8542£¬£¬£¬£¬Æä²¹¶¡ÔÚValueType::MergeWithObjectÖС£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾


¸Ãº¯ÊýÖ÷ÒªÓÃÓںϲ¢Á½¸ö¹¤¾ß£¬£¬£¬£¬¿ÉÒÔ¿´µ½²¹¶¡Ìí¼ÓÁËÑéÖ¤£¬£¬£¬£¬ÓÃÓÚÈ·¶¨Á½¸ö¹¤¾ßÖÐÊÇ·ñÓÐÊý×飬£¬£¬£¬ÔÙÊÓ²ìÒ»ÏÂû´ò¹ý²¹¶¡µÄÎÊÌâ´úÂ룬£¬£¬£¬ÈôÊÇÁ½¸ö¹¤¾ß¶¼²»ÊÇUninitializedObject£¬£¬£¬£¬ÔòºÏ²¢ÎªObject¹¤¾ß£¬£¬£¬£¬´óÖ¿ÉÒÔ»ñÖªÎó²î±¬·¢µÄÔµ¹ÊÔ­ÓÉ£¬£¬£¬£¬ÔÚÖ´Ðе½Õâ¾äµÄʱ¼äÈôÊÇÁ½¸ö¹¤¾ßÖÐÓÐÒ»¸öÊÇÊý×飬£¬£¬£¬Ôںϲ¢Ê±Êý×é»á±»¿´³É¹¤¾ßÀ´´¦Öóͷ££¬£¬£¬£¬ÓÅ»¯Àú³ÌÖÐÒýÇæ°ÑºÏ²¢µÄÊý×é¿´³ÉÁ˹¤¾ß£¬£¬£¬£¬ÄÇô¶ÔÊý×éÀàÐÍÊÇ·ñ¸Ä±äµÄ¼ì²âËäÈ»¾Í²»±»ÐèÒª£¬£¬£¬£¬ÓÚÊÇ×îÖÕµ¼ÖÂÁËÀàÐÍ»ìÏý¡£¡£¡£


918²©ÌìÌÃ(ÖйúÓÎ)×îйٷ½ÍøÕ¾

3¡¢×Ü ½á

ÔÚÒÑÍùÒ»Äê×óÓÒ£¬£¬£¬£¬JIT±àÒëÓÅ»¯Àú³ÌÖеÄÀàÐÍ»ìÏýÊÇChakraÎó²îÍÚ¾ò·½ÃæµÄÒ»¸öÖ÷Òª¹Ø×¢µã¡£¡£¡£´ÓÔçÆÚµÄʹÓÃδ±»±£»£»£»£»£»£»¤µÄ»ØÐ­µ÷Õý³£º¯ÊýÀ´ÐÞ¸ÄÊý×éÀàÐÍ£¬£¬£¬£¬ÔÙµ½Ñ°ÕÒÑéÖ¤Àú³ÌÖеÄÂß¼­ÎÊÌ⣬£¬£¬£¬Ê¹ÓÃÊý×éµÄMissingItemÌØÕ÷£¬£¬£¬£¬½«Êý×éαװ³ÉÆäËûÀàÐ͹¤¾ß˼Ð÷£¬£¬£¬£¬ÎÒÃÇ¿ÉÒÔ¿´µ½Ëæ×ÅÑо¿Õß¶ÔChakraÒýÇæµÄÉîÈëÑо¿£¬£¬£¬£¬Îó²î±¬·¢µÄλÖÃÒѾ­´Ó¼òÆÓµÄ¹¤¾ßÒªÁìÖð²½ÏòJITÓÅ»¯´úÂëÌìÉúÀú³ÌÖб¬·¢µÄÖÖÖÖÂß¼­ºÍÅжÏÎÊÌ⿿££¬£¬£¬£¬Îó²îÍÚ¾òµÄÃż÷Ò²ÓÐÁËÏÔÖøµÄÌáÉý¡£¡£¡£

918²©ÌìÌÃÆð¾¢·ÀÓùʵÑéÊÒ£¨ADLab£©

ADLab½¨ÉèÓÚ1999Ä꣬£¬£¬£¬ÊÇÖйúÇå¾²ÐÐÒµ×îÔ罨ÉèµÄ¹¥·ÀÊÖÒÕÑо¿ÊµÑéÊÒÖ®Ò»£¬£¬£¬£¬Î¢ÈíMAPPÍýÏë½¹µã³ÉÔ±£¬£¬£¬£¬¡°ºÚȸ¹¥»÷¡±¿´·¨Ê×ÍÆÕß¡£¡£¡£×èÖ¹ÏÖÔÚ£¬£¬£¬£¬ADLabÒÑͨ¹ýCVEÀÛ¼ÆÐû²¼Çå¾²Îó²î½ü1000¸ö£¬£¬£¬£¬Í¨¹ý CNVD/CNNVDÀÛ¼ÆÐû²¼Çå¾²Îó²î½ü500¸ö£¬£¬£¬£¬Ò»Á¬¼á³Ö¹ú¼ÊÍøÂçÇå¾²ÁìÓòÒ»Á÷Ë®×¼¡£¡£¡£ÊµÑéÊÒÑо¿Æ«Ïòº­¸Ç²Ù×÷ϵͳÓëÓ¦ÓÃϵͳÇå¾²Ñо¿¡¢Òƶ¯ÖÇÄÜÖÕ¶ËÇå¾²Ñо¿¡¢ÎïÁªÍøÖÇÄÜ×°±¸Çå¾²Ñо¿¡¢WebÇå¾²Ñо¿¡¢¹¤¿ØÏµÍ³Çå¾²Ñо¿¡¢ÔÆÇå¾²Ñо¿¡£¡£¡£Ñо¿Ð§¹ûÓ¦ÓÃÓÚ²úÆ·½¹µãÊÖÒÕÑо¿¡¢¹ú¼ÒÖØµã¿Æ¼¼ÏîÄ¿¹¥¹Ø¡¢×¨ÒµÇ徲ЧÀ͵È¡£¡£¡£