¡¾¸´ÏÖ¡¿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ɳÏäµÄ²½Öè¡£OG¶«·½Ìü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
OG¶«·½Ìü»ý¼«·ÀÓù³¢ÊÔÊÒ£¨ADLab£©
ADLab³ÉÁ¢ÓÚ1999Ä꣬£¬ÊÇÖйú°²È«ÐÐÒµ×îÔç³ÉÁ¢µÄ¹¥·À¼¼Êõ×êÑг¢ÊÔÊÒÖ®Ò»£¬£¬Î¢ÈíMAPP´òËãÖ÷Ìâ³ÉÔ±£¬£¬¡°ºÚȸ¹¥»÷¡±¸ÅÄîÊ×ÍÆÕß¡£½ØÖÁĿǰ£¬£¬ADLabÒÑͨ¹ý CNVD/CNNVD/NVDB/CVEÀۼư䲼°²È«·ì϶6500Óà¸ö£¬£¬³ÖÐøÎ¬³Ö¹ú¼ÊÍøÂ簲ȫÁìÓòÒ»Á÷Ë®×¼¡£³¢ÊÔÊÒ×êÑз½Ïòº¸Ç»ù´¡°²È«×êÑС¢¡¢Êý¾Ý°²È«×êÑС¢¡¢5G°²È«×êÑС¢¡¢AI+°²È«×êÑС¢¡¢ÎÀÐǰ²È«×êÑС¢¡¢ÔËÓªÉÌ»ù´¡ÉèÊ©°²È«×êÑС¢¡¢Òƶ¯°²È«×êÑС¢¡¢ÎïÁªÍø°²È«×êÑС¢¡¢³µÁªÍø°²È«×êÑС¢¡¢¹¤¿Ø°²È«×êÑС¢¡¢ÐÅ´´°²È«×êÑС¢¡¢Ôư²È«×êÑС¢¡¢ÎÞÏß°²È«×êÑС¢¡¢¸ß¼¶Íþв×êÑС¢¡¢¹¥·ÀÆ¥µÐ¼¼Êõ×êÑС£×êÑгɾÍÀûÓÃÓÚ²úÆ·Ö÷Ìâ¼¼Êõ×êÑС¢¡¢¹ú¶ÈÖØµã¿Æ¼¼ÏîÄ¿¹¥¹Ø¡¢¡¢×¨Òµ°²È«·þÎñµÈ¡£



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