Thursday, March 7, 2019

Android Messaging: A Few Bugs Short of a Chain

Posted by Natalie Silvanovich, Project Zero

About a year and a half ago, I did some research into Android messaging and mail clients. At cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time, I didn’t blog about it, because though I found bugs, I wasn’t able to assemble cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m into a credible attack. However, in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 spirit of writing about research that didn’t go as expected, I have decided to share it now. I think cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is something interesting to learn about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 impact of design choices on security from this research.

Applications Reviewed
I reviewed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following applications: Messages (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 default Android SMS application), Gmail for Android, Microsoft Outlook, Facebook Messenger, WhatsApp, Signal and Telegram, which represent some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most popular messaging and mail apps on Google Play.

Architecture, Attack Surface and Test Set-up
At a high level, messaging clients have a similar architecture. They communicate with a server that is responsible for locating cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 recipient that a user wants to communicate with and generally maintains cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 messaging session. Messages are also transmitted through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server, and clients that support end-to-end encryption can include some sort of encrypted envelope in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se messages, that are passed directly to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 recipient.

Though cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir protocols differ substantially, Facebook Messenger, WhatsApp and Telegram all use a layered approach, where messages can contain fields of different types with a hierarchy.  Telegram’s protocol is documented publicly. A single message can include pieces for both cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 receiving client.

I started by looking at how unencrypted messages were handled by Facebook messenger, but this turned out to be a challenging attack surface. There were many protocols that could be used to send messages (such as mobile and web APIs), but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y were processed substantially before cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message was received by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target device. This made it difficult to know whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r any attack surface in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 client was reachable. Therefore, I decided to focus on encrypted messages, as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server is not able to filter those.

I did not have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source for Facebook Messenger or WhatsApp, so I was only able to analyze cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 smali extracted from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 APKs for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se applications with apktool. The popularity of signal protocol simplified finding cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 encryption portion of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se applications, as I was able to search for strings in libsignal. I cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n added a function that sent each message to a server I control and gave me cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 option to alter it before encrypting it. This gave me cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ability to test malformed encrypted  messages.

Testing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mail and SMS clients were easier. For cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Messaging app, I sent raw SMS messages using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sendDataMessage API from an app I wrote for an Android device. For cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mail clients, I sent MIME messages directly using an SMTP server.  

Results Overview
Please note that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se results are over a year old, and messaging clients have high code churn, so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 clients may be different now. All cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 vulnerabilities discussed in this section have been fixed.

Messages


The default Android Messages app is largely written in Java, and uses cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 AOSP SMS and MMS processing to parse messages. It has a fairly low risk of memory corruption vulnerabilities due to this. Android processes some special SMS messages differently, which increases cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 risk of receiving cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se messages. Some messages are interpreted as OMTP for Visual Voicemail messages, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processing of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se messages, as well as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 IMAP functionality used by Visual Voicemail are implemented in Java and contain cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 minimum necessary functionality. Android once supported SUPL (an SMS protocol for GPS ephemeris updates) parsing in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user space as well, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 intent handlers for it are still in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS stack. However, Qualcomm’s baseband handles cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se messages directly now, so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y will not make it to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user space on newer devices. The main risk of vulnerabilities in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Messages app is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 libraries used to process incoming media files. Many vulnerabilities have been discovered in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se components in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 past, though fewer have been reported recently, and media is processed by a low-privileged process. I did not find any vulnerabilities in Messages.

Gmail


The Gmail app processes MIME messages provided by an IMAP, POP or ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r server. The contents of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 MIME message usually comes directly from anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r user, though mail servers sometimes do some filtering. Gmail uses some underlying mail APIs in AOSP, and both cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 underlying APIs are implemented entirely in Java. I reported one directory traversal issue in Gmail due to attachment downloads.

Outlook


The Microsoft Outlook app is similar to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Gmail app in functionality. It also processes MIME provided by anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r server, however all of its protocol processing is done by code within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app. The application is written mostly in Java, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing native functionality is used for metrics and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r features not related to mail. I reported a directory traversal issue similar to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one in Gmail in Outlook.

Facebook Messenger


Facebook Messenger is a large application compared to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r messaging applications I reviewed, and it was difficult to determine cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 functionality of a lot of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code. It contains a large number of native libraries, which are updated dynamically from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Facebook server on a nearly daily basis. Few of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m seemed to be directly involved processing messages, though.

Facebook messenger communicates with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server using a protocol called Messaging Queue Telemetry Transport (MQTT). Underneath cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 MQTT is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 thrift protocol, which is open source. The application contains both cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Java and C++ version of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 library, but only cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Java one appears to be used. I reviewed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se protocols, but did not find any vulnerabilities affecting Facebook Messenger.

WhatsApp


WhatsApp uses a layered protocol that is mostly implemented in Java. A small amount of message handling code used to process voice and video call requests is implemented in native code, which I discussed in this post. I did not find any vulnerabilities in WhatsApp messaging

Telegram


Telegram is open source and its APIs are publicly documented. It contains a fair amount of native code, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code is mostly used to process device-to-server messages, as opposed to device-to-device messages. The attack surface available to a remote attacker is almost entirely in Java. I found one vulnerability in Telegram, which was also a directory traversal vulnerability related to attachments.

Signal


Signal is largely implemented in Java, and has a fairly small attack surface. Its protocols are well documented. I did not find any vulnerabilities in Signal.

Do These Bugs Matter?
Overall, I found three directory traversal vulnerabilities in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se clients. They were surprisingly similar, all related to attachment names being allowed to contain special characters when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are downloaded. Directory traversal issues are fairly common in Android applications, likely in part due to how forgiving Java APIs are with regards to file names.

These bugs had some limitations though. To start, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bugs in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Gmail and Outlook mail clients only work when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 client is being used with non-standard email addresses (i.e. Gmail is being used with a non-Gmail account or Outlook is being used with a non-Outlook email address). Both of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se clients are widely used for this purpose, but this does mean cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se bugs will not impact every user. The bugs also require cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user to download an attachment.

But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are also some limitations that affect exploitability. To start, none of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se issues can overwrite a file that exists, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y can only write a new file. So cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re needs to be somewhere an attacker can place a file that is processed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system, but does not already exist. Secondly, applications on Android have limited permissions, and typically cannot write outside of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir application directory.

The Telegram issue probably is exploitable, as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re happened to be a configuration file that did not exist by default, but Telegram would process it if it existed, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 processing code had a memory corruption vulnerability in it. I couldn’t find anything like this for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mail clients, though.

One idea I had was to look for a vulnerability in SQLite, as Gmail and Outlook use SQLite databases to store a variety of data. SQLite supports journaling, which means that when a SQLite database is changed, a journal file is written first, so that if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system crashes or loses power during cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 write, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 database is not corrupted. If this occurs, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 journal file will exist cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next time cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 database is accessed, and SQLite knows to restore it. Ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 journal file will be deleted when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 write is completed successfully. This means that a SQLite database can be altered by writing a journal file with a specific name in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same directory, and this file does not generally already exist.

I tried this, and was able to alter databases, but none of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m seemed to allow me to escalate privileges or perform unpermitted operations ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than altering what mail a user sees in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app. Looking for something more generic, I considered cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 possibility of finding a bug in how SQLite parses journal files or database files.

I fuzzed both database loading and journal handling using AFL. I found four bugs, three of which I think are unexploitable, and one which is very borderline in terms of exploitability.

I could not find any more ways to exploit a directory traversal that cannot overwrite a file in an Android application, so I’m not convinced that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se directory traversal attacks would be especially valuable to attackers.

Conclusion
I reviewed several Android messaging and mail applications. I found three directory traversal bugs, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se bugs had some limitations, and it is not clear if this type of bug is exploitable in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 generic case.

These bugs were very similar, and point to challenges in correctly handling file paths in Android Java. The two bugs in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mail clients only occurred when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application was used with an email address which is not managed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 maker of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application, despite it being a common use case,  which suggests this could be an under-tested or under-reviewed feature of mail clients. For cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most part, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se clients were implemented in Java, which made it more difficult to find bugs in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, as memory corruption attacks were not available.

This research focused on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 portions of mail and messages that are not processed by an intermediary server, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365refore allow an attacker to send any data to be processed without filtering. While cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 easiest to attack, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se features are only a part of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack surface of a messaging or mail client. I will likely investigate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server-mediated features of messaging clients in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 future.

No comments:

Post a Comment