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´úÂëת»ØÊ¹ÓÃÚ¹ÊÍÆ÷¼ÌÐøÖ´ÐÐ×Ö½ÚÂë¡£¡£¡£¡£¡£¡£


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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

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


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


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨

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

¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


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


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


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

¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨

¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


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


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


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


2.3 ˼Ð÷Èý£ºMissingItem


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


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


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


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


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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À´»ñµÃÒ»¸öÀàÐÍ»ìÏýÎó²î¡£¡£¡£¡£¡£¡£


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


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


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨

3¡¢×Ü ½á

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

¼øºÚµ£±£ÍøÆð¾¢·ÀÓùʵÑéÊÒ£¨ADLab£©

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