¡¾¸´ÏÖ¡¿Chrome V8¶ÑɳÏäÈÆ¹ý¶ÈÎö

°ä²¼¹¦·ò 2025-04-30

1.×êÑв¼¾°


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ɳÏäµÄ²½Öè¡£¡£ ¡£¡£¡£¡£8827Ì«Ñô¼¯ÍÅADLab×êÑÐÈËÔ±×ųÁ·ÖÎö¸´ÏÖÁ˸ÃV8ɳÏäµÄÈÆ¹ý²½Ö裬£¬£¬£¬£¬£¬²¢ÌáÐÑGoogle ChromeÓû§ÊµÊ±¸üÐÂä¯ÀÀÆ÷£¬£¬£¬£¬£¬£¬Ô¤·ÀÊܵ½NDayÍþв¡£¡£ ¡£¡£¡£¡£


2.V8ɳÏä


V8ɳÏäµÄ³öÏÖ£¬£¬£¬£¬£¬£¬½«¹ý³ÌµØÖ·¿Õ¼ä·ÖΪV8ɳÏäÄÚ´æºÍV8ɳÏä±íÄڴ棬£¬£¬£¬£¬£¬ÎªÁËÔ¤·ÀËÁÒâÄÚ´æ¶Áд£¬£¬£¬£¬£¬£¬²»ÈÝʹÓÃΣÏÕµÄԭʼָÕë¡£¡£ ¡£¡£¡£¡£É³ÏäÄڵĶÔÏóͨ¹ý¶ÔɳÏä»ùµØÖ·µÄÆ«ÒÆÒýÓᣡ£ ¡£¡£¡£¡£ÈçÏÂÃæµÄArrayBufferµÄÄÚ´æ²¼¾Ö£¬£¬£¬£¬£¬£¬ºó¶Ë´æ´¢Êý¾ÝµÄԭʼָÕ루×ÏÉ«²¿ÃÅ£©ÓÉɳÏä»ùÖ·Æ«ÒÆÈ¡´ú£º


ͼƬ1.png


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


ͼƬ2.png


V8ɳÏäµÄ³öÏÖÔö³¤ÁËÀûÓÃÁ´µÄ³¤¶È£¬£¬£¬£¬£¬£¬¿Ï¶¨Ë®Æ½ÉÏÏ÷¼õÁËV8·ì϶¶Ôä¯ÀÀÆ÷°²È«´øÀ´µÄ¹¥»÷Íþв¡£¡£ ¡£¡£¡£¡£¹¥·ÀÏàÉúÏà¿Ë£¬£¬£¬£¬£¬£¬ÔÚpwn2own2024½ÇÖðÖУ¬£¬£¬£¬£¬£¬Manfred Paul¾ÍÀûÓÃÒ»¸öÕûÊýÒç¶Âí½ÅÈÆ¹ýÁËV8ɳÏä¡£¡£ ¡£¡£¡£¡£


3.·ì϶·ÖÎö


ÔÚɳÏä³öÏÖǰ£¬£¬£¬£¬£¬£¬Í¨¹ýArrayBufferÒÔ¼°Æä¶ÔÓ¦µÄTypedArrayºó¶Ë´æ´¢¿ÉÓÐЧ½ÚÔìËÁÒâÄÚ´æ¶Áд¡£¡£ ¡£¡£¡£¡£´ÓÉÏÃæµÄArrayBufferµÄÄÚ´æ²¼¾Ö¿ÉÖª£¬£¬£¬£¬£¬£¬´Ë¿Ìºó¶Ë´æ´¢Ö¸Õë±»´úÌæÎªÉ³ÏäÖ¸Õ룬£¬£¬£¬£¬£¬²¢ÇÒ³¤¶È±»ÏÞ¶ÈÔÚ235 £¬£¬£¬£¬£¬£¬ÓÐЧ×èÖ¹ÁËÀûÓÃÕâÖÖ²½ÖèËÁÒâ¶Áд¡£¡£ ¡£¡£¡£¡£


Ëæ×ÅResizable ArrayBufferµÄ³öÏÖ£¬£¬£¬£¬£¬£¬¶ÔArrayBufferºÍSharedArrayBufferÒÔ¼°ËûÃǵÄType ViewµÄ½Ó¼û±äµÃÔ½·¢¸´ÔÓ¡£¡£ ¡£¡£¡£¡£¾ßÌåÀ´½²¶ÔÓÚArrayBufferºÍSharedArrayBufferµÄ»ú¹Øº¯ÊýÔö³¤ÁËmaximum length£¬£¬£¬£¬£¬£¬ArrayBuffer¿ÉÄÜËæÊ±Ôö³¤ºÍËõ¼õ»º´æ´óÓ×£¬£¬£¬£¬£¬£¬¶øSharedArraybuffer¿ÉÄÜËæÊ±Ôö³¤»º´æ´óÓס£¡£ ¡£¡£¡£¡£ÔÚ¶ÔÏó´´½¨ºó»º´æµÄ¶¯Ì¬±ä¶¯£¬£¬£¬£¬£¬£¬ÒÔÖÁÿ´Î½Ó¼ûºó¶Ë»º´æ¶¼Òª³ÁÐÂÍÆË㻺´æµÄ³¤¶È¡£¡£ ¡£¡£¡£¡£


ͼƬ3.png


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


ͼƬ4.png


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


ͼƬ5.png


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£º


ͼƬ6.png


V8ɳÏäµÄÄÚ´æÁìÓòÊÇÔÚ1TBµÄµØÖ·¿Õ¼ä£¬£¬£¬£¬£¬£¬·¨Ê½ÔÚ¶Ô0x326600002000ɳÏä±íµÄ²»³ÉдÄڴ渳ֵ£¨0x88£©Ê±³öÏÖ±ÀÀ££º


ͼƬ7.png

ͼƬ8.png


5.·ì϶½¨¸´


ÔÚBuidLengthº¯Êý³¤¶ÈÍÆËã֮ǰ£¬£¬£¬£¬£¬£¬Ôö³¤Á˶Ôbyte_offsetºÍbyte_lengthµÄ±ÈÁ¦£¬£¬£¬£¬£¬£¬Ô¤·À³öÏÖÕûÊýÒç³ö£º


ͼƬ9.png


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



8827Ì«Ñô¼¯ÍÅ»ý¼«·ÀÓù³¢ÊÔÊÒ£¨ADLab£©


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


adlab.jpg