Ethan Nelson-Moore
October 25, 2026 (small edits made on October 26-27)
Summary
My secondary phone, the Maxwest Nitro A65, was infected with Triada malware by a security update a couple months ago. I reported this to Google through multiple avenues and received either no response or nonsensical responses. It is still on Google's list of certified Android devices, and Google Play Protect still reports it as certified. The phone is currently being sold at a deep discount as part of the US government-subsidized Lifeline program which provides phones to people who could not otherwise afford them. I have created a tool that scans Android firmware for malware and have found many more infected devices and novel variants of malware. I plan to publish this tool and more of my findings soon.
Legal disclaimer
Nothing in this post should be construed to imply that any entity mentioned knows about or condones the distribution of malware. The nature of supply chain attacks means that more than likely only the person who committed the attack was aware of it, and preinstalled Android malware has even been included with seemingly legitimate third-party software, such as face unlock solutions (a previous distribution vector for Triada).
Why is this Google's problem?
Google heavily advertises the security and safety of certified Android devices, stating the following (emphasis mine):
We provide hundreds of tests to ensure Play Protect certified devices adhere to the Android security and permissions model and have software builds with recent security updates. Play Protect certified devices are also required to ship without pre-installed malware and include Google Play Protect, a suite of security features such as automatic virus scanning and Find My Device. This provides baseline protection against malware, privacy hacks and more.
Unfortunately, Google's certification process is not living up to that promise. It is clear that Google's existing checks for preinstalled malware, for example via the Build Test Suite, are failing to catch new strains of malware. Owners of Android devices, regardless of how much they paid for their device, deserve to have their personal data protected.
The phone
Photo from Gen Mobile's website
I am a professional programmer, IT worker, and data analyst, and I also work on hobby programming projects in my free time. In late July 2026, I bought a Maxwest Nitro A65 Android phone for $33 used on eBay because I needed a second Android phone to use for app development. I chose it because it was very cheap but had a modern Android version and an octa-core processor.
You have probably never heard of Maxwest Telecom. That's because they are one of over 3,800 brands of Google certified Android devices. However, their devices are more common than you might think. The Maxwest Nitro A65 is sold at a deep discount by Gen Mobile, a phone carrier which provides Lifeline government-subsidized phone service to people who otherwise could not afford it, as well as prepaid plans. It appears on PassMark PerformanceTest's list of most common Android devices, along with the Vortex J24, another Lifeline phone. Clearly, there are a lot of them out there, likely owned by people who have no other option.
It's honestly not a bad phone. Sure, the interface stutters a lot and the camera is bad (it doesn't even have autofocus, and I think the secondary lens might be fake), but it runs Android 14 and has an octa-core CPU, and in terms of opening and navigating apps and light web browsing, it performs pretty decently. In fact, I would say it's faster at navigating the OS than my Galaxy A15 5G with a better CPU and more RAM, which calls into question Samsung's software optimization. The screen is bright and color-accurate. If I received this phone for free or very cheaply and couldn't afford another option, it wouldn't make me want to throw it at a wall. (This is a major improvement in comparison with some other Lifeline phones, which have specifications straight out of the 2015 low-end, like quad-core processors, 2-megapixel cameras, and 2GB of RAM. Modern apps like Uber struggle to run on that kind of hardware even on older Android versions, so I can't imagine what the experience of using Android 14 on that hardware is like.)
However, none of that matters anymore, because a security update the phone received a couple months ago infected it with malware.
The malware
Something is amiss
The phone shipped with a firmware build from 2024 and a similarly old Android security update, which is unsurprising for a very cheap device. I was pleasantly surprised when it received a security update1 in early September, which also promised performance optimizations.
For about two weeks2, the phone behaved normally. Then, one day, as I was using the phone to watch YouTube, a full-screen ad appeared when I opened the app. I was immediately suspicious, because YouTube never has ads that cover the whole screen outside of videos, and a video had not been playing. When I pressed the recent apps button, I could see that the ad came from an app called "Lock & Hide", which I did not recognize and had not installed. It was not visible in the app drawer, but checking the Settings app revealed that several suspicious apps were installed, including "Lock & Hide", "System", and "Android System"3. They had all supposedly been installed by the Google Play Store, even though I was not signed into a Google account. I tried to remove the apps, only to find that they would be installed again automatically within an hour.
When I opened Google Play Protect to scan the phone for malware, I saw that it had been disabled, which I had not done, and it is not possible for a third-party app to do so without system privileges. Reenabling it resulted in it eventually being disabled again. Googling names of the apps that were being installed revealed that users had been complaining about these and other likely malicious apps being installed automatically for a couple months previously, on both this and other devices, and I realized that the issue must not be isolated to my own phone.
The initial investigation
The fact that the malware was able to disable Google Play Protect and to spoof apps as being installed from the Google Play Store indicated without a doubt that it had system-level privileges, so I decided to factory reset the phone while monitoring its network activity to determine if the infection was integrated into the firmware4. To do so, I used Control D, a paid service which allows you to create custom DNS servers that monitor and filter requests sent to them. I configured an endpoint to log all requests but not filter them, and set up the phone without inserting a SIM card or connecting to Wi-Fi. I configured the private DNS setting (which applies to all network connections) to point at my Control D instance, then connected to Wi-Fi.
I immediately noticed a slew of requests to suspicious and seemingly randomly generated domains, some of which were being queried as frequently as once per minute. I researched the domains and found that several of them were known to be associated with Triada malware, a dangerous trojan which has previously been preinstalled on Android devices.
I collected the following statistics on DNS requests the phone made.
- 1 time: afpik8.he2o9t[.]com - known to be associated with Triada (also here)
- 74 times: a.ssl-run[.]com - not seen before
- 30 times: c2b3d.s2f3c4ab[.]com - known to be associated with Triada
- 33 times: c2b3d.s8pa9zb2[.]com - ditto
- 727 times: googleandroidgo[.]com - not seen before
- This domain is not a legitimate Google domain; it is registered via a domain privacy company.
- The phone was making very frequent requests to this domain - often multiple times per minute - from all apps with internet access permission. (I discovered this by installing a local DNS monitoring app on the phone.)
- It is currently configured not to respond to DNS requests - not returning NXDOMAIN, but no response at all. I tried changing the response to NXDOMAIN and to an IP hosting an HTTP server to see if it was a killswitch, but the malicious DNS requests didn't stop. It's possible that it in fact is a killswitch, just one expecting a specific response.
- The string googleandroidgo (without .com) is present in libandroid_runtime.so.
- The requests to googleandroidgo[.]com stop if ADB is enabled (I'm not sure about the other domains), likely in an attempt to frustrate analysis.
- 3 times: pl.soul5art8[.]com - not seen before
- 1 time: s4gcb9.0gubvi[.]com - known to be associated with Triada
A few of these requests may have been from me testing if I had correctly blocked these domains.
What is Triada?
Triada is a family of multifaceted Android malware combining adware, account takeovers, spam, proxyware, and cryptocurrency stealing into one increasingly stealthy package. As of this writing, it has been around for over a decade, and despite Google's previous efforts to combat it, it survives in much the same form to this day. Extensive analyses have been made of its capabilities and history, and I will summarize them here.
Triada originated as a trojan embedded into apps, which would root the device and modify system libraries to include malicious code. When protection against firmware modification in Android rendered this impossible, it pivoted to being preinstalled on devices from the factory. In one instance documented by Google, a vendor of face unlock software bundled Triada along with their software, which was added to phones by unsuspecting manufacturers. It would not surprise me if the creators of Triada were paying employees of manufacturers to add it to firmware. I would guess that preinstalled malware is more common on very cheap devices because profit margins are slimmer and there is more incentive to find other sources of income throughout the supply chain.
How does Triada affect users?
While the most visible effect of Triada is its popup ads (from which the operator makes money), it also engages in schemes that are much more dangerous, and unfortunately, much more profitable. It has been known to tamper with cryptocurrency apps to steal money, a venture which had made the operators at least $264,000 as of April 2025, according to Kaspersky researchers. It also hijacks social media accounts to send spam, redirects web browser pages to ads, uploads cookies for social media accounts allowing full account takeover, and allows the registration of accounts using the phone owner's phone number by intercepting two-factor authentication messages, also according to Kaspersky. The former and latter behaviors have been reported by real-world users. The operators of another similar preinstalled trojan sell access to this functionality, and it is reasonable to conclude that the Triada operators do the same.
The preinstalled variants of Triada have been reported by Google and Kaspersky to be embedded into a core system library, libandroid_runtime.so, which means that Triada's code can run in all apps on the device. libandroid_runtime.so contains code critical to the operation of Android and cannot simply be removed. It also usually cannot be replaced with a copy from another device, because its code differs depending on the Android version, security patch level, CPU manufacturer, and even device manufacturer. Furthermore, the device would need to be rooted to do this, which is often very difficult for little-known devices with no available firmware or developer community (as is the case here). Rooting also brings its own security issues and prevents banking apps and some games from working.
All this leads to the alarming conclusion that a device infected with Triada is completely unsafe to use, and there is no way to fully remediate the infection yourself. If you have used a device known to be infected with Triada (such as the Maxwest Nitro A65), you should stop using it immediately, change the passwords of all accounts you used on the device, log out all unknown sessions logged into those accounts, and check social media apps for accounts registered using your phone number. Unfortunately, that leaves people who cannot afford another phone with no good options.
Confirming the infection
I extracted /system/lib/libandroid_runtime.so from the device using ADB and confirmed that it contained Triada code.
It contains the string "os.config.ppgl.status", which has been associated with Triada since at least 2017. Overall, the code injected into libandroid_runtime.so is very similar to previous versions of Triada, but the names of the injected functions have changed to ___andver_log_println and ___andver_log_init.
Triada is known to set several Java properties (not to be confused with Android system properties) whose names begin with os.config in apps where its code is running. I created a test app to list all Java properties and used it to verify that Triada code is in fact being injected into apps. The code I used is available in the appendix.
The injected properties I discovered were the following:
- jm_model_config=/.cofigs/.google_service_config/com.android.system.statlib.services (sic)
- os.android.version.sure.b=ok *
- os.config.build.channel=VdoC76iSYJG6fhaH
- os.config.build.model=B
- os.config.build.time=2026-1-25 18:21
- os.config.canary.status=working
- os.config.facelock.init.state=true **
- os.config.init.state=true
- os.config.installer.version=2000
- os.config.opp.service.status=working
- os.config.ppgl.status=working
* The property "os.android.version.sure.b" is mentioned in a very suspicious post attempting to get it excluded from Kaspersky antivirus.
** The property name "os.config.facelock.init.state" suggests that Triada may have been delivered via third-party face unlock code, as has previously been the case. It could also be a false flag by Triada developers, however.
I also scanned the phone with Kaspersky antivirus, and it detected Triada in libandroid_runtime.so.
Midnight Mimosa: the missing link
On October 7, 2026, after I had already reported this issue to Google, an interesting twist emerged in this story. The antivirus company Bitdefender published an article describing a strain of preinstalled Android malware they termed "Midnight Mimosa". The names of the installed apps are consistent with those I saw, and the Nitro A65 is even on their graph of the most common infected devices, but their analysis misses a crucial fact: at least on some devices, the real cause is Triada! During their analysis, the Bitdefender researchers appear to have simply assumed that the infection vector was always a preinstalled system app due to system permissions being necessary for the malware's actions, when in fact the malicious app was sometimes being installed by Triada.
I confirmed this hypothesis by downloading an older firmware for one of the infected devices, the Cubot KingKong X, extracting it, and determining that it contained Triada in libandroid_runtime.so, but that the suspicious app mentioned by Bitdefender was not preinstalled. Thankfully, that device got an update to remove Triada.
Reporting attempts
A reenactment of my attempts to contact Google and Maxwest (credit)
Unfortunately, my attempts to report this vulnerability to Google and Maxwest have been met with either silence or nonsensical responses.
Timeline
- September 23, 2026: I report this issue to Google via the Vulnerability Reporting Program. It doesn't clearly fit into one of the categories, so I select the "Android and Google Devices" category, since it's not a vulnerability in AOSP code.
- Later on September 23: I receive an email stating "We've filed an internal report for the Android engineering team to investigate further".
- September 24: The issue is closed with the following message (emphasis mine):
Thank you for taking the time to submit this report to the Android & Google Device Vulnerability Reward Program!
We have investigated this issue and determined that this is not a security vulnerability.
We have logged this issue for potential remediation in a future version. At this time, this report is considered closed and will no longer be monitored.
If you believe this is an error, please submit a new report through the BugHunter portal and include all necessary information on why this is a valid vulnerability according to our published severity guidelines (1).
- Later on September 24: I receive a survey about my experience with the VRP and submit a response explaining why the issue is in fact a security vulnerability and requesting reconsideration.
- Later on September 24: As requested, I submit a new VRP issue with the explanation I shared via the survey. It is closed 2 minutes later, likely automatically. This may have been because many of the fields contained N/A, since they were in fact inapplicable to the situation.
- Later on September 24: I send a message on Mastodon to Łukasz Siewierski, a Google researcher who has presented about Triada and other preinstalled malware at conferences.
- October 10: I email security@android.com to explain the situation (including its relation to Midnight Mimosa) and request for the reports to be reconsidered.
- October 11: I forward the email to compatibility@android.com, cts@android.com, and android-partnerships@google.com in hopes that they receive less traffic and someone is more likely to see my email.
- October 12: I email Joe Yong, the Android Security Technical Program Manager, whose email I found in a public repository listing him as the owner of code related to the Build Test Suite, Google's scanner which checks Android firmware for preinstalled malware and other issues.
- October 13: I clarify that I am still interested in reporting this issue even if it is not eligible for a reward via the VRP.
- Later on October 13: I receive the following reply from securityatandroid@google.com:
Hello,
Thank you for reaching out!
If you believe you've identified an issue in scope for one of our vulnerability reward programs, please check our rules and scopes, and submit a vulnerability report via the Bug Hunters portal for evaluation.
Thank you again for working with us to keep our platforms safe!
Best,
The Play and Android Security Team
This was despite the fact that I had explained in that very email thread that I had already tried to report the issue via the Bug Hunters portal (a.k.a. the VRP portal) and it had been closed.
- October 19: I email support@maxwesttelecom.com explaining that I would like to report an important security issue with the Nitro A65 and asking to be connected with someone who could handle it.
Other than the nonsensical responses detailed above, I have not received any communications from Google, Maxwest, or anyone I have reached out to directly. The phone has not received an update to remove the malware, and it still passes Google Play Integrity checks and appears on Google's list of certified Android devices. Therefore, I decided to write this blog post to draw attention to the issue.
Not just one phone: Preinstalled Android malware is far from dead
In addition to researching this issue, I have developed a computer-side tool which can scan Android firmware for both known malware and suspicious code patterns. I have uncovered numerous other certified Android devices infected with Triada, BADBOX, and Lemon Group malware, including previously unreported infection locations and code variants. Some of these devices are also Lifeline-subsidized. I plan to publish analyses of other preinstalled malware, as well as my scanning tool, within the next couple months. The tool will be open-source, and will initially only run on Linux (or Windows Subsystem for Linux).
I am also planning to create an Android app which users can use to scan their devices for preinstalled malware. Data from the app will be manually confirmed and used to create an online database of devices with (and without) preinstalled malware. The development of this app is likely to take several months, and the website longer still.
How should this issue be resolved?
The most immediate outcome of publicizing this issue should be to have the malware removed from the Maxwest Nitro A65 via an update. The firmware build which contains Triada should also be decertified so that Google Play Protect does not show "Device is certified" on affected devices, giving users a false sense of security.
Ideally, the changelog for the update removing the malware should make the severity of the issue clear and suggest that users change their passwords, log out of unknown sessions, and check for accounts made using their phone number, as mentioned above. Updates which have removed preinstalled malware on other devices have often failed to indicate the severity of the issue, or even that there was malware at all.
The more long-term aim of publicizing this and similar issues is to enable Google to integrate my findings into the Build Test Suite and scan existing firmware images, potentially uncovering more affected devices that have not been reported by users. I also hope that mobile antivirus companies will integrate my findings.
Indicators of Compromise
Infected libandroid_runtime.so (SHA256: 2de2340e04947c87ce92b3a950c501c276fe2bfdc06e7aba3b8c3d4e5e9045b6):
Download (password: malware)
Strings contained in libandroid_runtime.so:
- ___andver_log_println
- ___andver_log_init
- googleandroidgo
- os.config.build.time
- os.config.ppgl.status
- os.config.installer.version
- os.config.init.state
- os.config.facelock.init.state
- os.config.canary.status
- os.config.build.channel
- os.android.version.sure.b
- os.config.opp.service.status
- os.config.build.model
Domains:
- afpik8.he2o9t[.]com
- a.ssl-run[.]com
- c2b3d.s2f3c4ab[.]com
- c2b3d.s8pa9zb2[.]com
- googleandroidgo[.]com
- pl.soul5art8[.]com
- s4gcb9.0gubvi[.]com
Java properties (check via System.getProperty()):
- jm_model_config
- os.android.version.sure.b
- os.config.build.channel
- os.config.build.model
- os.config.build.time
- os.config.canary.status
- os.config.facelock.init.state
- os.config.init.state
- os.config.installer.version
- os.config.opp.service.status
- os.config.ppgl.status
Contact me
If you would like to contact me regarding this or other preinstalled Android malware, you may open an issue on the repository housing this blog, or email me directly at enelsonmoore at gmail.
Appendix: Java property dumping code
private static final String TAG = "TriadaPropDump";
public static void dumpProps() {
final Properties systemProperties = System.getProperties();
final Set<String> keys = systemProperties.stringPropertyNames();
for (final String key : keys.stream().sorted().collect(Collectors.toList())) {
Log.e(TAG, "dumpProps: key: " + key);
final String value = systemProperties.getProperty(key);
Log.e(TAG, "dumpProps: value: " + value); // value can be null!
}
}
Footnotes
- The build fingerprint of the update is: Maxwest/NITRO_A65/MX-NA65:14/UP1A.231005.007/202607091830:user/release-keys. The build number is Maxwest_MX-NA65_BD_V07_07092026.
- Triada has a 15-day incubation period. To bypass it, either set up the device with the date over 15 days ago and then correct it (as I unknowingly did by factory resetting it with no SIM), or manually change the timestamp it uses to check the incubation period (e.g., on Linux):
adb shell settings put system init_time $(((`date --date='20 days ago' '+%s'`)*1000))
adb reboot
- "Android System" is the name of a legitimate system app; it is a pseudo-app that contains system functionality too fundamental to reside in its own app. However, it should never show up as a downloaded app, and there should only be one instance of it. "System" is not legitimate.
- Unfortunately, I did not back up the malicious apps before doing the factory reset, though as described later in the post, Bitdefender has analyzed them.