¡¾Ô­´´·ì϶¡¿WebAssembly¸ßΣ·ì϶ӰÏìEdgeºÍSafariä¯ÀÀÆ÷

°ä²¼¹¦·ò 2019-03-26

·ì϶¸ÅÊö


2018Äê10Ô £¬GA»Æ½ð¼×ADLab·¢ÏÖä¯ÀÀÆ÷WebAssemblyÄ£¿é´æÔÚ¸ßΣ·ì϶ £¬²¢µÚÒ»¹¦·ò´«µÝÆ»¹ûºÍ΢Èí¹Ù·½½øÐн¨¸´ ¡£¸Ã·ì϶λÓÚ¶ÔÓ¦ä¯ÀÀÆ÷JavaScriptÒýÇæ(JavaScriptCore/ChakraCore)ÓëWebAssemblyÄ£¿éµÄ½Ó¿Ú £¬¿ÉͬʱӰÏìEdge¡¢Safariä¯ÀÀÆ÷ ¡£


2019Äê3ÔÂ25ÈÕ £¬Æ»¹û°ä²¼ÁËÕë¶Ô¸Ã·ì϶µÄ°²È«²¹¶ ¡£¨CVE-2019-6201£©£»Î¢ÈíµÄ¶ÔÓ¦·ì϶²¹¶¡ÒÑÓÚ2019Äê2ÔÂ12ÈÕ°ä²¼ ¡£ÌáÐÑ¿í´óÓû§¾¡¿ì½«ä¯ÀÀÆ÷Éý¼¶µ½×îа汾 ¡£


·ì϶ӰÏìÁìÓò


Microsoft Windows 10²Ù×÷ϵͳµÄEdgeä¯ÀÀÆ÷
Apple iOS/macOS²Ù×÷ϵͳµÄSafariä¯ÀÀÆ÷
ÆäËûƽ̨ÉÏ»ùÓÚWebKitµÄ×é¼þºÍ²úÆ·


·ì϶¼òÎö


¹¥»÷Õß¿Éͨ¹ý¾«ÐÄ»ú¹ØµÄhtmlÍøÒ³ £¬Ê¹Óû§ÔÚʹÓÃä¯ÀÀÆ÷½Ó¼ûÍøÒ³Ê±´¥·¢·ì϶ ¡£¸Ã·ì϶ÔÚä¯ÀÀÆ÷·ì϶ÀûÓÃÖÐÄܹ»Ö±½Ó×÷ΪfakeobjÔ­Óï ¡£Í¨³£addrofÓëfakeobjÔ­Óï½áºÏÄܹ»Ö±½Ó»ñµÃËÁÒâ´úÂëÖ´ÐеÄÄÜÁ¦ £¬ÔÚÒ»Ð©ÌØÊâÇé¿öÏ £¬µ¥¶ÀʹÓÃfakeobjÔ­ÓïÒ²Äܹ»ÊµÏÖ·ì϶ÀûÓà ¡£


¸Ã·ì϶µÄ¼òÒª·ÖÎöÈçÏ£¨ÒÔSafari/WebKit CVE-2019-6201ΪÀý£©£º
WebAssemblyModuleRecord::linkÕÆ¹Ü½âÎöWebAssemblyÄ£¿éÖеĸ÷¸ö½á¹¹ £¬ÔÚ½âÎöµ¼³ö±íʱ £¬ÓУº

GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


ÔÚ¼ÓÔØµ¼³öµÄÈ«¾Ö±äÁ¿Ê± £¬ÓÐWasm::I32¡¢Wasm::I64¡¢Wasm::F32¡¢Wasm::F64ËÄÖÖÀàÐÍ £¬ÊÇWebAssembly³ß¶ÈÖÐÖ¸¶¨µÄÊý¾ÝÀàÐÍ(descriptor) £¬±ðÀ밵ʾ32λ¡¢64λµÄÕûÊýºÍ¸¡µãÊý £¬ÔÚ.wasmÎļþÖÐÓÃÒ»¸ö×Ö½ÚÈ·¶¨£»Ëæºóƾ¾Ý±äÁ¿ÀàÐ͵ij¤¶È´Ó.wasmÎļþÖгÖÐøÈ¡³ö¾ßÌåÊý¾Ý(value) £¬·â×°³ÉJSValue¹©JavaScript¸ßµÍÎÄʹÓà ¡£


ÒÔ¡°case Wasm::F64ΪÀý¡± £¬debug°æµÄ´úÂë»á²é³­±íÀ´Êý¾ÝÊÇ·ñÊÇÒ»¸öÇкÏIEEE754³ß¶ÈµÄË«¾«¶È¸¡µãÊý£º

GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


Release°æ±¾»áÔÚ±àÒë¹ý³Ì½«isImpureNaNÕâÒ»²é³­È¥µô £¬´Ëʱ±íÀ´Êý¾ÝÈôÊÇÊÇÒ»¸öNaN(Not a Number) £¬ÀýÈç0xffff000000888888 £¬ÔÚͨ¹ý¼Ó·¨(+DoubleEncodeOffset)·â×°³ÉJSValueʱ»á²úÉúÒç³ö £¬Ôì³É0x888888 ¡£ÓÉÓÚSafariµÄboxing¹æ¶¨ £¬ÕâÑùµÄÒ»¸öJSValue»á±»µ±×÷Ö¸Õë £¬Òò¶ø²úÉúÀàÐÍ»ìºÏ·ì϶ ¡£


·ì϶½¨²¹Ôò˳ÆäÌìÈ»µØ°ÑÈ¥µôµÄ²é³­²¹»ØÀ´£º

GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


Edgeä¯ÀÀÆ÷µÄ·ì϶ºÍ²¹¶¡Ò²¼«¶ÈÀàËÆ£º


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


Äܹ»¿´µ½ £¬ÔÚWebAssembly³ß¶ÈµÄʵÏÖÖÐ΢Èí¡¢Æ»¹û·¸ÁËÀàËÆµÄÃýÎó £¬µ¼Ö·ì϶µÄÐÎòҲ¼«ÆäÀàËÆ £¬·ì϶µÀÀíÒ²²¢²»¸´ÔÓ ¡£¸Ã·ì϶ÊÇÔÚWebAssemblyÖ°ÄÜʵÏÖʱֱ½ÓÒýÈëµÄ £¬ÔÚEdge¡¢SafariÖÐÒÑÂñ·üÁË2Äê ¡£


ÁíÒ»·½Ãæ £¬ÓÉÓÚJavaScriptÒýÇæÒ²ÎÞ·¨ÓÅÁ¼µØÊµÏÖi64ÀàÐ͵ÄWebAssembly±äÁ¿ £¬Òò¶øÎÞÂÛÊÇSafari/WebKit»¹ÊÇEdge¶¼»Ø¾ø¶Ô¸ÃÀàÐͼ°½øÐд¦Öà ¡£MDNÒ²ÔÚWebAssemblyµ¼³öº¯ÊýÕ½ÚÌáµ½£º¡°ÈôÊÇÄã³¢ÊÔŲÓÃÒ»¸ö½ÓÊÜ»ò·µ»ØÒ»¸öi64ÀàÐ͵¼³öµÄwasmº¯Êý £¬Ä¿Ç°Ëü»áÅ׳öÒ»¸öÃýÎó £¬ÓÉÓÚJavaScriptûÓо«È·µÄ·½Ê½À´±êʶһ¸öi64 ¡£²»Íâ £¬ÕâÔÚ½«À´¿ÉÄÜ»áŤת¡ª¡ªÔÚ½«À´µÄ³ß¶ÈÖÐ £¬½«Ë¼¿¼ÐµÄi64ÀàÐÍ ¡£½ìʱ £¬wasmÄܹ»Ê¹ÓÃËü¡± ¡£


Õâ¸øGA»Æ½ð¼×ÆôµÏ£º


м¼Êõ¡¢ÐÂ³ß¶È»á´øÀ´ÐµĹ¥»÷Ãæ £¬³ß¶ÈµÄʵÏÖ¹ý³Ì¿ÉÄÜ»á°éËæ°²È«ÎÊÌâ ¡£
·ÖÆçÄ£¿éñîӦʱ¿ÉÄÜ»áÍ»ÆÆÄ³Ä£¿éÄÚ²¿µÄÈç¹û £¬±ØÒªÉóÉ÷¶Ô´ý ¡£
ƾ¾Ý¸Ã·ì϶µÄÌØµã £¬GA»Æ½ð¼×ADLabÒÑÂ½Ðø·¢ÏÖÁËÈô¸É·ì϶ºÍ´úÂëÎÊÌâ £¬²¢ÒÑ´«µÝ³§É̽øÐн¨¸´ ¡£


·ì϶¹¦·òÖá


2018Äê10ÔÂ30ÈÕ £¬GA»Æ½ð¼×ADLabÏòÆ»¹ûÌá½»·ì϶ ¡£
2018Äê11ÔÂ6ÈÕ £¬GA»Æ½ð¼×ADLabÏò΢ÈíÌá½»·ì϶ ¡£
2018Äê11ÔÂ27ÈÕ £¬Æ»¹ûÔÚWebKit´úÂë¿âÖн¨¸´·ì϶ ¡£
2019Äê1ÔÂ24ÈÕ £¬Î¢ÈíÔÚChakraCore´úÂë¿âÖн¨¸´·ì϶ ¡£
2019Äê2ÔÂ12ÈÕ £¬Î¢ÈíΪEdgeä¯ÀÀÆ÷ÍÆËͰ²È«ÐÔ¸üР£¬²¢Åû¶CVE±àºÅ ¡£
2019Äê3ÔÂ25ÈÕ £¬Æ»¹ûΪSafariä¯ÀÀÆ÷µÈ²úÆ·ÍÆËͰ²È«ÐÔ¸üР£¬²¢Åû¶CVE±àºÅ ¡£


°²È«½¨Òé


×°Öó§ÉÌÍÆË͵ݲȫÐÔ¸üР£¬¸üÐÂÖÁ×îа汾 ¡£
ΪÁË·½±ãÉçÇø¹±Ï×´úÂë £¬Edge¡¢SafariÔÚÄڵij£¼ûä¯ÀÀÆ÷²úÆ·ÍùÍù½«Ö÷ÌâÒýÇæ×é¼þ¿ªÔ´ £¬¶ø¿ªÔ´´úÂë²Ö¿âÖеÄÿ´Î²¹¶¡Ìá½»¾ùÔ̺¬²¿ÃÅ·ì϶ÐÅÏ¢ ¡£Òò¶øÔÚ³§ÉÌÕýʽÅû¶·ì϶²¢Îª²úÆ·ÍÆËͲ¹¶¡Ö®Ç° £¬ºÚ¿ÍÓÐÒ»¸ö»ú¹Ø·ì϶POCµÄ¹¥»÷¹¦·ò´° ¡£ÎªÁËËõÓ×ÕâÒ»¹¦·ò´° £¬ÖÕ¶ËÓû§Ó¦ÊµÊ±×°Öó§ÉÌÌṩµÄ°²È«ÐÔ¸üР¡£


²Î¿¼Á´½Ó£º

https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/CVE-2019-0607
https://support.apple.com/en-us/HT209599
https://developer.mozilla.org/zh-CN/docs/WebAssembly/Exported_functions


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾