¡¾Ô­´´Â©¶´¡¿WebAssembly¸ßΣ©¶´Ó°ÏìEdgeºÍSafariä¯ÀÀÆ÷

Ðû²¼Ê±¼ä 2019-03-26

©¶´¸ÅÊö


2018Äê10Ô £¬¶«É­Æ½Ì¨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Ä £¿éÖеĸ÷¸ö½á¹¹ £¬ÔÚ½âÎöµ¼³ö±íʱ £¬ÓУº

¶«É­¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


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


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

¶«É­¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


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¿ÉÒÔʹÓÃËü¡±¡£


Õâ¸øÎÒÃǵÄÆôʾ£º


м¼Êõ¡¢Ð³߶Ȼá´øÀ´ÐµĹ¥»÷Ãæ £¬³ß¶ÈµÄʵÏÖ¹ý³Ì¿ÉÄÜ»áÅãͬÄþ¾²ÎÊÌâ¡£
²îÒìÄ £¿éñîºÏʱ¿ÉÄÜ»á´òÆÆÄ³Ä £¿éÄÚ²¿µÄ¼ÙÉè £¬ÐèÒª½÷É÷¿´´ý¡£
ƾ¾Ý¸Ã©¶´µÄÌصã £¬¶«É­Æ½Ì¨ADLabÒÑÁ¬Ðø·¢ÏÖÁËÈô¸É©¶´ºÍ´úÂëÎÊÌâ £¬²¢ÒÑͨ±¨³§É̽øÐÐÐÞ¸´¡£


©¶´Ê±¼äÖá


2018Äê10ÔÂ30ÈÕ £¬¶«É­Æ½Ì¨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-0607
https://support.apple.com/en-us/HT209599
https://developer.mozilla.org/zh-CN/docs/WebAssembly/Exported_functions


¶«É­¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾