ChakraÒýÇæÖÐJIT±àÒëÓÅ»¯Àú³ÌÖеÄÊý×éÀàÐÍ»ìÏýÎó²îÆÊÎö
Ðû²¼Ê±¼ä 2018-12-18ChakraÊÇÒ»¸öÓÉ΢ÈíΪMicrosoft Edgeä¯ÀÀÆ÷¿ª·¢µÄJavaScriptÒýÇæ¡£¡£¡£ËüÔÚÒ»¸ö×ÔÁ¦µÄCPU½¹µãÉϼ´Ê±±àÒë¾ç±¾£¬£¬£¬£¬Óëä¯ÀÀÆ÷²¢ÐС£¡£¡£±¾ÎÄÖ÷Òª¶ÔChakraÒýÇæÖÐJIT±àÒëÓÅ»¯Àú³ÌÖеÄÊý×éÀàÐÍ»ìÏýÎó²î¾ÙÐÐÆÊÎö¡£¡£¡£
JavaScriptÒýÇæµÄÐÔÄܶÔÕû¸öä¯ÀÀÆ÷µÄÓ°ÏìÖÁ¹ØÖ÷Òª£¬£¬£¬£¬ JIT±àÒëÓÅ»¯ÊÇΪÁËÌá¸ßChakraÒýÇæÐÔÄÜ¡£¡£¡£µ±ÔÚÑ»·Óï¾äÖÐÖØ¸´Ö´ÐÐͳһ¶Î¾ç±¾´úÂëʱ£¬£¬£¬£¬ÈôÊÇÚ¹ÊÍÖØÊÓ¸´Ö´ÐÐÏà¹ØµÄ×Ö½ÚÂ룬£¬£¬£¬Ð§ÂÊ»áºÜµÍ¡£¡£¡£JIT¿ÉÒÔ½«Ô´´úÂëÖ±½ÓÌìÉúÆøÐµÖ¸Á£¬£¬£¬ÔÚÏÂÒ»´ÎÖ´ÐÐʱֱ½ÓÖ´ÐлúеָÁî¡£¡£¡£ÔÚChakraÖÐÖ»Óе±Ä¿µÄº¯Êý»òÕßÑ»·Óï¾ä±»ÆµÈÔŲÓÃʱ²Å»áÆôÓÃJIT±àÒ룬£¬£¬£¬JIT±àÒëºóÌìÉúÁËÏìÓ¦µÄ»úеָÁ£¬£¬£¬ÏÂÒ»´ÎŲÓõ½Õâ¸öÓï¾ä»òÊǺ¯Êýʱ¾Í»áÖ±½ÓÖ´ÐлúеָÁî¡£¡£¡£
Ò»µ©JITÌìÉúÍê³É£¬£¬£¬£¬³ÌÐò¾Í¿ÉÒÔÖ±½ÓŲÓÃJITÌìÉúµÄ»úеָÁî¡£¡£¡£ÓÉÓÚJITÊÇÖ±½Ó±àÒëΪ»úеָÁîµÄ£¬£¬£¬£¬ÒÔÊÇÐèÒªÔ¤Ïȼٶ¨²Ù×÷Ä¿µÄµÄÀàÐÍ¡£¡£¡£ÈôÊDz»Öª×ãJITµÄ¼ÙÉèµÄ»°£¬£¬£¬£¬´ËJIT´úÂë¾Í²»¿ÉÖ´ÐУ¬£¬£¬£¬²»È»¾Í»á±¬·¢ÀàÐÍ»ìÏýµÄ¹ýʧ¡£¡£¡£Òò´ËJIT´úÂëÖÐÉè¼ÆÁËbailout¹¦Ð§£¬£¬£¬£¬Ò»µ©·¢Ã÷²»Öª×ã¼ÙÉè¾Í¾ÙÐÐbailout£¬£¬£¬£¬bailout»á·ÅÆúÖ´ÐÐJIT´úÂëת»ØÊ¹ÓÃÚ¹ÊÍÆ÷¼ÌÐøÖ´ÐÐ×Ö½ÚÂë¡£¡£¡£
2¡¢Êý×éÀàÐÍ»ìÏý˼Ð÷
ChakraÊý×é¿ÉÒÔ·ÖΪÈýÀ࣬£¬£¬£¬»®·ÖÊÇNativeIntArray¡¢NativeFloatArrayºÍVarArray¡£¡£¡£NativeIntArrayºÍNativeFloatArrayÊý×éת»¯³ÉVarArrayÊý×éÀú³ÌÖлὫÊý×éÖеÄÔÊý¾Ýͨ¹ýÒì»ò0xfffc000000000000ת»¯ÎªVarArrayÖеÄÊý¾Ý¡£¡£¡£Ò²¾ÍÊÇ˵VarArray»áͨ¹ýÊý×éÖÐÔªËØµÄ¸ßλÀ´ÅжÏÊý×éÖеÄÔªËØÊÇÊý¾ÝÕվɹ¤¾ß¡£¡£¡£
NativeIntArrayºÍNativeFloatArrayÖ®¼ä»ìÏýÒ»Ñùƽ³£²»¿É´øÀ´Çå¾²ÎÊÌ⣬£¬£¬£¬¿ÉÊǵ±Õâ¶þÕߺÍVarArray»ìÏýÖ®ºó¾Í»á·ºÆðÊý¾ÝºÍ¹¤¾ßÎÞ·¨Çø·ÖµÄÎÊÌâ¡£¡£¡£
ÏÈ¿´Ò»¶Î¼òÆÓ´úÂë¡£¡£¡£
Õâ¶Î´úÂëÔÚJITÓÅ»¯ºóµÄÌåÏÖÐÎʽÊÇÕâÑùµÄ¡£¡£¡£
ÈôÊÇÔÚxxx²Ù×÷Àú³ÌÖн«NativeArrayµÄÀàÐ͸ÄÄð³ÉÁËVarArray£¬£¬£¬£¬²¢ÇÒJITµÄÓÅ»¯Àú³Ì²¢Ã»Óмì²âµ½ÕâÖÖת±äµÄ»°£¬£¬£¬£¬2.3023e-320¾Í»á±»¿´³ÉfloatÊý¾Ý´æ·Å½øÈëVarArrayµÄÔªËØÖУ¬£¬£¬£¬ÓÉÓÚÕâ¸öÀú³ÌÖÐÊý×éµÄת±äÊÇʼÁÏδ¼°µÄ£¬£¬£¬£¬ÒÔÊÇ2.3023e-320²¢Ã»ÓÐͨ¹ýÓë0xfffc000000000000Òì»ò¶øÄð³ÉÒ»¸ö¿ÉÒÔ±»VarArrayʶ±ðµÄfloat£¬£¬£¬£¬ÒÔÊÇVarArray¹¤¾ßÔÚ¶ÁÈ¡¸ÃÔªËØÊ±»á½«Æäµ±³ÉÒ»¸ö¹¤¾ßÀ´´¦Öóͷ£¡£¡£¡£
ΪÁËʵÏÖÊý×éµÄÀàÐÍ»ìÏý£¬£¬£¬£¬xxx²Ù×÷Ö÷Á÷µÄ˼Ð÷ÓÐÁ½ÖÖ£¬£¬£¬£¬Ò»ÖÖÊÇͨ¹ýûÓмì²âµÄ»Øµ÷À´ÐÞ¸ÄÊý×éµÄÀàÐÍ£¬£¬£¬£¬µÚ¶þÖÖÊÇͨ¹ýºÏÀíµÄº¯ÊýÀ´ÐÞ¸ÄÊý×éµÄÀàÐÍ¡£¡£¡£ÏÂÃæÍ¨¹ýһЩʵÀý¾ÙÐмòÒªÆÊÎö¡£¡£¡£
2.1 ˼Ð÷Ò»£ºÍ¨¹ý»Øµ÷ÐÞ¸ÄÊý×éÀàÐÍ
ÏÈÀ´¿´Ò»¸ö¼òÆÓµÄÀý×Ó£¬£¬£¬£¬Í¨¹ý»Øµ÷ÐÞ¸ÄÊý×éÀàÐÍ¡£¡£¡£
funcµÄJITÖ÷ҪƬ¶ÏÈçÏ£º
ƾ֤ÉÏÊö´úÂ룬£¬£¬£¬¿ÉÒÔ¿´µ½call raxÖ®ºó²¢Ã»ÓÐÑéÖ¤Êý×éaÊÇ·ñÕýµ±¾ÍÖ±½Ó¾ÙÐÐÁ˸³Öµ¡£¡£¡£ÄÇôÔõÑù¸Ä±äÊý×éaµÄÀàÐÍÄØ£¿£¿£¿£¿£¿£¿£¿ÎÒÃÇÀ´¿´×îºóÒ»´Î¶ÔfuncµÄŲÓᣡ£¡£
Îó²î¾ç±¾½«Ò»¸ö¹¤¾ßÖ±½Ó¸³Öµ¸øÁ˲ÎÊýc£¬£¬£¬£¬²¢ÇÒÔÚÕâ¸ö¹¤¾ßÉϹÒÁËÒ»¸övalueOf»Øµ÷£¬£¬£¬£¬cÒª¸³Öµ¸øtypedÊý×éb£¬£¬£¬£¬¶øbÖеÄÔªËØÖ»ÄÜÊÇUint32ÀàÐÍ£¬£¬£¬£¬ÒÔÊÇJIT»á¶Ô²ÎÊýc¾ÙÐÐÒ»¸öת»»£¨Óõ½ToInt32£©£¬£¬£¬£¬Õâ»á´¥·¢cµÄvalueOf»Øµ÷£¬£¬£¬£¬Ôڻص÷º¯ÊýÖÐͨ¹ýa[0]={}¸øÊý×éa¸³Öµ£¬£¬£¬£¬Õâ»á½«aÓÉNativeFloatArrayÄð³ÉVarArray£¬£¬£¬£¬´ËºóÐø´úÂëÓÉÓÚûÓмì²éaÊý×é¸Ä±äÒÔÊǼÌÐø½«Æä¿´³ÉNativeFloatArray¸³ÖµÔì³ÉÁËÀàÐÍ»ìÏý¡£¡£¡£
²¹¶¡×ÓÅ®ÂëÈçÏ¡£¡£¡£
Ò»Ñùƽ³£À´Ëµ£¬£¬£¬£¬ChakraÒýÇæÔÚ¶ÔJITÖеĻص÷¾ÙÐÐÓÅ»¯Ê±»á˼Á¿Ò»¸ö½Ð×öImplicitCallFlagsµÄ±ê¼Ç룬£¬£¬£¬Í¨¹ýÕâ¸ö±ê¼Ç룬£¬£¬£¬¾Í¿ÉÒÔ¼ì²âÓû§º¯ÊýÊÇ·ñ¿ÉÄܱ»Å²Ó㬣¬£¬£¬ÈôÊÇÊǵϰ¾Í»áÆô¶¯bailout»ò¾ÙÐÐÏà¹Ø¼ì²â¡£¡£¡£¿ÉÊÇÕâÖÖ»úÖÆ±£´æÒ»Ð©ÎÊÌ⣬£¬£¬£¬ºÃ±ÈImplicitCallFlags±ê¼Çλ¾¿¾¹ÔÚʲôλÖûᱻÖÃ룬£¬£¬£¬ËüÊÇ·ñÄܱ£»£»£»£»£»£»¤ËùÓб£´æ»Øµ÷º¯ÊýµÄλÖã¿£¿£¿£¿£¿£¿£¿
Ò»¸öµä·¶µÄÀý×Ó£ºCVE-2017-11802
Õâ¸öÎó²î½ÏÁ¿¼òÆÓ£¬£¬£¬£¬±£´æÓÚRegexHelper::StringReplaceº¯ÊýÖУ¬£¬£¬£¬regexpµÄreplaceÒªÁ죬£¬£¬£¬¿ÉÒÔ½ç˵һ¸ö»Øµ÷º¯Êý£¬£¬£¬£¬¿ÉÊÇÔÚ×ÅʵÏÖÖв¢Ã»ÓжԻص÷º¯Êý¾ÙÐб£»£»£»£»£»£»¤£¬£¬£¬£¬Ò²¾ÍÊÇ˵¿ÉÒÔÖ±½ÓÔÚregexpµÄreplaceÒªÁìÖÐÐÞ¸ÄÊý×éÀàÐͶø²»±»JIT¼ì²âµ½¡£¡£¡£
¸ÃÎó²îµÄ²¹¶¡Ò²½ÏÁ¿¼òÆÓ£¬£¬£¬£¬Í¨¹ý¶ÔÁ½´¦Å²Óûص÷µÄλÖÃÌí¼ÓExecuteImplicitCallÑéÖ¤£¬£¬£¬£¬¾Í¿ÉÒÔÐÞ²¹¸ÃÎó²î¡£¡£¡£Õâ¸ö²¹¶¡Í¬Ê±ÐÞ²¹ÁËÒ»´¦Î»ÓÚJavascriptArray::ArraySpeciesCreateÖеÄÓÉÓÚ½¨Éèй¤¾ß¶øµ¼ÖµĻص÷¡£¡£¡£
ÕâÖÖ»úÖÆÔÚʵÏÖºÍÓÅ»¯Àú³ÌÖÐÓÐûÓÐ覴ÃÄØ£¿£¿£¿£¿£¿£¿£¿ÏÂÃæÀ´¿´ÁíÒ»¸öÀý×ÓCVE-2018-0840¡£¡£¡£
ÕâÊÇÒ»¸öÖ±½Ó¶ÔExecuteImplicitCallº¯Êý¾ÙÐжԿ¹µÄÎó²î£¬£¬£¬£¬ÆäÎÊÌâ×Ô¼ºÔÚÓÚExecuteImplicitCallº¯ÊýµÄʵÏÖ£¬£¬£¬£¬Æä´úÂëÆ¬¶ÏÈçÏ¡£¡£¡£
º¯ÊýÊ×ÏÈ»áÖ´ÐÐimplicitCallÈ»ºó²Å»á¸üÐÂImplicitCallFlags£¬£¬£¬£¬´¿´â´Óº¯Êý×Ô¼ºÀ´Ë¼Á¿ËƺõûʲôÎÊÌ⣬£¬£¬£¬¿ÉÊÇÕâÄÚÀïºöÂÔÁËÒ»¸ö¿ÉÄܾÍÊǻص÷ÔÚÖ´ÐÐÀú³ÌÖÐÈôÊÇ·ºÆðÁËÒ»¸öÒì³£¸ÃÔõô´¦Öóͷ££¬£¬£¬£¬POCÖеÄtypeofʵÏÖλÓÚJavascriptOperators::TypeofElemº¯ÊýÖУ¬£¬£¬£¬ºÍÎó²îÓйصĴúÂëÈçÏ¡£¡£¡£
»Øµ÷»áͨ¹ýExecuteImplicitCallº¯Êý¾ÙÐÐŲÓ㬣¬£¬£¬¿ÉÊǻص÷º¯Êý»á´¥·¢Ò»¸öÒì³££¬£¬£¬£¬¸ÃÒì³£»£»£»£»£»£»á±»TypeofElem²¶»ñ£¬£¬£¬£¬Ò²¾ÍÊÇ˵ExecuteImplicitCallº¯ÊýÖиüÐÂImplicitCallFlagsµÄ²Ù×÷±»Ìø¹ýÁË£¬£¬£¬£¬ÓÉÓÚ±ê¼ÇλûÓб»¸üУ¬£¬£¬£¬ÒÔÊÇÓÅ»¯Àú³ÌÖеÄÏìÓ¦ÅÅ´í»úÖÆÒ²¾ÍûÓб»ÌìÉú£¬£¬£¬£¬×îÖÕµ¼ÖÂÁËÎó²îµÄ±¬·¢¡£¡£¡£
ÁíÍâÒ»¸öÎÊÌâÊÇCVE-2018-8556£¬£¬£¬£¬Í¨¹ý²¹¶¡ÐÅÏ¢¿ÉÒÔÖªµÀÎó²î±£´æÓÚGlobOptBailOut.cppµÄMayNeedBailOnImplicitCallº¯ÊýÖУ¬£¬£¬£¬´ÓÃû×Ö¿ÉÒÔÍÆ²â£¬£¬£¬£¬Õâ¸öº¯ÊýÖ÷ÒªÈÏÕæÅжÏJITÓÅ»¯Àú³ÌÖÐÊÇ·ñ¶ÔImplicitCallÌìÉúbailout´úÂë¡£¡£¡£
Ôڸú¯Êý¶Ô¹¤¾ßµÄlengthÊôÐÔ¾ÙÐлñÈ¡µÄ²Ù×÷ÖУ¬£¬£¬£¬ÅжϷµ»ØÖµµÄÂß¼·ºÆðÁËÎÊÌâ¡£¡£¡£
´ÓÂß¼ÉÏ¿´£¬£¬£¬£¬stringºÍÖª×ãIsAnyArray²¢ÇÒ²»¼´ÊÇObjectWithArrayµÄ¹¤¾ß¶¼ÊÇ¿ÉÒÔͨ¹ýÑéÖ¤µÄ£¬£¬£¬£¬Ò²¾ÍÊÇ˵typedarrayÒ²ÊÇÖª×ãÌõ¼þµÄ¡£¡£¡£
ÈôÊÇÒª¸ø¹¤¾ß»ñÈ¡lengthµÄ²Ù×÷¼Ó»Øµ÷»òÕß¹ýÂ˲Ù×÷£¬£¬£¬£¬¹¤¾ßµÄlengthÊôÐÔµÄconfigurableÌØÕ÷±ØÐèΪtrue£¬£¬£¬£¬stringºÍarrayµÄlength¶¼ÇкÏÕâ¸ö¼Ù¶¨£¬£¬£¬£¬¿ÉÊÇtypedarrayÈ´ÊǸöÆÆÀý£¬£¬£¬£¬ÒÔÊÇ¿ÉÒÔͨ¹ý¸øtypedarrayµÄlengthÊôÐԼӻص÷µÄ²Ù×÷£¬£¬£¬£¬È¥Ö´ÐÐÓû§½ç˵µÄ´úÂëÀ´´¥·¢ÀàÐÍ»ìÏýÎó²î¡£¡£¡£
2.2 ˼Ð÷¶þ£ºÍ¨¹ýºÏÀíµÄº¯ÊýŲÓÃÐÞ¸ÄÊý×éÀàÐÍ
½ÓÏÂÀ´¿´µÚ¶þÖÖ˼Ð÷£¬£¬£¬£¬Í¨¹ýºÏÀíº¯ÊýŲÓÃÀ´´¥·¢Êý×éÀàÐ͸ı䡣¡£¡£ÔÚһЩº¯Êý´¦Öóͷ£ÖУ¬£¬£¬£¬ÓÉÓÚ¹¦Ð§Ôµ¹ÊÔÓÉ»áŲÓÃToVarArrayº¯Êý¶ÔÊý×éÀàÐ;ÙÐиı䡣¡£¡£
ÏÂÃæ¾ÙÀý˵Ã÷¡£¡£¡£
optº¯ÊýµÄJITÓÅ»¯´úÂëÈçÏ£º
¿ÉÒÔ¿´µ½£¬£¬£¬£¬ÔÚcall raxÖ®ºó²¢Ã»ÓоÙÐÐÊý×éÀàÐ͵ļì²â¾ÍÖ±½Ó¸³ÖµÁË£¬£¬£¬£¬ÄÇôÕâ¸öcallÖо¿¾¹±¬·¢ÁËÊ²Ã´ÄØ£¿£¿£¿£¿£¿£¿£¿Õâ¸öcallŲÓÃÁËJavascriptOperators::OP_InitProtoº¯ÊýÀ´³õʼ»¯proto£¬£¬£¬£¬ÔÚ×îºóÒ»´ÎoptŲÓÃʱ£¬£¬£¬£¬½«array¿´³Éproto¸øÁËÊôÐÔÁ´£¬£¬£¬£¬ÔÚ¶ÔÊôÐÔÁ´¸³ÖµÊ±£¬£¬£¬£¬ÈôÊǸ³Öµ²ÎÊýÊÇÒ»¸öNativeÊý×éµÄ»°»á½«Æäת»»ÎªVarArray£¨Å²ÓÃÁËToVarArrayº¯Êý£©¡£¡£¡£ÆäŲÓú¯ÊýÕ»ÈçÏ¡£¡£¡£
´ËʱÊý×éµÄÀàÐÍÒѾ±¬·¢ÁË¸Ä±ä¶øJIT²¢Ã»Óмì²éµ½ÕâÒ»µãÒÔÊDZ¬·¢ÁËÎó²î¡£¡£¡£
ÔÙÀ´¿´Ò»¸ö½ÏÎªÖØ´óµãµÄÀý×ÓCVE-2018-0835¡£¡£¡£
¸ÃÎó²î±£´æÓÚJavascriptArray::ReverseHelperº¯ÊýÖУ¬£¬£¬£¬º¯Êý»áŲÓÃJavascriptArray::FillFromPrototypes£¬£¬£¬£¬¸Ãº¯Êýͨ¹ý±éÀúprototypeÀ´Ìî³äarray¡£¡£¡£
ÔÚ³ÌÐòÖУ¬£¬£¬£¬º¯ÊýÈ·±£prototypeÖеÄarray²»¿ÉÊÇNativeArray¡£¡£¡£
Ò²¾ÍÊÇ˵£¬£¬£¬£¬ÈôÊÇprototypeÊÇNativeArrayÊý×éÔò»á±»³ÌÐòת»»ÎªVarArray£¬£¬£¬£¬ÈôÊÇÄܹ»Ê¹Ò»¸öÊý×éµÄprototypeΪNativeArray£¬£¬£¬£¬¾Í¿ÉÒÔͨ¹ýÊý×éµÄReverseÒªÁ콫ÆäprototypeµÄNativeArrayת»»ÎªVarArray¡£¡£¡£²»¹ýÕâÀïÉÐÓÐÒ»¸öÎÊÌâ¾ÍÊÇÔõÑùÈ·±£prototypeÊÇNativeArray£¬£¬£¬£¬Ò»Ñùƽ³£ÇéÐÎÏÂÈôÊÇÒ»¸öÊý×é±»¿´³Éprototype£¬£¬£¬£¬ÔòËü»á±»×ª»¯ÎªVarArray¡£¡£¡£
ÔÚJavascriptArray::EntrySortÖб£´æÈçÏ´úÂë¡£¡£¡£
ÈôÊÇarrÊÇÒ»¸öNativeArray£¬£¬£¬£¬ËüÊ×ÏÈ»áÄð³ÉÒ»¸öVarArrayÖ´ÐÐsort»Øµ÷£¬£¬£¬£¬ÔÙ±ä»ØNativeArray£¬£¬£¬£¬ÈôÊÇÄܹ»Ôڻص÷Öн«Õâ¸öarr¸³¸øprototype£¬£¬£¬£¬Ö®ºóËüµÄÀàÐÍÓÖ»á±ä»ØÀ´£¬£¬£¬£¬ÕâÑù¾Í¿ÉÒÔ»ñµÃÒ»¸öÀàÐÍ»ìÏýÎó²î¡£¡£¡£
2.3 ˼Ð÷Èý£ºMissingItem
CVE-2018-0953ͬÑùÒ²ÊÇͨ¹ýº¯ÊýŲÓÃÐÞ¸ÄÊý×éÀàÐÍ£¬£¬£¬£¬Õâ¸öÎó²îÌØÊâÖ®´¦ÔÚÓÚÒý³öÁËÁíÒ»¸ö¹Ø×¢µã£¬£¬£¬£¬¼´Êý×éµÄMissingItem¡£¡£¡£MissingItemÊÇÒ»¸öÊýÖµ£¬£¬£¬£¬ÔÚ64λ³ÌÐòÉϼ´ÊÇ0x8000000280000002¡£¡£¡£ChakraÒýÇæÔÚÊý×齨ÉèµÄʱ¼ä»áʹÓÃÕâ¸öÖµ¶ÔÊý×éÔªËØ¾ÙÐгõʼ»¯£¬£¬£¬£¬ÌåÏÖÊý×éÖиÃÔªËØ»¹Î´¾ÙÐи³Öµ£¬£¬£¬£¬ÁíÍâÊý×黹»á±£´æÒ»¸ö±ê¼Ç루NoMissingValues£©À´±ê¼Ç´ËÊý×éÊÇ·ñÓÐδ±»¸³ÖµµÄÔªËØ¡£¡£¡£
ÏÈ¿´¿´ÏÂÃæÕâ¶Î´úÂë¡£¡£¡£
µ±Ö´ÐÐÊý×éµÄ¸³Öµ²Ù×÷£¬£¬£¬£¬Å²ÓÃÁËNativeArrayµÄSetItemº¯Êý£¬£¬£¬£¬SetItemº¯ÊýʵÏÖÈçÏ¡£¡£¡£
µ±¸øNativeArray¸³ÖµÊ±£¬£¬£¬£¬ÈôÊÇÕâ¸öÖµ¼´ÊÇMissingItem£¬£¬£¬£¬¿ÉÒÔ½«NativeArrayת»¯ÎªVarArray¡£¡£¡£ÓÅ»¯Âß¼¼ÙÉè¶ÔÊý×é¾ÙÐи³ÖµÊÇÒ»¸öºÜÇå¾²µÄ²Ù×÷£¬£¬£¬£¬Ö»Òª´«Èë²ÎÊý²»ÊÇÒ»¸ö¹¤¾ßÄÇô¾Í²»»á¸Ä±äÊý×éÀàÐÍ£¬£¬£¬£¬¿ÉÊDz¢Ã»ÓÐ˼Á¿µ½ÈôÊǸ³ÖµµÄÖµ¼´ÊÇMissingItemµÄ»°»áÒýÆðÊý×éÀàÐ͵Äת±ä£¬£¬£¬£¬ÕýÊÇÕâÖÖÊèºöµ¼ÖÂÁËÎó²îµÄ±¬·¢¡£¡£¡£
Õâ¸öÎó²î×Ô¼ººÜÊǺÃÃ÷È·£¬£¬£¬£¬¿ÉÊÇMissingItem×Ô¼ºÓÖÒý³öÁËÒ»Á¬´®µÄÎÊÌâ¡£¡£¡£¸ÃÎó²îµÄ²¹¶¡³ÌÐòÐÞ²¹ÁËͨ¹ýOP_SetElementIÀ´Å²ÓÃSetItemµÄÇéÐΣ¬£¬£¬£¬¿ÉÊÇÕâÑùÐÞ²¹Ô¶Ô¶²»·ó£¬£¬£¬£¬ÓÉÓڶԸú¯ÊýŲÓõÄλÖÃ×ÅʵºÜÊǶ࣬£¬£¬£¬ÓÚÊÇÕÒÎó²îµÄ˼Ð÷Äð³ÉÁËѰÕÒΪNativeArray¸³ÖµµÄÖÖÖÖ·¾¶µÄÎÊÌâ¡£¡£¡£
CVE-2018-0953µÄÎó²î·¢Ã÷ÕßlokihardtÔÚ²¹¶¡ÐÞ²¹ºóÓÖÌá³öÁ½ÖÖ˼Ð÷À´Èƹý²¹¶¡£¬£¬£¬£¬µÚÒ»¸öÊÇͨ¹ýarraypushÀ´Å²ÓÃSetItem¡£¡£¡£
´¥·¢Îó²î´úÂëÈçÏ£º
ÓÉÓÚͨ¹ýpush¶ÔÊý×é¾ÙÐвåÈëµÄ²Ù×÷»áŲÓÃSetItem£¬£¬£¬£¬ÒÔÊÇÊý×é¸Ä±äµÄÇéÐÎÈÔÈ»»á±£´æ¡£¡£¡£
µÚ¶þ¸ö˼Ð÷ÊÇÏÈÖ±½ÓÐÞ¸ÄÊý×éµÄÔªËØ£¬£¬£¬£¬ÔÙͨ¹ýcancatÀ´ÐÞ¸ÄÊý×éÀàÐÍ¡£¡£¡£Îó²î´¥·¢´úÂëÈçÏ£º
POCÊ×ÏÈͨ¹ýsetÐÞ¸ÄÁËÊý×éÖÐÔªËØµÄÖµ¡£¡£¡£
¶ÔÓ¦µÄJIT´úÂëÊÇÕâÑùµÄ¡£¡£¡£
ÔÚÐÞ¸ÄÁËÊý×éÔªËØºó£¬£¬£¬£¬´´Á¢ÁËÒ»¸öÓÐMissingItem¿ÉÊÇHasNoMissingValuesµÄarray¡£¡£¡£
½Óמ籾ŲÓÃÁËtriggerº¯Êý£¬£¬£¬£¬ÓÉÓÚÊý×éµÄHasNoMissingValues±ê¼ÇÎ»ÎªÕæ£¬£¬£¬£¬ÏÂͼ´úÂëÖеÄÌõ¼þÊÇÖª×ãµÄ¡£¡£¡£
ÓÉÓÚÊý×éÓÐÁËMissingItem£¬£¬£¬£¬ÒÔÊÇ¿ÉÒÔ¾ÙÐе½ÈçÏ·ÖÖ§¡£¡£¡£
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À´»ñµÃÒ»¸öÀàÐÍ»ìÏýÎó²î¡£¡£¡£
ÖµµÃÒ»ÌáµÄÊÇ£¬£¬£¬£¬ÔÚ11ÔµIJ¹¶¡ÖÐChakraÖ±½Ó¶ÔconcatÒªÁì×öÁËÑÏ¿áµÄ´¦Öóͷ££¬£¬£¬£¬´ÓÇéÐÎÉÏÍÆ²âÓ¦¸ÃÊÇÕÒµ½ÁËеÄÒªÁìÀ´½«MissingItemдÈëarray£¬£¬£¬£¬µ«ÓÉÓÚÍøÉÏûÕÒµ½ÏìÓ¦µÄÐÅÏ¢£¬£¬£¬£¬ÔÙ¼ÓÉϲ¹¶¡²¢Ã»ÓжԽ«ÖµÐ´ÈëarrayµÄ´úÂë¾ÙÐÐÐÞ²¹£¬£¬£¬£¬·´¶øÏÞÖÆÁËconcat£¬£¬£¬£¬ÒÔÊÇÒ²ÎÞ·¨ÅжÏÏêϸÇéÐΡ£¡£¡£
2.4 ˼Ð÷ËÄ£º½«Êý×éαװ³É¹¤¾ß
×îºóÒ»ÖÖ˼Ð÷£¬£¬£¬£¬Í¨¹ýÒÉ»óChakraÒýÇæ£¬£¬£¬£¬Ê¹ÆäÔÚÌìÉúJIT´úÂëÀú³ÌÖйýʧµÄ½«NativeArray¿´³ÉÆäËû¹¤¾ß£¬£¬£¬£¬ÒÔÖÁÓÚûÓÐÔÚÊʵ±µÄλÖÃÌí¼Ó¼ì²é´úÂë¡£¡£¡£
¹ûÕæµÄÀý×ÓÊÇCVE-2018-8466¡£¡£¡£
ChakraʹÓÃJavascriptArray::GetArrayForArrayOrObjectWithArrayÀ´ÅжϹ¤¾ßÊÇ·ñÊÇarray£¬£¬£¬£¬ÆäÂß¼ÈçÏÂËùʾ¡£¡£¡£
ͨ¹ýCrossSite classÀ´wrapÒ»¸ö¹¤¾ßµÄʱ¼ä»áÌæ»»¸Ã¹¤¾ßµÄÐé±í£¬£¬£¬£¬ÒÔÊDZ»wrappingµÄÊý×齫²»»á±»Ê¶±ðΪÊý×飬£¬£¬£¬Õ⽫µ¼ÖÂÎÞ·¨ÔÚ׼ȷµÄµØ·½ÌìÉú¶ÔÊý×éÀàÐ͵ļì²é²¢±¬·¢ÀàÐÍ»ìÏýÎó²î¡£¡£¡£
²¹¶¡³ýÁËÑéÖ¤Ðé±íÊÇ·ñÊÇarray¹¤¾ßÖ®Í⣬£¬£¬£¬»¹¼ì²éÁ˹¤¾ßÊÇ·ñÊDZ»CrossSite wrapµÄÊý×é¡£¡£¡£
ÁíÒ»¸öÀý×ÓÊÇCVE-2018-8542£¬£¬£¬£¬Æä²¹¶¡ÔÚValueType::MergeWithObjectÖС£¡£¡£
¸Ãº¯ÊýÖ÷ÒªÓÃÓںϲ¢Á½¸ö¹¤¾ß£¬£¬£¬£¬¿ÉÒÔ¿´µ½²¹¶¡Ìí¼ÓÁËÑéÖ¤£¬£¬£¬£¬ÓÃÓÚÈ·¶¨Á½¸ö¹¤¾ßÖÐÊÇ·ñÓÐÊý×飬£¬£¬£¬ÔÙÊÓ²ìÒ»ÏÂû´ò¹ý²¹¶¡µÄÎÊÌâ´úÂ룬£¬£¬£¬ÈôÊÇÁ½¸ö¹¤¾ß¶¼²»ÊÇUninitializedObject£¬£¬£¬£¬ÔòºÏ²¢ÎªObject¹¤¾ß£¬£¬£¬£¬´óÖ¿ÉÒÔ»ñÖªÎó²î±¬·¢µÄÔµ¹ÊÔÓÉ£¬£¬£¬£¬ÔÚÖ´Ðе½Õâ¾äµÄʱ¼äÈôÊÇÁ½¸ö¹¤¾ßÖÐÓÐÒ»¸öÊÇÊý×飬£¬£¬£¬Ôںϲ¢Ê±Êý×é»á±»¿´³É¹¤¾ßÀ´´¦Öóͷ££¬£¬£¬£¬ÓÅ»¯Àú³ÌÖÐÒýÇæ°ÑºÏ²¢µÄÊý×é¿´³ÉÁ˹¤¾ß£¬£¬£¬£¬ÄÇô¶ÔÊý×éÀàÐÍÊÇ·ñ¸Ä±äµÄ¼ì²âËäÈ»¾Í²»±»ÐèÒª£¬£¬£¬£¬ÓÚÊÇ×îÖÕµ¼ÖÂÁËÀàÐÍ»ìÏý¡£¡£¡£
3¡¢×Ü ½á
ÔÚÒÑÍùÒ»Äê×óÓÒ£¬£¬£¬£¬JIT±àÒëÓÅ»¯Àú³ÌÖеÄÀàÐÍ»ìÏýÊÇChakraÎó²îÍÚ¾ò·½ÃæµÄÒ»¸öÖ÷Òª¹Ø×¢µã¡£¡£¡£´ÓÔçÆÚµÄʹÓÃδ±»±£»£»£»£»£»£»¤µÄ»ØÐµ÷Õý³£º¯ÊýÀ´ÐÞ¸ÄÊý×éÀàÐÍ£¬£¬£¬£¬ÔÙµ½Ñ°ÕÒÑéÖ¤Àú³ÌÖеÄÂß¼ÎÊÌ⣬£¬£¬£¬Ê¹ÓÃÊý×éµÄMissingItemÌØÕ÷£¬£¬£¬£¬½«Êý×éαװ³ÉÆäËûÀàÐ͹¤¾ß˼Ð÷£¬£¬£¬£¬ÎÒÃÇ¿ÉÒÔ¿´µ½Ëæ×ÅÑо¿Õß¶ÔChakraÒýÇæµÄÉîÈëÑо¿£¬£¬£¬£¬Îó²î±¬·¢µÄλÖÃÒѾ´Ó¼òÆÓµÄ¹¤¾ßÒªÁìÖð²½ÏòJITÓÅ»¯´úÂëÌìÉúÀú³ÌÖб¬·¢µÄÖÖÖÖÂß¼ºÍÅжÏÎÊÌ⿿££¬£¬£¬£¬Îó²îÍÚ¾òµÄÃż÷Ò²ÓÐÁËÏÔÖøµÄÌáÉý¡£¡£¡£
918²©ÌìÌÃÆð¾¢·ÀÓùʵÑéÊÒ£¨ADLab£©
ADLab½¨ÉèÓÚ1999Ä꣬£¬£¬£¬ÊÇÖйúÇå¾²ÐÐÒµ×îÔ罨ÉèµÄ¹¥·ÀÊÖÒÕÑо¿ÊµÑéÊÒÖ®Ò»£¬£¬£¬£¬Î¢ÈíMAPPÍýÏë½¹µã³ÉÔ±£¬£¬£¬£¬¡°ºÚȸ¹¥»÷¡±¿´·¨Ê×ÍÆÕß¡£¡£¡£×èÖ¹ÏÖÔÚ£¬£¬£¬£¬ADLabÒÑͨ¹ýCVEÀÛ¼ÆÐû²¼Çå¾²Îó²î½ü1000¸ö£¬£¬£¬£¬Í¨¹ý CNVD/CNNVDÀÛ¼ÆÐû²¼Çå¾²Îó²î½ü500¸ö£¬£¬£¬£¬Ò»Á¬¼á³Ö¹ú¼ÊÍøÂçÇå¾²ÁìÓòÒ»Á÷Ë®×¼¡£¡£¡£ÊµÑéÊÒÑо¿Æ«Ïòº¸Ç²Ù×÷ϵͳÓëÓ¦ÓÃϵͳÇå¾²Ñо¿¡¢Òƶ¯ÖÇÄÜÖÕ¶ËÇå¾²Ñо¿¡¢ÎïÁªÍøÖÇÄÜ×°±¸Çå¾²Ñо¿¡¢WebÇå¾²Ñо¿¡¢¹¤¿ØÏµÍ³Çå¾²Ñо¿¡¢ÔÆÇå¾²Ñо¿¡£¡£¡£Ñо¿Ð§¹ûÓ¦ÓÃÓÚ²úÆ·½¹µãÊÖÒÕÑо¿¡¢¹ú¼ÒÖØµã¿Æ¼¼ÏîÄ¿¹¥¹Ø¡¢×¨ÒµÇ徲ЧÀ͵ȡ£¡£¡£


¾©¹«Íø°²±¸11010802024551ºÅ