# IonStack: One-Click Firefox JIT-to-Linux-Kernel Root Exploit Chain (CVE-2026-10702 + CVE-2026-43499 "GhostLock") Demonstrated Against Android 17

> Nebula Security's autonomous code-scanning agent VEGA discovered and chained two zero-days -- a Firefox IonMonkey JIT type-confusion flaw (CVE-2026-10702) and a 15-year-old Linux kernel rtmutex/futex-requeue use-after-free (CVE-2026-43499, "GhostLock") -- into a single-click, browser-to-kernel root exploit against fully patched Android 17 devices. No CVE was observed exploited in the wild prior to disclosure; both were responsibly disclosed and patched (Firefox 151.0.3, kernel commit 3bfdc63936dd).

- **Published:** 2026-07-18T00:00:00Z
- **Last reviewed:** 2026-08-02T05:13:26.728Z
- **Canonical:** https://intel.threadlinqs.com/threat/TL-2026-1477
- **ID:** TL-2026-1477
- **Severity:** HIGH (CVSS 8.8)
- **Category:** VULNERABILITY
- **Status:** ACTIVE
- **Detections:** 9 · **IOCs:** 38 (full data via the Threadlinqs MCP server — Purple tier)
- **CVEs:** CVE-2026-10702, CVE-2026-43499, CVE-2026-53166

## Description

IonStack is a two-stage, one-click exploit chain publicly demonstrated by Nebula Security (a Y Combinator-backed vulnerability research firm) in June-July 2026. Both component vulnerabilities were discovered autonomously -- without human code audit -- by Nebula's proprietary AI-driven static/dynamic analysis platform, VEGA, marking one of the first documented cases of an AI agent independently finding and chaining a full browser-to-kernel remote root exploit.

Stage one (CVE-2026-10702) is a JIT miscompilation / type-confusion bug (CWE-843) in IonMonkey, Firefox's optimizing JavaScript JIT compiler. A malicious web page reachable via a single URL click triggers miscompiled machine code inside the renderer process, giving the attacker memory corruption and initial code execution within the Firefox sandbox on Android. The flaw affects Firefox versions prior to 151.0.3 (initially believed fixed in 151.0.2, but the complete fix shipped in 151.0.3) and was reported to Mozilla as Bugzilla bug 2040903, addressed in Mozilla Security Advisory MFSA2026-54.

Stage two (CVE-2026-43499, codenamed "GhostLock") breaks out of the renderer sandbox and escalates to full root by exploiting a stack use-after-free in the Linux kernel's real-time mutex (rtmutex) priority-inheritance futex requeue path (kernel/locking/rtmutex.c, requires CONFIG_FUTEX_PI=y). The bug has existed in mainline Linux from v2.6.39-rc1 (introduced by commit 8161239a8bcc, ~2011) through v7.1-rc1 -- roughly 15 years -- and affects essentially every mainstream Linux distribution, including Android's kernel fork, that ships FUTEX_PI support unpatched.

Root cause: remove_waiter() was written for the case where a thread blocks on its own futex and later cleans up after itself. Requeue-PI (FUTEX_WAIT_REQUEUE_PI / FUTEX_CMP_REQUEUE_PI) breaks that assumption by using the same helper to clean up on behalf of a different, sleeping thread. When __rt_mutex_start_proxy_lock() returns -EDEADLK during rollback, remove_waiter() incorrectly clears current->pi_blocked_on instead of waiter->task->pi_blocked_on, leaving the sleeping waiter with a dangling pointer into its own now-reused kernel stack frame -- a stack use-after-free.

Exploitation (97% reliable, ~5 seconds, ordinary threading syscalls only, no special privileges): (1) a three-futex FUTEX_WAIT_REQUEUE_PI / FUTEX_CMP_REQUEUE_PI cycle is used to deliberately trigger the -EDEADLK rollback path and produce the dangling stack pointer; (2) prefetch timing side-channels leak the kernel image base (~9 bits of entropy) and the physmap base, defeating KASLR; (3) PR_SET_MM_MAP is abused to reclaim the freed waiter stack frame via a controlled user_auxv buffer spray, forging a fake rt_mutex_waiter structure in attacker-controlled memory; (4) the rb-tree erase logic inside rt_mutex_dequeue() is leveraged as a constrained arbitrary-pointer-write primitive; (5) that write overwrites the inet6_protos[IPPROTO_UDP] protocol handler pointer to redirect into the CPU Entry Area (CEA), which is seeded with a fake inet6_protocol structure, hijacking kernel control flow; (6) a short ROP gadget chain ("DirtyMode") flips permission bits on /proc/sys/kernel/core_pattern to make it world-writable, after which an unprivileged process triggers a crash to have the kernel execute an attacker-supplied core_pattern helper as root, completing privilege escalation.

Combined, a victim clicking one malicious URL in Firefox on Android 17 yields full root: data theft, surveillance, persistent backdoor installation, and complete remote device management -- with no further user interaction. Nebula Security states the two zero-days were not observed being exploited in the wild prior to their research and disclosed both responsibly. The GhostLock kernel patch, once merged, initially introduced a separate regression, CVE-2026-53166, later corrected; as of early July 2026 patch rollout to Ubuntu 24.04/22.04/20.04 LTS and Android OEM kernels remained uneven. Google's kernelCTF program paid Nebula Security a $92,337 bounty for the GhostLock privilege-escalation/container-escape exploit. Nebula published a working proof-of-concept for CVE-2026-43499 on GitHub (NebuSec/CyberMeowfia).

## MITRE ATT&CK

- T1189 Drive-by Compromise
- T1566 Phishing
- T1566.002 Phishing: Spearphishing Link
- T1203 Exploitation for Client Execution
- T1059.007 Command and Scripting Interpreter: JavaScript
- T1068 Exploitation for Privilege Escalation
- T1547 Boot or Logon Autostart Execution
- T1211 Exploitation for Stealth
- T1685 Disable or Modify Tools
- T1014 Rootkit
- T1070 Indicator Removal
- T1082 System Information Discovery
- T1543 Create or Modify System Process
- T1546.004 Event Triggered Execution: Unix Shell Configuration Modification
- T1071 Application Layer Protocol
- T1219 Remote Access Tools
- T1005 Data from Local System
- T1123 Audio Capture
- T1125 Video Capture
- T1041 Exfiltration Over C2 Channel
- T1499 Endpoint Denial of Service
- T1611 Escape to Host
- T1548 Abuse Elevation Control Mechanism
- T1613 Container and Resource Discovery
- T1610 Deploy Container
- T1489 Service Stop
- T1587 Develop Capabilities
- T1190 Exploit Public-Facing Application
- T1105 Ingress Tool Transfer
- T1204.001 User Execution: Malicious Link
- T1548.001 Abuse Elevation Control Mechanism: Setuid and Setgid
- T1539 Steal Web Session Cookie
- T1491.002 External Defacement
- T1583.006 Acquire Infrastructure: Web Services
- T1546 Event Triggered Execution
- T1222.002 Linux and Mac Permissions
- T1083 File and Directory Discovery
- T1074.001 Data Staged: Local Data Staging
- T1588 Obtain Capabilities
- T1592 Gather Victim Host Information

## Sources

- [One-Click Root Exploit Demonstrates Evolving Android Threats](https://zimperium.com/blog/mobile-threat-watch/one-click-root-exploit-demonstrates-evolving-android-threats)
- [First-Ever 1-Click Android 17 Exploit Allows Attackers to Gain Full Control Over Your Android Phone](https://cybersecuritynews.com/android-17-root-1-click/)
- [IonStack | Nebula Security](https://rootme.nebusec.io/)
- [IonStack part II: GhostLock, a stack-UAF that has existed in ALL Linux distributions for 15 years](https://nebusec.ai/research/ionstack-part-2/)
- [One Malicious Link, Full Root Access — Nebula Security Demos the World's First Android 17 Exploit Chain](https://www.cyberkendra.com/2026/06/one-malicious-link-full-root-access.html)
- [IonStack Exploit Chain Lets Hackers Root Android 17 Phones With a Single URL Click](https://gbhackers.com/ionstack-exploit-chain/)
- [15-Year-Old GhostLock Flaw Enables Root and Container Escape on Most Linux Distros](https://thehackernews.com/2026/07/15-year-old-ghostlock-flaw-enables-root.html)
- [GhostLock CVE-2026-43499: 15-Year Linux Kernel Root Bug](https://thecybersecguru.com/news/ghostlock-cve-2026-43499-linux-kernel-0day/)
- [Security Vulnerabilities fixed in Firefox 151.0.3](https://www.mozilla.org/en-US/security/advisories/mfsa2026-54/)
- [NVD - CVE-2026-43499](https://nvd.nist.gov/vuln/detail/CVE-2026-43499)
- [NVD - CVE-2026-10702](https://nvd.nist.gov/vuln/detail/CVE-2026-10702)
- [CVE-2026-43499 | Ubuntu Security](https://ubuntu.com/security/CVE-2026-43499)
- [CVE-2026-43499 GhostLock, the Futex Bug That Turns Local Code Into Root](https://www.penligent.ai/hackinglabs/cve-2026-43499/)
- [CVE-2026-10702: Firefox JIT RCE Vulnerability Explained](https://www.sentinelone.com/vulnerability-database/cve-2026-10702/)
- [PoC exploit code for CVE-2026-43499 (CyberMeowfia)](https://github.com/NebuSec/CyberMeowfia/tree/main/IonStack/CVE-2026-43499)

## Full data

Detection queries (Splunk SPL / Microsoft KQL / Sigma) and IOC values require the Threadlinqs MCP server (Purple tier): https://intel.threadlinqs.com/mcp

Canonical: https://intel.threadlinqs.com/threat/TL-2026-1477
