Soumettre #851700: Textplus, Inc. Android https://play.google.com/store/apps/details?id=com.gogii.textplus 8.3.5 Improper Authorizationinformation

TitreTextplus, Inc. Android https://play.google.com/store/apps/details?id=com.gogii.textplus 8.3.5 Improper Authorization
DescriptiontextPlus for Android (com.gogii.textplus) 8.3.5 exposes the activity com.nextplus.android.activity.DialerActivity with android:exported="true" and no permission guard. The activity forwards incoming intent extras into the DialerFragment arguments bundle. DialerFragment.onCreate contains an auto-dial branch that originates an outbound call when the arguments carry both "com.nextplus.android.fragment.INTENT_ADDRESS_TO_CALL" and "com.nextplus.android.fragment.INTENT_DISPLAY_STRING" and no "PHONE_NUMBER" key. A non-JID address is classified as CallAddressType.PSTN and reaches the call stack without any further user action. Any installed application can therefore cause textPlus to place an arbitrary outbound PSTN call. The calling application requires no Android permissions (no CALL_PHONE, none) and no user interaction is needed. Call path on the vulnerable branch: DialerActivity (intent extras -> fragment arguments) -> DialerFragment.onCreate -> DialerFragment.makeCallWithPermissions(addr, PSTN, display) -> CallingServiceImpl.makeCall(...) -> LinphoneCallStack.makeCall(...) InCallActivity and CallingServiceImpl are not exported, so DialerActivity is the sole external attack surface. The manifest-declared tel:/sip: data path is not the trigger: a tel: URI routes through the PHONE_NUMBER branch, which only prefills the dialpad. The dangerous path is reached only through the two extras above, which are not declared anywhere in the manifest. Proof of concept (use a destination you control; the PSTN path consumes account credits). Explicit component bypasses intent-filter matching: adb shell am start -n com.gogii.textplus/com.nextplus.android.activity.DialerActivity --es "com.nextplus.android.fragment.INTENT_ADDRESS_TO_CALL" "+15055034455" --es "com.nextplus.android.fragment.INTENT_DISPLAY_STRING" "poc" Equivalent variant with an explicit action (same result; the action is app-interpreted, not the system Telecom CALL, so no sender permission applies): adb shell am start -a android.intent.action.CALL -n com.gogii.textplus/com.nextplus.android.activity.DialerActivity --es "com.nextplus.android.fragment.INTENT_ADDRESS_TO_CALL" "+15055034455" --es "com.nextplus.android.fragment.INTENT_DISPLAY_STRING" "poc" Observe origination in logcat: makeCall, LinphoneCallStack, CallingServiceImpl. A zero-permission third-party app reproduces this with startActivity to the same explicit component plus the two string extras (only a <queries> package-visibility entry is needed on Android 11+, no uses-permission). Impact: unauthorized outbound call origination driven by any local app without permissions or user interaction. Calls are billed against the victim account and present the victim textPlus number as caller ID, enabling toll abuse and attacker-chosen caller-ID presentation through the victim identity. Remediation: do not auto-originate calls from intent-supplied data; require an explicit in-app user action before makeCallWithPermissions. Set android:exported="false" on DialerActivity or gate it behind a signature-level permission. If external tel:/sip: deep links must be supported, treat them as prefill only and never forward arbitrary intent extras into fragment arguments.
La source⚠️ https://github.com/actuator/com.gogii.textplus
Utilisateur
 Actuator (UID 67941)
Soumission08/06/2026 17:48 (il y a 2 mois)
Modérer03/08/2026 09:04 (2 months later)
StatutAccepté
Entrée VulDB385527 [textPlus Text Message and Call App jusqu’à 8.3.5 sur Android com.gogii.textplus DialerActivity Local Privilege Escalation]
Points20

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!