¡¾¸´ÏÖ¡¿Chrome V8¶ÑɳÏäÈÆÌ«¹ýÎö
Ðû²¼Ê±¼ä 2025-04-301.Ñо¿Åä¾°
V8ÊÇGoogle Chrome¾ç±¾ÓïÑÔ£¨JavaScript£©µÄÆÊÎöÒýÇæ¡£¶àÄêÀ´GoogleÇå¾²ÍŶÓÒ»Ö±ÖÂÁ¦ÓÚÌáÉýV8µÄÇå¾²ÐÔ£¬µ«V8Îó²îÈÔ²ã³ö²»Çî¡£³ýÁ˾µäµÄÄÚ´æÆÆËð¡¢ÔËÐÐʱÎÊÌ⣬V8ÓÅ»¯±àÒëÆ÷µÄÂß¼ÎÊÌâת»¯ÎªÄÚ´æÆÆËðÊÇV8Îó²îÖеĵ䷶¡£ÈôÊDZàÒëÆ÷×Ô¼º¾ÍÊǹ¥»÷Ãæ£¬ÌìÉúÓÐÎó²îµÄ´úÂëÔÚËùÄÑÃ⡣ͨ¹ý½ÓÄÉÄÚ´æÇå¾²µÄ±à³ÌÓïÑÔ»òÕßÓ²¼þÇå¾²²»¿É»º½âÕâÖÖÎÊÌâ¡£ÔÚÕâÖÖÇéÐÎÏ£¬GoogleÇå¾²Ìá³öV8ɳÏ䣬½«V8¶ÑÉúÑÄÔÚ1TBµÄɳÏäÄÚ£¬½«Ê¹ÓÃV8Îó²îÔì³ÉµÄÆÆËðÏÞÖÆÔÚɳÏäÄÚ¡£¹¥»÷ÕßΪÁËÄܽøÒ»²½½á¹¹í§ÒâÄÚ´æ¶Áд£¬±ØÐèÕÒµ½ÄÜÈÆ¹ýV8ɳÏäµÄÎó²î¡£
ÀíÏëÇéÐÎÏ£¬V8ɳÏäʹµÃä¯ÀÀÆ÷×ÝÈ»ÔËÐв»Çå¾²µÄ´úÂëÒ²²»»áÔì³É¹¥»÷Íþв¡£ È»¶øÊÂʵ²¢·ÇÔÆÔÆ¡£ÔÚpwn2own2024½ÇÖðÖУ¬Manfred PaulʹÓÃÁËÒ»¸öV8ÖеÄÀàÐÍ»ìÏýÎó²î£¨CVE-2024-2887£©¿ØÖÆÉ³ÏäÄÚµÄÄڴ棬ͬʱҲÅû¶ÁËÒ»ÖÖÈÆ¹ýV8ɳÏäµÄÒªÁì¡£×ðÁú¿Ê±ADLabÑо¿Ö°Ô±×ÅÖØÆÊÎö¸´ÏÖÁ˸ÃV8ɳÏäµÄÈÆ¹ýÒªÁ죬²¢ÌáÐÑGoogle ChromeÓû§ÊµÊ±¸üÐÂä¯ÀÀÆ÷£¬×èÖ¹Êܵ½NDayÍþв¡£
2.V8ɳÏä
V8ɳÏäµÄ·ºÆð£¬½«Àú³ÌµØµã¿Õ¼ä·ÖΪV8ɳÏäÄÚ´æºÍV8ɳÏäÍâÄڴ棬ΪÁ˱ÜÃâí§ÒâÄÚ´æ¶Áд£¬Õ¥È¡Ê¹ÓÃΣÏÕµÄÔʼָÕ롣ɳÏäÄڵŤ¾ßͨ¹ý¶ÔɳÏä»ùµØµãµÄÆ«ÒÆÒýÓá£ÈçÏÂÃæµÄArrayBufferµÄÄÚ´æ½á¹¹£¬ºó¶Ë´æ´¢Êý¾ÝµÄÔʼָÕ루×ÏÉ«²¿·Ö£©ÓÉɳÏä»ùÖ·Æ«ÒÆÈ¡´ú£º

V8Íⲿ¹¤¾ß£¨ÈçBlink¹¤¾ß£©Í¨¹ýÍⲿË÷Òý±íÒýÓá£ÎªÁË¿ØÖÆÁ÷ÍêÕûÐÔ£¬´úÂëºÍËüµÄÔªÊý¾ÝµÈΣÏÕ¹¤¾ßÒ²ÒªÒÆµ½É³ÏäÍ⣬ÓÉ´úÂëË÷Òý±íÒÔ¼°ÐÅÍбíÒýÓá£ÐÅÍбíÓÃÓÚ¶Ô²»°üÀ¨ÔʼָÕëµÄV8¹¤¾ß£¨ÈçBytecode ¡¢Code metadata£©µÄË÷Òý£¬ÕâЩ¹¤¾ßËäÈ»²»°üÀ¨Ö¸Õ룬µ«Ê¹ÓÃÕâЩ¹¤¾ßÈÔ¿ÉÄÜÍ»ÆÆÉ³Ïä¡£V8ɳÏäÕûÌåµÄÉè¼ÆÍ¼ÈçÏ£º

V8ɳÏäµÄ·ºÆðÔöÌíÁËʹÓÃÁ´µÄ³¤¶È£¬Ò»¶¨Ë®Æ½ÉÏïÔÌÁËV8Îó²î¶Ôä¯ÀÀÆ÷Çå¾²´øÀ´µÄ¹¥»÷Íþв¡£¹¥·ÀÏàÉúÏà¿Ë£¬ÔÚpwn2own2024½ÇÖðÖУ¬Manfred Paul¾ÍʹÓÃÒ»¸öÕûÊýÒç³öÎó²îÈÆ¹ýÁËV8ɳÏä¡£
3.Îó²îÆÊÎö
ÔÚɳÏä·ºÆðǰ£¬Í¨¹ýArrayBufferÒÔ¼°Æä¶ÔÓ¦µÄTypedArrayºó¶Ë´æ´¢¿ÉÓÐÓÿØÖÆí§ÒâÄÚ´æ¶Áд¡£´ÓÉÏÃæµÄArrayBufferµÄÄÚ´æ½á¹¹¿ÉÖª£¬ÏÖÔÚºó¶Ë´æ´¢Ö¸Õë±»Ìæ»»ÎªÉ³ÏäÖ¸Õ룬²¢ÇÒ³¤¶È±»ÏÞÖÆÔÚ235 £¬ÓÐÓÃ×èÖ¹ÁËʹÓÃÕâÖÖÒªÁìí§Òâ¶Áд¡£
Ëæ×ÅResizable ArrayBufferµÄ·ºÆð£¬¶ÔArrayBufferºÍSharedArrayBufferÒÔ¼°ËûÃǵÄType ViewµÄ»á¼û±äµÃÔ½·¢ÖØ´ó¡£ÏêϸÀ´½²¹ØÓÚArrayBufferºÍSharedArrayBufferµÄ½á¹¹º¯ÊýÌí¼ÓÁËmaximum length£¬ArrayBufferÄܹ»ËæÊ±ÔöÌíºÍËõ¼õ»º´æ¾Þϸ£¬¶øSharedArraybufferÄܹ»ËæÊ±ÔöÌí»º´æ¾Þϸ¡£ÔÚ¹¤¾ß½¨Éèºó»º´æµÄ¶¯Ì¬×ª±ä£¬ÖÂʹÿ´Î»á¼ûºó¶Ë»º´æ¶¼ÒªÖØÐÂÅÌË㻺´æµÄ³¤¶È¡£

¹ØÓÚÀàÐÍÊý×éµÄ³¤¶ÈÅÌËãÓ¦¸Ã²ÉÈ¡£¨byte_length - byte_offset£©/element_size , ÏÂÃæÊǶÔRAB³¤¶ÈÅÌË㣺

Ïà½ÏÓÚRAB¹ØÓÚbyte_lengthºÍbyte_offsetµÄÒç³ö¼ì²é£¬GSABȱÉÙÕûÊýÒç³ö¼ì²é£¬ÔÚÓµÓÐɳÏäÄÚÄÚ´æÆÆËðµÄÄÜÁ¦Ï£¬ÕâÁ½¸öÖµÍêÈ«¿É¿Ø£¬µ±byte_offset´óÓÚbyte_length, ØÊºó¶Ë´æ´¢ºóµÄÕû¸öµØµã¿Õ¼ä¿É¿Ø£¬ÍêÈ«Í»ÆÆV8ɳÏ䣬µÖ´ïɳÏäÍâÄÚ´æ¶Áд¡£

4.Îó²î¸´ÏÖ
½¨ÉèGSAB (ab)¹¤¾ß£¬lengthΪ0x3000£¬maxByteLengthΪ0x6000£»½¨ÉèÀàÐÍÊý×éUint8Array (dv)£¬Æ«ÒÆÖµÎª0x2000 £»ÓÅ»¯funcº¯Êýƾ֤ÌṩµÄË÷Òý£¨i£©¸øÀàÐÍÊý×éÔªËØ£¨dv[i]£©¸³Öµ£¨0x88£©¡£
´òÓ¡ÀàÐÍÊý×鹤¾ß£¨dv£©ÒÔ±ãÓÚÉó²éØÊºó¶Ë´æ´¢Ö¸Õ룬ʹÓÃɳÏäÄÚдº¯ÊýÐÞ¸ÄÀàÐÍÊý×飨dv£©µÄÆ«ÒÆÎª0x8000£¨ÓÉÓÚÄÚ´æ´æ´¢ÕûÊýֵΪÏÖʵֵµÄ2±¶£¬ÒÔÊÇÏÖÊµÆ«ÒÆÎª0x4000 £©¡£Æ«ÒÆÖµ£¨0x4000£©´óÓÚ³¤¶È(0x3000) ,µ¼ÖÂÕûÊýÒç³ö£¬µ±Ê¹Óó¬´óµÄË÷Òý£¨0x10000000000£©Ô½½ç»á¼ûºó¶Ë»º´æÊ±£¬ÅÌËãµÄË÷ÒýСÓÚ³¤¶ÈÖµ£¬µ¼ÖÂÔ½½çд¡£
¿ÉÒÔ¿´µ½ÀàÐÍÊý×飨dv£©µÄºó¶Ë´æ´¢Ö¸ÕëΪ0x316600002000£º

V8ɳÏäµÄÄÚ´æ¹æÄ£ÊÇÔÚ1TBµÄµØµã¿Õ¼ä£¬³ÌÐòÔÚ¶Ô0x326600002000ɳÏäÍâµÄ²»¿ÉдÄڴ渳ֵ£¨0x88£©Ê±·ºÆðÍ߽⣺


5.Îó²îÐÞ¸´

6.Îó²îÓ°Ïì
Chrome before 123.0.6312.86
[1]https://docs.google.com/document/d/1FM4fQmIhEqPG8uGp5o9A-mnPB5BOeScZYpkHjo0KKA8/edit?tab=t.0
[2]https://www.zerodayinitiative.com/blog/2024/5/2/cve-2024-2887-a-pwn2own-winning-bug-in-google-chrome
[3]https://github.com/tc39/proposal-resizablearraybuffer
[4]https://chromium-review.googlesource.com/c/v8/v8/+/5385329/4/src/compiler/graph-assembler.cc
×ðÁú¿Ê±Æð¾¢·ÀÓùʵÑéÊÒ£¨ADLab£©
ADLab½¨ÉèÓÚ1999Ä꣬ÊÇÖйúÇå¾²ÐÐÒµ×îÔ罨ÉèµÄ¹¥·ÀÊÖÒÕÑо¿ÊµÑéÊÒÖ®Ò»£¬Î¢ÈíMAPPÍýÏë½¹µã³ÉÔ±£¬¡°ºÚȸ¹¥»÷¡±¿´·¨Ê×ÍÆÕß¡£×èÖ¹ÏÖÔÚ£¬ADLabÒÑͨ¹ý CNVD/CNNVD/NVDB/CVEÀÛ¼ÆÐû²¼Çå¾²Îó²î6500Óà¸ö£¬Ò»Á¬¼á³Ö¹ú¼ÊÍøÂçÇå¾²ÁìÓòÒ»Á÷Ë®×¼¡£ÊµÑéÊÒÑо¿Æ«Ïòº¸Ç»ù´¡Çå¾²Ñо¿¡¢Êý¾ÝÇå¾²Ñо¿¡¢5GÇå¾²Ñо¿¡¢AI+Çå¾²Ñо¿¡¢ÎÀÐÇÇå¾²Ñо¿¡¢ÔËÓªÉÌ»ù´¡ÉèÊ©Çå¾²Ñо¿¡¢Òƶ¯Çå¾²Ñо¿¡¢ÎïÁªÍøÇå¾²Ñо¿¡¢³µÁªÍøÇå¾²Ñо¿¡¢¹¤¿ØÇå¾²Ñо¿¡¢ÐÅ´´Çå¾²Ñо¿¡¢ÔÆÇå¾²Ñо¿¡¢ÎÞÏßÇå¾²Ñо¿¡¢¸ß¼¶ÍþвÑо¿¡¢¹¥·À¶Ô¿¹ÊÖÒÕÑо¿¡£Ñо¿Ð§¹ûÓ¦ÓÃÓÚ²úÆ·½¹µãÊÖÒÕÑо¿¡¢¹ú¼ÒÖØµã¿Æ¼¼ÏîÄ¿¹¥¹Ø¡¢×¨ÒµÇå¾²·þÎñµÈ¡£



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