¡¾Ô´´Â©¶´¡¿WebAssembly¸ßΣ©¶´Ó°ÏìEdgeºÍSafariä¯ÀÀÆ÷
Ðû²¼Ê±¼ä 2019-03-26©¶´¸ÅÊö
2018Äê10Ô£¬¶«Éƽ̨ADLab·¢ÏÖä¯ÀÀÆ÷WebAssemblyÄ£¿é´æÔÚ¸ßΣ©¶´£¬²¢µÚһʱ¼äͨ±¨Æ»¹ûºÍ΢Èí¹Ù·½½øÐÐÐÞ¸´¡£¸Ã©¶´Î»ÓÚ¶ÔÓ¦ä¯ÀÀÆ÷JavaScriptÒýÇæ(JavaScriptCore/ChakraCore)ÓëWebAssemblyÄ£¿éµÄ½Ó¿Ú£¬¿ÉͬʱӰÏìEdge¡¢Safariä¯ÀÀÆ÷¡£
©¶´Ó°Ï췶Χ
Apple iOS/macOS²Ù×÷ϵͳµÄSafariä¯ÀÀÆ÷
ÆäËûƽ̨ÉÏ»ùÓÚWebKitµÄ×é¼þºÍ²úÎï
©¶´¼òÎö
¹¥»÷Õß¿Éͨ¹ý¾«ÐĽṹµÄhtmlÍøÒ³£¬Ê¹Óû§ÔÚʹÓÃä¯ÀÀÆ÷·ÃÎÊÍøҳʱ´¥·¢Â©¶´¡£¸Ã©¶´ÔÚä¯ÀÀÆ÷©¶´ÀûÓÃÖпÉÒÔÖ±½Ó×÷ΪfakeobjÔÓͨ³£addrofÓëfakeobjÔÓï½áºÏ¿ÉÒÔÖ±½Ó»ñµÃÈÎÒâ´úÂëÖ´ÐеÄÄÜÁ¦£¬ÔÚһЩÌØÊâÇé¿öÏ£¬µ¥¶ÀʹÓÃfakeobjÔÓïÒ²¿ÉÒÔÍê³É©¶´ÀûÓá£
WebAssemblyModuleRecord::linkÂôÁ¦½âÎöWebAssemblyÄ£¿éÖеĸ÷¸ö½á¹¹£¬ÔÚ½âÎöµ¼³ö±íʱ£¬ÓУº

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

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

Edgeä¯ÀÀÆ÷µÄ©¶´ºÍ²¹¶¡Ò²·Ç³£ÏàËÆ£º

¿ÉÒÔ¿´µ½£¬ÔÚWebAssembly³ß¶ÈµÄʵÏÖÖÐ΢Èí¡¢Æ»¹û·¸ÁËÀàËƵĴíÎ󣬵¼Ö©¶´µÄÃæòҲ¼«ÆäÏàËÆ£¬Â©¶´ÔÀíÒ²²¢²»ÅӴ󡣸鶴ÊÇÔÚWebAssembly¹¦Ð§ÊµÏÖʱֱ½ÓÒýÈëµÄ£¬ÔÚEdge¡¢SafariÖÐÒÑDZ·üÁË2Äê¡£
ÁíÒ»·½Ã棬ÓÉÓÚJavaScriptÒýÇæÒ²ÎÞ·¨Á¼ºÃµØʵÏÖi64ÀàÐ͵ÄWebAssembly±äÁ¿£¬Òò´ËÎÞÂÛÊÇSafari/WebKit»¹ÊÇEdge¶¼¾Ü¾ø¶Ô¸ÃÀàÐͼ°½øÐд¦Öá£MDNÒ²ÔÚWebAssemblyµ¼³öº¯ÊýÕ½ÚÌáµ½£º¡°Èç¹ûÄãʵÑéµ÷ÓÃÒ»¸ö½ÓÊÜ»ò·µ»ØÒ»¸öi64ÀàÐ͵¼³öµÄwasmº¯Êý£¬Ä¿Ç°Ëü»áÅ׳öÒ»¸ö´íÎó£¬ÒòΪJavaScriptûÓо«È·µÄ·½Ê½À´±êʶһ¸öi64¡£²»Í⣬ÕâÔÚ½«À´¿ÉÄÜ»á¸Ä±ä¡ª¡ªÔÚ½«À´µÄ³ß¶ÈÖУ¬½«¿¼ÂÇеÄi64ÀàÐÍ¡£½ìʱ£¬wasm¿ÉÒÔʹÓÃËü¡±¡£
Õâ¸øÎÒÃǵÄÆôʾ£º
²îÒìÄ£¿éñîºÏʱ¿ÉÄÜ»á´òÆÆijģ¿éÄÚ²¿µÄ¼ÙÉ裬ÐèÒª½÷É÷¿´´ý¡£
ƾ¾Ý¸Ã©¶´µÄÌص㣬¶«Éƽ̨ADLabÒÑÁ¬Ðø·¢ÏÖÁËÈô¸É©¶´ºÍ´úÂëÎÊÌ⣬²¢ÒÑͨ±¨³§É̽øÐÐÐÞ¸´¡£
©¶´Ê±¼äÖá
2018Äê11ÔÂ6ÈÕ£¬¶«Éƽ̨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-0607https://support.apple.com/en-us/HT209599
https://developer.mozilla.org/zh-CN/docs/WebAssembly/Exported_functions
