GA»Æ½ð¼×ADLab£ºChrome ËÁÒâ´úÂëÖ´Ðзì϶·ÖÎö

°ä²¼¹¦·ò 2021-04-16

4ÔÂ13ÈÕ £¬¹ú±í°²È«×êÑÐÈËÔ±ÔÚÉ罻ýÌåÉϰ䲼ÁËChrome µÄ0Day ·ì϶£¨°Ý¼û²Î¿¼Á´½Ó[1]£© £¬·ì϶±àºÅΪCVE-2021-21220 £¬²¢ÔÚgithubÉϹ«¿ªÁ˸÷ì϶µÄPOCÒÔ¼°ÀûÓôúÂë £¬ÓйصÄÀûÓôúÂëÔڹعØÉ³ºÐµÄÇé¿öÏ¿ɴﵽԶ³Ì´úÂëÖ´ÐС£ÓÉÓÚchromium Óйؿò¼ÜµÄ¿í·ºÀûÓà £¬¸Ã·ì϶ÔÚÆäËûä¯ÀÀÆ÷»ò¾ç±¾ÒýÇæÖÐÈÔÓдæÔڵĿÉÄÜ¡£¸Ã·ì϶ÔÚchrome 90.0.4430.72°æ±¾ÒѾ­½¨¸´ £¬ÌáÐÑ¿í´óÓû§ÊµÊ±¸üе½×îа汾£¨°Ý¼û²Î¿¼Á´½Ó[2]£© £¬ÒÔ¶ã±Ü¸Ã·ì϶´æÔڵĹ¥»÷·çÏÕ¡£


GA»Æ½ð¼×ADLab·ÖÎö·¢ÏÖ £¬¸Ã·ì϶´æÔÚÓÚChrome µÄJavaScript ½âÎöÒýÇæV8ÖÐ £¬POCÖØÒª´úÂëÈçÏ£º


1.png


ÔÚPOC line4Ö´ÐÐÒì»ò²Ù×÷,(2**31)^0=-2147483648¡£Æ¾¾ÝECMA³ß¶È£¨°Ý¼û²Î¿¼Á´½Ó[3]£© £¬Òì»òµÄÁ˾ÖÊÇ32λÕûÊý£º


2.png


ÔÚv8 SimplifiedLowering½×¶Î £¬Ôö³¤Á˶ÔÒì»òµÄÁ˾ÖÖ´ÐÐChangeInt32ToInt64µÄ²Ù×÷£º


3.png


SimplifiedLowering Ö´Ðкó £¬Òì»òµÄÀàÐͱ»ÏóÕ÷ΪWord32:


4.png


ÔÚMachineOperatorOptimizer½×¶Î £¬ÓÉÒò¶øºÍ0×öÒì»ò £¬ËùÒÔÓÃ×ó²Ù×÷Êý°ü°ìÒì»ò²Ù×÷¡£


5.png


´ËʱµÄ½á¹¹Í¼ÈçÏ £¬Äܹ»¿´³öÒì»òµÄÁ˾ÖÊÇWord32|TypeUint32:


6.png


ÔÚÖ¸ÁîÑ¡Ôñʱ £¬¶ÔÓÚVisitChangeInt32ToInt64²Ù×÷ £¬Æ¾¾ÝÆäÊäÈëÀàÐÍÑ¡Ôñ²Ù×÷Â룺


7.png


ËùÒÔ £¬ÕâÀïµÄ²Ù×÷ÂëÊÇkX64Movl²Ù×÷Âë £¬¸ÃÖ¸ÁîÔÚ½«Ô´²Ù×÷ÊýÒÆÖÁÖ÷ÕŵØÎ»Ê±²¢²»×ö·ûºÅÀ©´ó £¬ÕâÑùÔÚPOCline4ÖÐxµÄֵΪ2147483649 £¬Òò¶øÔÚpoc line12µÄµØÎ» £¬±àÒëÆ÷ÆäʵʹÓõÄÊÇx=1µÄÖµ×÷Ϊ´´½¨Êý×éµÄ³¤¶È¡£ÕâÊDZàÒëÆ÷Î´ÔøÒâÁϵ½µÄÇé¿ö¡£


ÔÚ±äÁ¿µÄÁìÓò·ÖÎöÖÐ £¬±àÒëÆ÷ÒÔΪ´´½¨µÄÊý×鳤¶ÈÊÇ0:


8.png


 ÔÚÖ´ÐÐPOPʱ £¬»áÏÈÅжÏÊý×éµÄ³¤¶ÈÊÇ·ñΪ0 £¬ÈôÊDz»ÊǾͻὫÆä³¤¶È¼õ1£º


9.png


ÓÉÓÚÊý×鳤¶È¹Ì¶¨ £¬±àÒëÆ÷ÔÚLoadElimination µÄ¹ý³ÌÖÐ»á½øÐг£Á¿ÕÛµþ £¬ÔÚ´úÂëõè¾¶×ßµ½ÕâÀïµÄʱ³½Í¨¹ýStoreField²Ù×÷½«Êý×éµÄ³¤¶ÈÖ±½Ó¸³ÖµÎª-1£º


10.png

11.png


ÓÉÒò¶øsmi £¬ËùËùÒÔ0xfffffffe£º


12.png


´òÓ¡Êý×鳤¶È£º


13.png

Õâʱ³¬³¤µÄÊý×é¾Í³ö¯ÁË £¬ÈÎÓÉÄãÍæÁË¡£´Ó²¹¶¡¶Ô±ÈÉÏÀ´¿´£¨°Ý¼û²Î¿¼Á´½Ó[4]£© £¬¶ÔÓÚChangeInt32ToInt64½«ÆäÊäÈë×÷ΪÓзûºÅ¶Ô´ý £¬ÕâÑù¾ÍÔ¤·ÀÁ˸÷ì϶ͨ¹ý¸Ãõè¾¶´¥·¢¡£


14.png


¹ØÓÚÀûÓõIJ¿ÃÅ £¬¸ù»ùÊÇÀÏÌ×· £¬ÕâÀï¾Í²»ÔÙ׸Êö¡£


²Î¿¼Á´½Ó£º

[1]https://twitter.com/r4j0x00/status/1381643526010597380

[2]https://www.google.com/chrome/

[3]https://www.ecma-international.org/publications-and-standards/standards/ecma-262/

[4]https://chromium-review.googlesource.com/c/v8/v8/+/2820971/3/src/compiler/backend/x64/instruction-selector-x64.cc#1379


GA»Æ½ð¼×»ý¼«·ÀÓù³¢ÊÔÊÒ£¨ADLab£©


ADLab³ÉÁ¢ÓÚ1999Äê £¬ÊÇÖйú°²È«ÐÐÒµ×îÔç³ÉÁ¢µÄ¹¥·À¼¼Êõ×êÑг¢ÊÔÊÒÖ®Ò» £¬Î¢ÈíMAPP´òËãÖ÷Ìâ³ÉÔ± £¬¡°ºÚȸ¹¥»÷¡±¸ÅÏëÊ×ÍÆÕß¡£½ØÖ¹Ä¿Ç° £¬ADLabÒÑͨ¹ýCVEÀۼư䲼°²È«·ì϶½ü1100¸ö £¬Í¨¹ý CNVD/CNNVDÀۼư䲼°²È«·ì϶1000Óà¸ö £¬³ÖÐøÎ¬³Ö¹ú¼ÊÍøÂ簲ȫÁìÓòÒ»Á÷Ë®×¼¡£³¢ÊÔÊÒ×êÑз½Ïòº­¸Ç²Ù×÷ϵͳÓëÀûÓÃϵͳ°²È«×êÑÓ×¢ÖÇÄÜÖն˰²È«×êÑÓ×¢ÎïÁªÍøÖÇÄÜÉ豸°²È«×êÑÓ×¢Web°²È«×êÑÓ×¢¹¤¿ØÏµÍ³°²È«×êÑÓ×¢ÔÆ°²È«×êÑС£×êÑгɾÍÀûÓÃÓÚ²úÆ·Ö÷Ìâ¼¼Êõ×êÑÓ×¢¹ú¶È³Áµã¿Æ¼¼ÏîÄ¿¹¥¹Ø¡¢×¨Òµ°²È«·þÎñµÈ¡£


adlab.jpg