← Back to Explainer Explainer

OEMpocalypse explained: how a permissionless Android app can reach root

Instead of hunting one universal Android bug, OEMpocalypse targets the proprietary services and drivers that manufacturers ship across their own product lines. The result is a revealing blueprint for moving from an ordinary app sandbox to kernel-level control.

An ordinary Android application is supposed to live inside a narrow sandbox. It receives a unique Linux user ID, runs in an untrusted_app SELinux domain and reaches only the operating-system interfaces explicitly exposed to it. OEMpocalypse, research published by Calif's Lukas Maar, asks what happens when the additional software installed by phone manufacturers creates a path through those boundaries. The answer is a family of exploit chains that begins with an app declaring no permissions and ends with root on stock, bootloader-locked phones.

The work is not one magic exploit that runs unchanged on every Android device. It is a strategy instantiated separately for Samsung, Xiaomi and the Oppo family, which includes OnePlus and Realme. Each chain targets proprietary components that an OEM distributes across much of its own lineup. That distinction matters: OEMpocalypse trades universal coverage for reliability within a manufacturer's ecosystem, avoiding some of the device-by-device instability that makes Android kernel exploitation notoriously expensive.

Why the normal Android routes are difficult

Android's reachable kernel surface falls into three broad groups. The first is shared Linux and Android Common Kernel code: memory management, networking, Binder and the system calls left available by seccomp. A vulnerability there can theoretically span many brands, but years of scrutiny mean the remaining bugs often provide constrained primitives. Turning a narrow object corruption or race into root can require heap grooming, information leaks and per-kernel tuning. Differences in kernel branches, vendor hardening and even device memory geometry then multiply the engineering work.

The second group is chipset code exposed for performance, especially GPU, DSP and NPU drivers. These components map and manage physical pages, so a lifetime bug can produce a powerful page-level primitive. Their limitation is coverage: an Adreno flaw follows Qualcomm hardware, while a Mali issue follows a different set of chips. One manufacturer may ship Snapdragon, Exynos and MediaTek devices in the same generation, so a single chipset exploit rarely maps cleanly onto that OEM's entire range.

OEMpocalypse chooses the third group: kernel drivers and user-space services added by the manufacturer. Those components follow One UI, HyperOS or ColorOS rather than the processor underneath. A vulnerable Samsung component may therefore appear on both Snapdragon and Exynos models. The researcher optimizes for three properties — reliability, portability and breadth — and accepts that covering three vendors requires three distinct chains rather than pretending one payload is truly universal.

Stage one: borrowing a more privileged Android identity

Some OEM kernel drivers are already reachable from an ordinary app; others sit behind SELinux rules that allow only a privileged service to open them. Where that gate exists, the first stage is a sandbox escape through manufacturer-supplied user-space code. Android services communicate through Binder, intents, content providers and local sockets. If an OEM endpoint fails to verify its caller, exposes a component accidentally or mishandles a path, an untrusted app may persuade the privileged process to perform work on its behalf.

That stage does not defeat the kernel by itself. Its purpose is to move execution or capability into a SELinux domain that can reach the target driver. This is a classic confused-deputy problem: the security policy correctly blocks the app from opening a device node, but the trusted component allowed through the policy exposes an unsafe route to it. Because the vulnerable IPC logic belongs to the OEM software layer, it can remain consistent across devices using different kernels and chipsets.

Stage two: turning a stale page into kernel control

The kernel stage targets a page use-after-free in an OEM driver. A driver gives user space or a hardware component a mapping to a physical memory page, releases that page too early and leaves the old mapping alive. The kernel may then recycle the physical page for a different purpose while the attacker can still observe or modify it through the stale reference. By steering what occupies the recycled page, the chain converts a memory-lifetime error into a broader read-and-write capability over sensitive kernel data.

This primitive sits below several defenses designed around smaller heap objects or control-flow hijacking. Slab freelist hardening does little when the stale reference covers a whole physical page. A data-oriented chain need not redirect an indirect call, reducing the value of Control Flow Integrity, and it may avoid a traditional KASLR disclosure because it operates through a mapping it already owns. Maar reports that the same page-reclamation approach worked from Android kernels 5.15 through 6.12, although the vulnerable OEM component and first-stage escape still differ by manufacturer.

What the demonstrations prove — and what they do not

The published demonstrations show the strategy reaching root on a Galaxy S26 and S26 Ultra, a Xiaomi 17, an Oppo Find X9 Ultra and a OnePlus Ace 6 Ultra. The devices report a locked bootloader and green Verified Boot state, showing that the chain compromises the running system without first installing an unsigned operating-system image. The Samsung work also spans Snapdragon and Exynos hardware, illustrating why targeting a shared OEM software layer can cross chipset boundaries.

Those demonstrations should not be read as proof that every phone from those brands is currently exploitable. Component availability differs across product tiers, and a chain stops working when either its user-space bridge or kernel bug is patched. The research describes coverage across recent flagship families, not a remotely delivered zero-click and not an automatic compromise of every Samsung, Xiaomi, Oppo, OnePlus or Realme handset. It also does not disclose every per-OEM implementation detail in the overview, so public verification is limited to the methodology and recorded target results presented by the researcher.

What this means for you

Keep OEM firmware and the Android security patch level current, restrict sideloading on managed devices and treat an unexpected application as potentially dangerous even when it requests no permissions. For manufacturers, SELinux isolation is valuable but cannot substitute for auditing the privileged IPC service and the driver behind it. A trusted bridge with weak caller validation can turn a correctly hidden driver into reachable attack surface.

OEMpocalypse is valuable because it reframes Android fragmentation. Fragmentation usually frustrates attackers by forcing them to port an exploit to many kernels and devices. Proprietary code shared across an OEM lineup can reverse that equation: one manufacturer-specific logic flaw and one strong page-lifetime bug may cover devices built on several chipsets. The defensive lesson is equally direct. Vendor drivers that map physical pages must tear down every mapping before release, and the services permitted to reach those drivers must be reviewed as part of the same security boundary rather than as unrelated application code.

Sources: Calif OEMpocalypse research; Android application sandbox documentation; Android SELinux documentation.

Corrections: Report an error at corrections@wireshaman.com.

More from the wire