We analyzed the source code of each proxy app to identify functions which potentially put user privacy at risk when using these apps.
We divided the results of this analysis into two parts, looking first at privacy intrusive functions within first-party and core Android components. Any data generated by these functions would be harvested directly by the developer but could then be potentially sold on or used in other ways to generate a profit.
We also identified any code within third-party libraries that might impact user privacy.
Risky First-party App Code
The following table lists the 10 first-party and core Android app functions we discovered most frequently during our analysis of the apps’ source code that have implications for users’ privacy and/or felt inappropriate for a proxy app.
The table lists the functions in descending order of frequency of detection by number of apps among the 20 proxy apps we tested.
Function |
Found in (apps) |
Queries phone & SIM details |
10 |
Queries the SIM provider mobile country code & mobile network code |
7 |
Queries phone location |
7 |
Queries contact list |
6 |
Queries Android advertiser ID |
6 |
Queries phone & SIM details, inc IMEI number |
4 |
Queries list of installed apps |
4 |
Declares use of GPS |
4 |
Declares use of camera |
4 |
Declares use of camera & autofocus |
3 |
Makes itself visible to major social media platforms |
1 |
Can modify web pages |
1 |
Declares use of microphone |
1 |
Queries phone configuration |
1 |
The functions in the above table can mostly be divided into two broad types. The first and most frequently discovered in our analysis relates to data collection.
Almost three quarters of the apps we tested (13) contained first-party code that collected personal data about users’ devices and SIM cards. This number rises to 15 when also looking at code in third-party libraries. Examples of such code include:
getDeviceId
getImei
getMccMnc
getPhoneType
getNetworkOperator
getNetworkOperatorName
getNetworkCountryIso
getSimOperator
A device’s IMEI number is its unique 15-digit serial number, while getMccMnc
refers to its mobile country code and mobile network code.
Note that IMEI numbers have been protected beind the READ_PRIVILEGED_PHONE_STATE
permssion that’s only available to system apps since Android 10 in 2019. However, older versions of Android, which make up 13% of all devices worldwide, only require the lesser READ_PHONE_STATE
permission to be in place to allow collection of that data.
Screenshot of source code in the Rain Proxy Android app that collects data about a user’s phone and SIM card.
As well as detecting first-party code that enables tracking of users’ online behavior by identifying their devices, we also frequently discovered code that tracked users’ physical location in functions either created directly by the app developer, or within core Android components. Note that we excluded common components with clearly benign functionality, such as Android’s night mode that makes use of a device’s approximate location to determine when to dim the lights.
Four apps contained code that creates a list of all other apps installed on a user’s device. Google explicitly states that the “inventory of installed apps queried from a user’s device [is] personal and sensitive information”, which should only be accessed by apps whose core functionality requires it. It’s clear that proxy apps don’t meet this criterion and should not contain such code.
The other type of first-party code we discovered related to inappropiate use of hardware, such as the camera or microphone. Four apps contained such code, while one of them (UPX) featured code for both mic and camera. There’s no credible reason why a proxy app should contain first-party code of this kind.
Screenshot of source code in the UPX proxy Android app that invokes the device camera and microphone.
Risky Third-party App Code
The following table lists the types of third-party code that we discovered most frequently during our analysis of the apps’ source code that have implications for users’ privacy and/or felt inappropriate for a proxy app.
The table lists these third-party library functions in descending order of frequency of detection in the 20 proxy apps we tested.
Function |
Found in (apps) |
Contains third-party tracking code |
18 |
Queries phone location |
9 |
Queries phone & SIM details |
8 |
Queries Android advertiser ID |
7 |
Queries contact list |
2 |
Queries device ID |
1 |
Creates a geolocation record |
1 |
Connects to Yandex |
1 |
Most common third-party SDK providers
The following chart shows the five third-party providers of SDKs with protential privacy impacts that we found most frequently in our app code analysis. They are ordered by the number of apps containing an SDK published by that provider. There were 11 providers in total whose SDKs we flagged as a potential privacy risk.
Chart showing the 5 third-party SDKs with privacy implications most frequently found in the proxy apps we tested.
The privacy impacts of Facebook SDKs are well-documented, and while Google has promised to phase out cross-app tracking, this won’t be fully in place until 2024.[3][4]
These SDKs contained code that variously queried device location, device and SIM details and the Android Ad ID in order to better track proxy app users.
Applovin is a mobile app adtech platform, part of which is an ad exchange. Notably, the company recently acquired MoPub, which prior to acquisition was exposed for selling location data from Grindr.[5]
As well as looking up the same personal data as the Facebook and Google SDKs, Applovin code also connected with Russian search company Yandex.
Adjust is another tracking platform in a similar vein to Applovin.
Yandex and Bytedance
We found four apps that contained code from the Yandex AppMetrica SDK, which is the Russian search engine’s multi-purpose ad tracking and analytics platform. User data harvested by AppMetrica is processed and stored on Russian servers, while Yandex has close ties to the Kremlin.[6] Given Russia’s draconian approach to internet freedom, we would certainly advise against using apps that funnel your personal data into that jurisdiction.
Another app contained the Bytedance SDK, which is similarly risky from a privacy perspective. The TikTok developer remains under a cloud due to its suspect privacy practices and revelations that the Chinese company spied on journalists who had been critical of Bytedance via their smartphones.[7]
The SDK allows developers to share user data with TikTok. Its documentation explicitly states: “We may use this app event data for subsequent retargeting and dynamic product ads”.