0X01
ǰÑÔ
Intent scheme urlÊÇÒ»ÖÖÓÃÓÚÔÚwebÒ³ÃæÖÐÆô¶¯ÖÕ¶Ëapp activityµÄÌØÊâURL£¬ÔÚÕë¶Ôintent
scheme URL¹¥»÷´ó±¬·¢Ö®Ç°£¬ºÜ¶àandroidµÄä¯ÀÀÆ÷¶¼Ö§³Öintent scheme url¡£
Intent scheme urlµÄÒýÈëËäÈ»´øÀ´ÁËÒ»¶¨µÄ±ã½ÝÐÔ£¬µ«´ÓÁíÍâÒ»·½Ãæ¿´£¬¸ø¶ñÒâ¹¥»÷Ò³ÃæÍ¨¹ýintent-based¹¥»÷ÖÕ¶ËÉÏÒѰ²×°Ó¦ÓÃÌṩÁ˱ãÀû£¬¾¡¹Üä¯ÀÀÆ÷appÒѾ²ÉÈ¡ÁËÒ»¶¨µÄ°²È«²ßÂÔÀ´¼õÉÙÕâÒ»Àà·çÏÕ£¬µ«ÏÔÈ»ÊDz»¹»µÄ¡£
2014Äê3Ô£¬Ò»Æª¹ØÓÚintent scheme url¹¥»÷µÄÎÄÕ£º
Whitepaper ¨C Attacking Android browsers via intent scheme
URLs
Ïêϸ½éÉÜÁËÏà¹ØµÄ¹¥»÷ÊÖ·¨£¬Ö®ºó¹úÄڵĩ¶´ÊÕ¼¯Æ½Ì¨ÉÏ¿ªÊ¼±»ÕâÒ»ÀàÐÍ©¶´Ë¢ÆÁ¡£
0X02 Intent scheme url½âÎö
Ò»¸öintent scheme urlµÄʹÓÃʾÀý£º

Èç¹ûä¯ÀÀÆ÷Ö§³Öintent scheme url£¬ÔÚ¼ÓÔØÁ˸ÄwebÒ³Ãæºó£¬½«¸ù¾ÝurlÉú³ÉÒ»¸öintent£¬²¢³¢ÊÔͨ¹ýintent´òÀ´Ö¸¶¨µÄactivity¡£´Ë¹ý³ÌÖÐä¯ÀÀÆ÷µÄÐèÒªÍê³ÉµÄ¹¤×÷¿ÉÒÔ²ð·ÖΪ3²½£º
Step1:
¸ù¾ÝurlÉú³É¶ÔÓ¦µÄintent object£¬´Ë¹ý³Ìͨ¹ýÒÔÏ´úÂëÍê³É£º
Intent intent = Intent.parseUri(url);
intent scheme urlµÄÄÚÈÝ¿ÉÒÔ¸ù¾ÝÒ»ÏÂÓï·¨¹æÔòÉèÖõıȽÏÍêÉÆ£º
intent:
HOST/URI-path // Optional host #Intent; package=[string]; action=[string]; category=[string]; component=[string]; scheme=[string]; end; |
Step2:
intent¹ýÂË£¬°²È«Æð¼û£¬ºÜ¶àä¯ÀÀÆ÷¶Ôstep1ÖеÄintent object½øÐйýÂË£¬ÒÔµÖÓùintent-based¹¥»÷£¬²»ÓõÄä¯ÀÀÆ÷£¬¹ýÂ˹æÔò¸÷²»Ïàͬ¡£
Step3:
×é¼þµ÷Óã¬×îºóÒ»²½¾ÍÊÇʹÓÃstep2¹ýÂ˺óµÄintentµ÷ÓÃÖ¸¶¨µÄ×é¼þ£¬ä¯ÀÀÆ÷ÖÐÒ»°ãʹÓÃContext#startActivityIfNeeded()
»òÕß Context#startActivity()·½·¨ÊµÏÖ¡£
ÏÂÃæÊǸ÷´óä¯ÀÀÆ÷¶ÔIntent scheme URLµÄÖ§³ÖÇé¿ö £º

0X03¹¥»÷³¡¾°
Ö÷ÒªÓÉÁ½ÖÖ¹¥»÷³¡¾°¡£
ÀàÐÍ1£ºä¯ÀÀÆ÷¹¥»÷
ÒòΪintentÊÇä¯ÀÀÆ÷ÒÀ¾ÝurlÉú³É²¢ÒÔä¯ÀÀÆ÷×Ô¼ºµÄÉí·Ý·¢Ë͵ģ¬Òò´Ë¹¥»÷Õß¶ñÒâÒ³ÃæÖеÄintent scheme
url²»½ö¿ÉÒÔµ÷Æðµ¼³ö×é¼þ£¬»¹¿ÉÒÔµ÷Æð˽ÓÐ×é¼þ¡£
ÀàÐÍ2£ºÖÕ¶ËÉϰ²×°µÄÈÎÒâAPP
intent-based¹¥»÷Ò»°ãÊÇͨ¹ýÖÕ¶ËÉϰ²×°µÄ¶ñÒâappÀ´ÊµÏֵ쬵«Í¨¹ýä¯ÀÀÆ÷¼ÓÔØ°üº¬Ìض¨intent
scheme urlµÄ¶ñÒâÒ³Ãæ£¬¿ÉÒÔʵÏÖ¶ÔÖÕ¶ËÉϰ²×°µÄÈÎÒâappÔ¶³Ìintent-based¹¥»÷µÄЧ¹û¡£ÔÚ2013Äê¶«¾©µÄPwn2OwnÉϱÈÈüÉÏ£¬´Î¹¥»÷·½Ê½±»Ó¦ÓÃÓÚ¹¥ÏÝÈýÐÇSamsung
Galaxy S4¡£
0X04 ¹¥»÷°¸Àý
ÒÔϽéÉÜÈý¸öä¯ÀÀÆ÷µÄintent scheme url¹¥»÷°¸Àý£¬¹¥»÷Ö÷ÒªÔ´ÓÚÕâЩä¯ÀÀÆ÷ÔÚstep2(Ò²¾ÍÊÇintent¹ýÂ˹ý³Ì)ÖдæÔÚȱÏÝ¡£
Opera mobile for Android cookie theft
Operaä¯ÀÀÆ÷ÖÐȱÉÙintent¹ýÂ˲½Ö裬һ´Î¿ÉÒÔͨ¹ý¶ñÒâÒ³ÃæÖеÄintent
scheme urlµ÷Æðä¯ÀÀÆ÷µÄÈÎÒâactivity£¬°üÀ¨Ë½ÓеÄactivity£¬Í¨¹ýÈçϹ¥»÷´úÂë¿ÉÒÔ»ñÈ¡µ½Operaä¯ÀÀÆ÷µÄcookie£º

"com.admarvel.android.ads.AdMarvelActivity"ÊÇOperaä¯ÀÀÆ÷µÄ˽ÓÐ×é¼þ£¬"url=file:///data/data/com.opera.browser/app_opera/cookies"ÊÇOperaä¯ÀÀÆ÷cookieÎļþµÄ´æ·ÅλÖá£
Chrome for Android UXSS (Universal
XSS)
ChromeµÄUXSS©¶´ÀûÓÃÏà¶Ô¸´ÔÓ£¬ÕâÀïÏȽéÉÜÒ»ÏÂIntent Selector¡£Intent
Selector»úÖÆÌṩһÖÖmain intent²»Æ¥ÅäµÄÇé¿öÏ¿ÉÒÔÉèÖÃÌæ²¹µÄ·½°¸¡£ÈçϵÄintent
scheme url£º

ÆäÖС°SEL¡±ÊÇselector intentµÄ±êʶ¡£
ÔÚchromeÖаüº¬ÒÔÏ´úÂ룺
1£ºIntent intent = Intent.parseUri(uri);
2£ºintent.addCategory("android.intent.category.BROWSABLE");
3£ºintent.setComponent(null);
4£ºcontext.startActivityIfNeeded(intent, -1);
µÚ¶þÐÐÌí¼ÓÁËBROWSABLE category(Ä¿±êActivityÔÊÐí±¾Éíͨ¹ý Web ä¯ÀÀÆ÷Æô¶¯£¬ÒÔÏÔʾÁ´½ÓÒýÓõÄÊý¾Ý,ÒԴ˹ýÂË/·ÀֹһЩ²»¸Ã±»µ÷ÆðµÄ×é¼þ±»µ÷Æð)£¬µÚÈýÐн«×齨ÉèÖÃΪnull£¬ÓÃÒÔµÖÓùintent-based¹¥»÷£¬µ«Èç¹ûʹÓÃselector
intent¿ÉÒÔÍêÃÀµÄbypassÒÔÉÏÏÞÖÆ¡£
ÒÔÏÂÊÇandroid chromeÉϵÄÒ»¸öUXSS¹¥»÷µÄPOC:

Old stock browser cookie theft
Android stock browser (com.android.browser)µÄÎÊÌâÀàËÆÓÚandroid
chrome£¬Í¬ÑùÊÇÔÚstep2ÖжÔintentµÄ¹ýÂËÎÊÌ⣬×îÖÕ¹¥»÷Õß¿ÉÒÔµÁÈ¡ä¯ÀÀÆ÷µÄcookie¡£´Ë©¶´¿ÉÄÜÖ»´æÔÚÓÚAndroid
4.3ÒÔϵÄÉ豸£¬Ö®ºóµÄ°æ±¾Öв»Ò»¶¨Ô¤×°stock browser¡£
0X05 ×ܽá
ÓÐЧµÖÓùintent scheme url¹¥»÷µÄ·½·¨Ö÷ÒªÊÇÔÚstep2ÖжÔintent×öÑϸñµÄ°²È«ÏÞÖÆ£º
// convert intent scheme URL to intent object Intent intent = Intent.parseUri(uri); // forbid launching activities without BROWSABLE category intent.addCategory("android.intent.category.BROWSABLE"); // forbid explicit call intent.setComponent(null); // forbid intent with selector intent intent.setSelector(null); // start the activity by the intent context.startActivityIfNeeded(intent, -1); |
0X06 ²Î¿¼
http://www.mbsd.jp/Whitepaper...
ÌÚѶÓù°²È«Îª¿ª·¢ÕßÍÆ³öÁ˰²È«±£»¤·þÎñ£¬ÆäÖаüÀ¨Â©¶´É¨Ãè¡¢Ó¦Óüӹ̡¢SO¼Ó¹ÌµÈ£¬Äܹ»°ïÖúÆóÒµÈí¼þ·¢ÏÖDZÔÚ©¶´·çÏÕ¡¢·ÀÄæÏò¡¢·À´Û¸Ä¡¢·À¶þ´Î´ò°ü¡£ÓÐÐèÇóµÄÍŶӿÉÒԵǼÓù°²È«¹ÙÍøÊÔÓᣠ|