Az intentalapú eltérítési sebezhetőség elhárítása

Az alábbi tudnivalók az intentalapú eltérítési sebezhetőség (Intent Scheme Hijacking Vulnerability) által érintett alkalmazások fejlesztőinek szólnak.

Mi történik?

Egy vagy több alkalmazásod intentalapú eltérítési sebezhetőséget tartalmaz, melyen keresztül kártékony hálózatok és webhelyek privát alkalmazás-összetevőkhöz férhetnek hozzá. A Play Console felületén lévő értesítésben további információt találhatsz. A Play Console felületén látható határidők után eltávolítjuk a Google Playről azokat az alkalmazásokat, amelyekben még megtalálható a sebezhetőség.

Teendők

  1. Jelentkezz be a Play Console felületén, majd tekintsd át az Értesítések oldalon az érintett alkalmazásokat és a problémák megoldásának határidőit.

  2. Frissítsd az érintett alkalmazásokat a lent megjelölt lépésekkel.

  3. Küldd be az érintett alkalmazások frissített verzióit.

A beküldés után alkalmazásodat ismét ellenőrizzük. A folyamat több órát is igénybe vehet. Ha az alkalmazás megfelel az ellenőrzésen, és ezt követően közzétesszük, nincs más teendőd. Ha az alkalmazás nem felel meg az ellenőrzésen, akkor nem tesszük közzé az új verziót, és e-mailben értesítést küldünk a fejleményről.

Részletek

Azok a WebView-k, amelyek nem megbízható webtartalmakat nyitnak meg, ahol az Intent.parseUri segítségével intent:// linkeket értelmeznek, majd ezeket az intenteket a startActivity segítségével továbbítják, sebezhetők az intentalapú eltérítéssel szemben. A WebView-k rosszindulatú webes tartalmak által rávehetők arra, hogy tetszőleges „intent” elemeket küldjenek privát alkalmazás-összetevőknek. Ez olyan jogosulatlan műveletekre ad lehetőséget, mint például az ezen komponensek által manipulált privát alkalmazásadatok eltulajdonítása. Fontos, hogy nem megbízható webtartalomnak minősülnek a megbízható domainek HTTP-n betöltött tartalmai is.

Javasoljuk, hogy a sebezhetőséget az alábbi megoldások valamelyikével hárítsd el:

1. lehetőség: Akadályozd meg, hogy a WebView-k tetszőleges intent elemeket küldhessenek

Az alábbi kódrészlettel úgy korlátozhatók az Intent.parseUri segítségével létrehozott intentek, hogy az alkalmazás csak a BROWSABLE intentszűrővel rendelkező komponenseknek küldhesse el őket Implicit intentként:

     // convert Intent scheme URL to Intent object
  Intent intent = Intent.parseUri(url);
  // 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
  view.getContext().startActivity(intent, -1);

2. lehetőség: Akadályozd meg, hogy a WebView-k nem megbízható webtartalmakat töltsenek be

Ha olyan WebView-t használsz, amelynek mindenképpen tetszőleges intent:// URL-eket kell feldolgoznia, akadályozd meg, hogy megbízhatatlan webtartalmakat töltsön be. Megbízhatatlannak minősülnek a titkosítás nélküli kapcsolaton betöltött webtartalmak is. Fejlesztőként hamisra állíthatod az android:usesCleartextTraffic attribútumot az alkalmazáshoz tartozó Manifest fájlban, vagy használhatod a HTTP-forgalmat tiltó Network Security Config funkciót. Alternatív megoldásként megakadályozhatod, hogy az érintett WebView-k HTTP-sémát alkalmazó URL-eket töltsenek be a loadUrl segítségével.

Érdemes gondoskodnod arról is, hogy az érintett WebView-k ne tölthessenek be nem megbízható forrásokból – pl. nem megbízható intent elemektől – származó korlátozás nélküli URL-eket. 

Örömmel segítünk
A sebezhetőségre vonatkozó technikai jellegű kérdéseidet tedd fel a Stack Overflow webhelyén, az „android-security” címke használatával. Ha a probléma megoldásának lépéseire vonatkozóan szeretnél tisztázni valamit, vedd fel a kapcsolatot fejlesztőtámogatási csapatunkkal.