Zero-Permission Android Apps Can Chain AtlasService and olc2 to Gain Root on OnePlus/OPPO Devices via OxygenOS Confused-Deputy Flaws

Zero-Permission Android Apps Can Chain AtlasService and olc2 (TL-2026-2683), also tracked as AtlasService/olc2 root chain, is a high-severity software vulnerability, first published 2026-09-27. It has no confirmed attribution, affects OnePlus OnePlus 15 (CPH2747), maps to 10 MITRE ATT&CK techniques (T1404, T1409, T1418), and is covered by 9 detection rules and 11 indicators of compromise.

Key facts for TL-2026-2683

Threat ID
TL-2026-2683
Also known as
AtlasService/olc2 root chain, OnePlus zero-permission root exploit
Severity
HIGH
Status
ACTIVE
Category
VULNERABILITY
First published
2026-09-27
Last reviewed
2026-09-27
Attribution confidence
LOW
Motivation
UNKNOWN
Target sectors
consumer electronics, enterprise byod, telecoms
Target regions
Global
Detection rules
9
Indicators of compromise
11

Malware and tooling in Zero-Permission Android Apps Can Chain AtlasService and olc2

Malware and tooling: Ghidra, app_process, sesearch

Independent researcher Rasmus Moorats disclosed a two-stage privilege-escalation chain in OnePlus's OxygenOS: a root-privileged debugging service, AtlasService, accepts unauthenticated Binder calls and injects attacker-controlled input into a shell command via the audioDumpInfo binary, and a vendor hardware-abstraction service, olc2, then executes arbitrary shell commands for any caller already running as root. Chained, the two bugs let an installed Android app that declares zero permissions achieve full root with kernel-module-loading capability on a stock OnePlus 15 (and a OnePlus 12 Pro), a class OnePlus confirmed on 2026-05-20 affects "all series of OPPO terminal products" but has neither assigned a CVE nor shipped a confirmed public fix as of the 2026-09-24/25 disclosure.

How Zero-Permission Android Apps Can Chain AtlasService and olc2 works

On 2026-09-24, security researcher Rasmus Moorats published a technical writeup (blog.nns.ee) of a two-bug exploit chain that escalates an unprivileged, zero-permission Android application to full root on OnePlus's OxygenOS, later syndicated by The Hacker News, Cyber Security News, and other outlets.

The first bug lives in AtlasService (`atlasservice`), a OnePlus telemetry/debugging system service that runs as root and accepts Binder calls without verifying the caller's identity. The service exposes a `setEvent(String8 name, String8 value)` method at Binder transaction code 2, handled internally by `OplusAtlasLogWriter::handleEvent`. When an app supplies the event name `atlas_event_multimedia_audio_dumpsys`, AtlasService calls `property_set("oplus.audio.dumpinfo.type", value)` with the attacker-controlled value and triggers `ctl.start=audiodumpinfo`. Per the service's init definition at `/system_ext/etc/init/audiodumpinfo.rc` (`user root`, `group root system everybody sdcard_rw`, `seclabel u:r:dumpstate:s0`, `oneshot`), this starts `/system_ext/bin/audioDumpInfo` as UID 0 in the `dumpstate` SELinux domain. That binary reads the attacker-controlled property and passes it, unescaped, into a `system()` shell call — a classic command-injection sink reachable with no Android permissions at all. The researcher's proof-of-concept injected the property value `x;sh</sdcard/Android/data/com.research.poc/files/boot.sh 2>&1|log -t AtlasOut;#`, using a shell metacharacter break-out to execute an attacker-supplied script staged in the app's own external files directory. This yields code execution as UID 0, but confined to the restricted `dumpstate` SELinux domain.

The second bug is in `olc2` (`vendor.oplus.hardware.olc2.IOplusLogCore/default`, backed by the binary `/odm/bin/hw/vendor.oplus.hardware.olc2-V3-service`), a vendor hardware-abstraction-layer (HAL) service meant to support hardware logging/diagnostics. Its `doShell(String cmd)` method (Binder transaction code 6) contains only a single check — `if (getCallingUid() == 0)` — before it forks and calls `execl("/vendor/bin/sh", "sh", "-c", cmd, NULL)`. Because the caller is already root (courtesy of the first bug), this check is trivially satisfied — a textbook confused-deputy failure where a privileged service trusts a caller's claimed UID instead of cryptographically verifying it. The researcher additionally located a permissive SELinux policy rule (`allow hal_oplus_olc_aidl_client hal_oplus_olc_aidl_server:binder { call transfer };`) that permits the `dumpstate`-domain process reached in stage one to make the Binder call into `olc2` at all — identified via `sesearch -A -s dumpstate -c binder sepolicy_clean.bin` against the device's compiled policy. Crucially, the shell spawned by `olc2` inherits the `vendor_qti_init_shell` SELinux domain, which carries an almost unrestricted capability bitmask (`CapBnd = 0x1ffffffffff`) including `CAP_SYS_MODULE` (kernel module loading) and `CAP_SYS_RAWIO` — a much less restricted context than `dumpstate`. Chaining the two bugs takes a zero-permission app from nothing to unrestricted root with kernel-level capability in two Binder calls.

Moorats reverse-engineered both services with Ghidra and documented that Java can call the vendor AIDL/HIDL HAL directly via `ServiceManager.getService()`, `Parcel.writeInterfaceToken()`, and `IBinder.transact()` — a pattern that "unexpectedly" worked without special HIDL bindings — and had to hand-implement the legacy `String8` wire format (int32 length + UTF-8 bytes + null terminator) for the `setEvent` call since the modern Android 35 Parcel API does not expose it. To execute arbitrary Java logic once root was reached, the researcher staged `classes.dex` from the PoC app's own APK to external (`media_rw_data_file`) storage at `/sdcard/Android/data/com.research.poc/files/classes.dex` — because `dumpstate` cannot read installed-APK data files directly — then launched it by setting `CLASSPATH` and invoking `app_process /system/bin com.research.poc.Pwn` from the `boot.sh` payload run inside the `olc2`-spawned root shell.

The vulnerability was confirmed on a OnePlus 15 (CPH2747) running OxygenOS 16.0.3.503 (February 2026 security patch level, kernel 6.12.23), and separately reproduced on an older OnePlus 12 Pro (CPH2581) used during reverse engineering, leading the researcher to expect the flaw is present across OxygenOS 16 generally. OnePlus's own Security Response Center told Moorats by email that the issue affects "all series of OPPO terminal products with universal security risks" — an admission of fleet-wide impact without naming specific additional models.

Disclosure did not go smoothly. Moorats reported both bugs on 2026-04-18 and followed up on 2026-04-29 after no reply; OnePlus requested further technical detail on 2026-05-14 (answered same day) and confirmed the bugs on 2026-05-20, simultaneously asserting "the exclusive final right of vulnerability disclosure" and warning that publication — even after a fix ships — could expose the researcher to "legal liabilities" under European cybersecurity regulation. On 2026-06-01 the researcher set a standard 90-day coordinated-disclosure deadline; OnePlus instead requested a delay to 2026-09-17 on 2026-06-22, which the researcher accepted. A 2026-07-20 status request went unanswered; the two sides exchanged messages regarding CVE-ID coordination around 2026-07-28, and OnePlus sent a further response on 2026-08-03, but no CVE identifier was ever publicly assigned. A final 2026-09-11 status request also went unanswered. Moorats published on 2026-09-24, roughly 159 days after the initial report and past the previously agreed embargo date. Reporting on the patch status is inconsistent across outlets: several outlets (Cyber Security News, The Hacker News, as of their 2026-09-24/25 publication) state no public patch or OTA is available, while the researcher's own writeup references OxygenOS build `16.0.10.500(EX01)` as containing a fix — it is unclear from public reporting whether that build has been broadly rolled out to the affected device fleet, particularly the OPPO-branded devices OnePlus itself says are impacted. No CVE has been assigned to this flaw as of 2026-09-27.

The disclosure lands amid a broader pattern of OEM-added-code privilege escalation on Android flagships: on 2026-08-31, independent researcher Lukas Maar (Calif) published "OEMpocalypse," a distinct zero-permission-to-root technique exploiting a page use-after-free in OEM-specific kernel drivers, demonstrated against locked-bootloader Samsung Galaxy S26/S26 Ultra, Xiaomi 17, OPPO Find X9 Ultra, and OnePlus Ace 6 Ultra devices. OEMpocalypse is a separate bug class (kernel memory corruption vs. this chain's userspace confused-deputy/command-injection pair) but underscores the same underlying theme reporters connected it to: manufacturer-added system code on Android flagships, not upstream AOSP or chipset-vendor drivers, is an increasingly common root of unprivileged privilege-escalation chains.

No real-world exploitation of the AtlasService/olc2 chain has been reported. Exploitation requires local app installation (e.g., sideloading or an app obtained outside vetted stores) but no Android runtime permissions and no user interaction beyond installing the app; impact at the end of the chain is full root with unrestricted Linux capabilities, meaning arbitrary access to other apps' data, the ability to install persistent code, tamper with or disable on-device security tooling, and load kernel modules.

MITRE ATT&CK techniques used in TL-2026-2683

Privilege Escalation

T1404 Exploitation for Privilege Escalation

Collection

T1409 Stored Application Data

Discovery

T1418 Software Discovery; T1424 Process Discovery

Execution

T1575 Native API; T1623 Command and Scripting Interpreter; T1623.001 Command and Scripting Interpreter: Unix Shell

Persistence

T1625.001 System Runtime API Hijacking

Defense Evasion

T1629 Impair Defenses; T1629.003 Impair Defenses: Disable or Modify Tools

Affected products and versions in Zero-Permission Android Apps Can Chain AtlasService and olc2

  • OnePlus — OnePlus 15 (CPH2747)
    Vulnerable versions: OxygenOS 16.0.3.503 (2026-02 security patch level, kernel 6.12.23)
    Fixed in: OxygenOS 16.0.10.500(EX01) (per researcher's writeup; broad public rollout not independently confirmed)
  • OnePlus — OnePlus 12 Pro (CPH2581)
    Vulnerable versions: OxygenOS 16 (build not specified; used by researcher during reverse engineering)
  • OPPO — OPPO terminal devices (unspecified models sharing the OxygenOS/ColorOS codebase)
    Vulnerable versions: Unspecified — OnePlus's Security Response Center confirmed impact across "all series of OPPO terminal products"

Remediation for Zero-Permission Android Apps Can Chain AtlasService and olc2

Patches

  • OnePlus/OPPO have not published a public CVE or security advisory as of 2026-09-27
  • The researcher's writeup references OxygenOS build 16.0.10.500(EX01) as containing a fix, but broad rollout across the affected OnePlus and OPPO device fleet is not publicly confirmed

Immediate actions

  • Install apps only from Google Play or the OnePlus/OPPO app store; avoid sideloading or third-party APK sources on affected devices
  • Audit installed applications on OnePlus 15, OnePlus 12 Pro, and other OxygenOS/ColorOS-family devices for unrecognized or recently sideloaded apps
  • Monitor for anomalous Binder activity against AtlasService and vendor.oplus.hardware.olc2.IOplusLogCore where mobile EDR/MTD tooling supports service-call telemetry

Workarounds

  • Restrict device provisioning/MDM policy to block installation of apps from unknown sources on affected fleets
  • Where feasible, disable or restrict access to non-essential OEM debug/diagnostic services (AtlasService, olc2) via enterprise mobility management until a vendor patch is confirmed

Longer-term hardening

  • Enforce caller-identity verification (signature/UID + SELinux peer context, not UID alone) on all privileged vendor HAL and OEM system services
  • Sanitize all values passed from Android system properties into shell/system() calls in vendor debug and diagnostic binaries
  • Tighten SELinux policy so restricted domains like dumpstate cannot make Binder calls into high-privilege vendor HALs (e.g. the hal_oplus_olc_aidl_client/server allow rule) without a clear security justification
  • Deploy mobile threat defense (MTD) or EDR capable of flagging privilege-escalation chains rather than relying solely on the Android permission model

Weaknesses (CWE) in Zero-Permission Android Apps Can Chain AtlasService and olc2

CWE-863, CWE-78, CWE-269, CWE-306

Timeline of Zero-Permission Android Apps Can Chain AtlasService and olc2

  • Rasmus Moorats privately reports the AtlasService/olc2 root-escalation chain to OnePlus.
  • Researcher sends a follow-up request after receiving no initial response from OnePlus.
  • OnePlus requests further technical detail on the report; the researcher responds the same day.
  • OnePlus's Security Response Center confirms both flaws, states the issue affects "all series of OPPO terminal products with universal security risks," and asserts "the exclusive final right of vulnerability disclosure," warning of possible legal liability for independent publication.
  • Researcher sets a standard 90-day coordinated-disclosure deadline for the report.
  • OnePlus requests a disclosure delay until 2026-09-17; the researcher agrees.
  • Researcher requests a status update from OnePlus; receives no response.
  • Researcher and OnePlus exchange messages regarding CVE-ID coordination; no CVE identifier is ultimately assigned publicly.
  • OnePlus sends a further response to the researcher regarding remediation status.
  • Independent researcher Lukas Maar (Calif) publishes "OEMpocalypse," a distinct zero-permission-to-root Android technique abusing a use-after-free in OEM-specific kernel drivers across Samsung, Xiaomi, OPPO, and OnePlus flagships — a separate bug class but part of the same broader OEM-added-code privilege-escalation trend.
  • Researcher sends a second status-update request; again receives no response.
  • Rasmus Moorats publishes the full technical writeup at blog.nns.ee; The Hacker News syndicates coverage the same day (17:54 UTC), roughly 159 days after the initial report and past the previously agreed embargo date.
  • Cyber Security News and multiple additional outlets (Cybernews, Notebookcheck, tech-insider.org, Cryptika) publish coverage; no CVE has been assigned and public confirmation of a broadly-rolled-out fix remains absent.

Sources cited for Zero-Permission Android Apps Can Chain AtlasService and olc2

More in vulnerability

Detection coverage for TL-2026-2683

As of 2026-09-27, Threadlinqs Intelligence publishes 9 detection rule(s) for TL-2026-2683 across Splunk SPL, Microsoft KQL and Sigma, covering 11 indicator(s) of compromise. The whole corpus is readable without an account; a free account unlocks full detection query text in Splunk SPL, Microsoft KQL and Sigma; paid tiers add raw indicator values, correlation and the MCP server. Threadlinqs MCP server · View plans.

Threadlinqs Intelligence — Real-Time Threat Detection Platform

[ 0 threats ] [ 0 det ] [ CRIT: 0 ] [ HIGH: 0 ]
// threat_feed
$ sort --newest
Showing all threats

Latest Threats