Webview Attacks

Support HackTricks

Mwongozo juu ya Mipangilio ya WebView na Usalama

Muhtasari wa Uhalifu wa WebView

Sehemu muhimu ya maendeleo ya Android inahusisha kushughulikia WebViews kwa usahihi. Mwongo huu unasisitiza mipangilio muhimu na mbinu za usalama ili kupunguza hatari zinazohusiana na matumizi ya WebView.

Upatikanaji wa Faili katika WebViews

Kwa kawaida, WebViews zinaruhusu upatikanaji wa faili. Kazi hii inasimamiwa na njia ya setAllowFileAccess(), inayopatikana tangu kiwango cha API ya Android 3 (Cupcake 1.5). Programu zenye ruhusa ya android.permission.READ_EXTERNAL_STORAGE zinaweza kusoma faili kutoka kwa hifadhi ya nje kwa kutumia mpango wa URL wa faili (file://path/to/file).

Vipengele Vilivyopitwa na Wakati: Upatikanaji wa Kijumla na Upatikanaji wa Faili Kutoka kwa URLs

  • Upatikanaji wa Kijumla Kutoka kwa URLs za Faili: Kipengele hiki kilichopitwa na wakati kiliruhusu maombi ya kuvuka mipaka kutoka kwa URLs za faili, na kuleta hatari kubwa ya usalama kutokana na mashambulizi ya XSS. Mipangilio ya kawaida imezimwa (false) kwa programu zinazolenga Android Jelly Bean na mpya.

  • Ili kuangalia mipangilio hii, tumia getAllowUniversalAccessFromFileURLs().

  • Ili kubadilisha mipangilio hii, tumia setAllowUniversalAccessFromFileURLs(boolean).

  • Upatikanaji wa Faili Kutoka kwa URLs za Faili: Kipengele hiki, pia kilichopitwa na wakati, kilidhibiti upatikanaji wa maudhui kutoka kwa URLs zingine za mpango wa faili. Kama upatikanaji wa kijumla, mipangilio yake ya kawaida imezimwa kwa usalama zaidi.

  • Tumia getAllowFileAccessFromFileURLs() kuangalia na setAllowFileAccessFromFileURLs(boolean) kuweka.

Kuhifadhi Faili kwa Usalama

Ili kuzima upatikanaji wa mfumo wa faili wakati bado unapata mali na rasilimali, njia ya setAllowFileAccess() inatumika. Pamoja na Android R na zaidi, mipangilio ya kawaida ni false.

  • Angalia kwa getAllowFileAccess().

  • Washa au zima kwa setAllowFileAccess(boolean).

WebViewAssetLoader

Darasa la WebViewAssetLoader ni njia ya kisasa ya kupakia faili za ndani. Linatumia http(s) URLs kwa ajili ya kupata mali na rasilimali za ndani, likikubaliana na sera ya Same-Origin, hivyo kurahisisha usimamizi wa CORS.

loadUrl

Hii ni kazi ya kawaida inayotumika kupakia URLs zisizo na mpangilio katika webview:

webview.loadUrl("<url here>")

Ofc, mshambuliaji wa uwezekano hapaswi kamwe kuwa na uwezo wa kontroli URL ambayo programu itakuwa inaload.

JavaScript na Usimamizi wa Mpango wa Intent

  • JavaScript: Imezuiliwa kwa default katika WebViews, inaweza kuwezeshwa kupitia setJavaScriptEnabled(). Tahadhari inashauriwa kwani kuwezesha JavaScript bila ulinzi sahihi kunaweza kuleta udhaifu wa usalama.

  • Mpango wa Intent: WebViews zinaweza kushughulikia mpango wa intent, ambayo inaweza kusababisha matumizi mabaya ikiwa haitasimamiwa kwa makini. Mfano wa udhaifu ulijumuisha parameter ya WebView iliyo wazi "support_url" ambayo inaweza kutumika kutekeleza mashambulizi ya cross-site scripting (XSS).

Mfano wa matumizi mabaya ukitumia adb:

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

Javascript Bridge

Kipengele kinatolewa na Android ambacho kinamwezesha JavaScript katika WebView kuita kazi za programu asilia za Android. Hii inapatikana kwa kutumia njia ya addJavascriptInterface, ambayo inachanganya JavaScript na kazi za asilia za Android, inayoitwa WebView JavaScript bridge. Tahadhari inashauriwa kwani njia hii inaruhusu kurasa zote ndani ya WebView kufikia kitu cha JavaScript Interface kilichosajiliwa, ikileta hatari ya usalama ikiwa taarifa nyeti zitafichuliwa kupitia interfaces hizi.

  • Tahadhari kubwa inahitajika kwa programu zinazolenga toleo la Android chini ya 4.2 kutokana na udhaifu unaoruhusu utekelezaji wa msimbo wa mbali kupitia JavaScript mbaya, ikitumia reflection.

Kutekeleza JavaScript Bridge

  • JavaScript interfaces zinaweza kuingiliana na msimbo wa asilia, kama inavyoonyeshwa katika mifano ambapo njia ya darasa inafichuliwa kwa JavaScript:

@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
  • JavaScript Bridge inaruhusiwa kwa kuongeza interface kwenye WebView:

webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
  • Uwezekano wa kutumia JavaScript, kwa mfano, kupitia shambulio la XSS, unaruhusu wito wa mbinu za Java zilizofichuliwa:

<script>alert(javascriptBridge.getSecret());</script>
  • Ili kupunguza hatari, punguza matumizi ya daraja la JavaScript kwa msimbo uliotumwa na APK na kuzuia upakiaji wa JavaScript kutoka vyanzo vya mbali. Kwa vifaa vya zamani, weka kiwango cha chini cha API kuwa 17.

Utekelezaji wa Msimbo wa K remote kwa Kutumia Reflection (RCE)

  • Njia iliyoandikwa inaruhusu kufikia RCE kupitia reflection kwa kutekeleza payload maalum. Hata hivyo, annotation ya @JavascriptInterface inazuia ufikiaji wa njia zisizoidhinishwa, ikipunguza uso wa shambulio.

Urekebishaji wa Mbali

  • Urekebishaji wa mbali un posible na Chrome Developer Tools, ukiruhusu mwingiliano na utekelezaji wa JavaScript bila mipaka ndani ya maudhui ya WebView.

Kuwezesha Urekebishaji wa Mbali

  • Urekebishaji wa mbali unaweza kuwezeshwa kwa WebViews zote ndani ya programu kwa:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
  • Ili kuwezesha ufuatiliaji kwa masharti kulingana na hali ya debuggable ya programu:

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

Exfiltrate arbitrary files

  • Inaonyesha uhamasishaji wa faili za kawaida kwa kutumia 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);

References

Support HackTricks

Last updated