Mozilla labeled a loaded gun as a noisemaker — this JIT type confusion gives attackers arbitrary read/write in every unpatched Firefox renderer
CVE-2026-10702 is a type confusion flaw (CWE-843) in the IonMonkey/Warp JIT compiler within Firefox's SpiderMonkey engine. The MObjectToIterator instruction was defined with an incorrect alias set — treating a write operation (lazy property resolution that allocates new buffers) as a pure load. This breaks Global Value Numbering and Scalar Replacement optimizations, producing a use-after-free: subsequent slot access references a stale buffer pointer after reallocation. Nebula Security demonstrated a full exploitation chain from this primitive to arbitrary read/write in the renderer, and then chained it with CVE-2026-43499 (GhostLock, a Linux kernel futex UAF) for one-click root on Android 17. Affected versions: all Firefox builds prior to 151.0.3, including Firefox for Android. Tor Browser was vulnerable until version 15.0.19 (patched July 20, 2026).
The vendor's CVSS of 4.3 MEDIUM (C:N/I:N/A:L) is factually wrong. Scoring a JIT type confusion that yields arbitrary read/write as 'no confidentiality impact, no integrity impact, low availability impact' ignores the actual exploitation outcome demonstrated by Nebula Security. Red Hat independently scored this 7.5 HIGH (AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H), which is far more aligned with reality. The vendor assessment appears to reflect only the surface-level crash behavior, not the weaponized outcome. With a public one-click exploit chain, a working PoC, and Tor Browser exposure, this is a textbook case of vendor under-rating.
5 steps from start to impact.
Lure victim to attacker-controlled page
- Victim uses Firefox < 151.0.3 (desktop or Android) or Tor Browser < 15.0.19
- Victim navigates to attacker-controlled or compromised page
- Firefox desktop market share is ~3-5%, limiting the reachable population compared to Chrome-targeting exploits
- Enterprise browser management policies may auto-update Firefox, shrinking the vulnerable window
Trigger JIT miscompilation via MObjectToIterator
Object.keys() to trigger lazy resolution of Function.name, Function.length, and Function.prototype. The incorrect alias set on MObjectToIterator causes GVN to eliminate the reload, leaving a stale pointer. This creates a reliable use-after-free primitive in the JIT-compiled code path.- JIT (IonMonkey/Warp) is enabled — this is the default
- JavaScript execution reaches the hot path triggering IonMonkey compilation
- Firefox's existing JIT mitigations (e.g., StructuredSpewer, Spectre mitigations) add some noise but do not prevent this specific miscompilation
- Content Security Policy on the target page does not help — the attacker controls the page
Achieve arbitrary read/write in renderer
Uint8Array objects to achieve arbitrary read/write within the content process address space. This is a stable, deterministic primitive — not a probabilistic race.- Successful UAF from step 2
- Heap layout is predictable enough for spray — demonstrated reliable on both desktop and Android
- Firefox sandbox (content process) contains the damage to the renderer — a sandbox escape is needed for system-level impact
- ASLR and CFI provide defense-in-depth but are bypassed by the info leak in the demonstrated chain
Execute code in content process
- Arbitrary read/write from step 3
- Impact is contained to the browser sandbox without a second vulnerability for escape
- On desktop, the content process runs with reduced privileges
(Optional) Chain with GhostLock for kernel root
- Target runs a vulnerable Linux kernel (most unpatched distros)
- GhostLock (CVE-2026-43499) is not yet patched on the target
- GhostLock is a separate CVE requiring its own patch — if the kernel is updated, this step fails
- Desktop Linux and Android patch cadences differ; enterprise-managed desktops may have kernel patches applied
The supporting signals.
| In-the-Wild Exploitation | No confirmed in-the-wild exploitation. Mozilla has not reported active attacks. Not listed in CISA KEV. However, the public IonStack chain is a turnkey exploit — the gap between 'research demo' and 'weaponized' is negligible. |
|---|---|
| Proof of Concept | Public and weaponized. Nebula Security published the full IonStack chain (nebusec.ai/research/ionstack-part-1-cve-2026-10702/) on July 21, 2026, demonstrating one-click root on Android 17 via Firefox. The PoC is deterministic, not probabilistic. |
| EPSS | 0.00722 (0.72%) — low predicted exploitation probability. EPSS likely lags the public PoC release; expect this to climb. |
| KEV Status | Not listed as of 2026-07-31. |
| CVSS Vectors | Vendor (CISA-ADP): CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:L → 4.3 MEDIUM. Red Hat: CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H → 7.5 HIGH. Red Hat's vector correctly reflects the full CIA impact of the demonstrated exploit. |
| Affected Versions | Firefox < 151.0.3 (desktop and Android). Tor Browser < 15.0.19. Thunderbird and Firefox ESR status should be verified via MFSA-2026-54. |
| Fixed Versions | Firefox 151.0.3 (released June 2, 2026). Tor Browser 15.0.19 (released July 20, 2026). Distro backports: check RHEL, Debian, Ubuntu advisories for ESR/Thunderbird. |
| Scanning / Exposure | No GreyNoise or Shodan data applicable — this is a client-side browser vulnerability, not a server-side exposure. Vulnerability scanners (Qualys QID, Tenable plugin) should flag Firefox version < 151.0.3 on managed endpoints. |
| Disclosure Timeline | May 20, 2026: reported to Mozilla. June 2, 2026: patched in Firefox 151.0.3. July 20, 2026: Tor Browser 15.0.19. July 21, 2026: public disclosure by Nebula Security. |
| Reporting Researcher | Nebula Security (discovered via their VEGA automated code scanning tool). Individual researchers not named. Mozilla bug: bugzilla.mozilla.org/show_bug.cgi?id=2040903. |
noisgate verdict.
The single most decisive factor is the public, weaponized exploit chain demonstrating arbitrary code execution from a JIT type confusion the vendor scored as DoS-only. The vendor's CVSS vector (C:N/I:N/A:L) is empirically disproven by Nebula Security's IonStack chain, which achieves full renderer RCE and, when paired with GhostLock, one-click kernel root on Android — Red Hat's 7.5 HIGH is the correct baseline.
Why this verdict
- Vendor CVSS is empirically wrong. The
C:N/I:N/A:Limpact rating is disproven by a public exploit achieving arbitrary read/write and code execution in the renderer. Red Hat's independent assessment of 7.5 HIGH (C:H/I:H/A:H) is correct. - Public weaponized exploit chain. Nebula Security's IonStack writeup (July 21, 2026) provides a deterministic, reliable exploit — not a theoretical PoC. The gap from 'published research' to 'in-the-wild' is days, not months, for browser JIT bugs.
- Tor Browser amplifier. CVE-2026-10702 deanonymizes Tor Browser users (pre-15.0.19), making this a high-value target for state-sponsored actors and surveillance operations — an outsized impact on a specific, vulnerable population.
- Role multiplier: Firefox is predominantly deployed on *workstations and mobile endpoints* (category a/b). It is not a server, hypervisor, IdP, or fleet-management component. The blast radius of successful exploitation is per-user (session cookies, credentials, local files) — not fleet-scale or domain-scale. On Tor Browser, the blast radius includes identity exposure, which is critical for that population but does not translate to enterprise fleet compromise. No high-value-role floor override applies.
- Friction: user interaction required. The attack requires the victim to navigate to an attacker-controlled page. This is standard for browser exploitation and is a real but modest friction point — phishing and malvertising are well-understood delivery mechanisms.
- Friction: Firefox market share. Desktop Firefox sits at ~3-5% market share globally. In a 10,000-host enterprise, this likely means 300-500 endpoints running Firefox as primary or secondary browser, limiting the exposed population compared to Chrome/Edge-targeting attacks.
Why not higher?
Not CRITICAL because the blast radius is per-endpoint, not fleet-scale. Firefox is a workstation browser, not a domain controller, hypervisor, or identity provider. The exploit requires user interaction (visiting a malicious page), and Firefox's ~3-5% desktop market share limits the reachable population in most enterprises. No confirmed in-the-wild exploitation or KEV listing exists yet.
Why not lower?
Not MEDIUM because the vendor's 4.3 MEDIUM rating is factually wrong — a public, deterministic exploit chain achieves full renderer RCE, not just a DoS crash. The PoC is weaponized and published, EPSS will lag but the exploit maturity is undeniable, and the Tor Browser deanonymization risk adds a targeted-attack dimension that pure CVSS scoring misses.
What to do — in priority order.
- Force-update Firefox to 151.0.3+ across all managed endpoints immediately — This is the definitive fix. Use your enterprise browser management tool (SCCM, Intune, Jamf, or Firefox's enterprise policies via
policies.json) to enforce minimum version 151.0.3. Deploy within 30 days per the noisgate mitigation SLA for HIGH severity, though given the public PoC, moving faster is prudent. - Disable IonMonkey JIT as an interim control — Set
javascript.options.iontofalsevia Firefox enterprise policy orabout:config. This kills the vulnerable optimization pass entirely. Performance will degrade on JS-heavy sites but the JIT miscompilation cannot occur. Use this as a bridge if patching takes more than a few days. Deploy within 30 days per noisgate mitigation SLA. - Block known IonStack/PoC indicator domains at web proxy — Monitor threat intel feeds for domains hosting IonStack exploit pages. Add them to your web proxy and DNS sinkhole block lists. This is a partial control — novel domains will bypass it — but raises the cost for opportunistic attackers.
- Enable browser exploit detection in EDR — Ensure your EDR (CrowdStrike, Defender for Endpoint, SentinelOne) has browser exploitation detection policies active. These should flag anomalous shellcode execution or memory manipulation within Firefox renderer child processes.
- Audit Tor Browser deployments — If your organization permits Tor Browser (security researchers, journalists, privacy-sensitive roles), verify all instances are updated to 15.0.19+. Tor Browser users are high-value targets for this specific exploit. Deploy within 30 days per noisgate mitigation SLA.
- Content Security Policy (CSP) — CSP protects pages the *defender* controls, not the attacker's page. The exploit runs on an attacker-hosted page where they set the CSP (or don't).
- Network-level IDS/IPS signatures — The exploit payload is JavaScript delivered over HTTPS. Without TLS inspection, network sensors cannot see the payload. Even with inspection, JIT trigger code looks like normal JavaScript.
- Site isolation / Fission — Firefox's site isolation (Fission) separates origins into different processes but does not prevent exploitation within a single origin's renderer. The attacker controls the origin.
Crowdsourced verification payload.
Run this on each managed endpoint (Linux/macOS) or adapt the version-check logic for Windows. Execute as the user who runs Firefox — no elevated privileges needed. Example: bash check_cve_2026_10702.sh
#!/usr/bin/env bash
# CVE-2026-10702 Checker — Firefox JIT Type Confusion
# Checks if installed Firefox is vulnerable (< 151.0.3)
# Exit codes: 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN
set -euo pipefail
PATCHED_MAJOR=151
PATCHED_MINOR=0
PATCHED_PATCH=3
get_firefox_version() {
local ff_bin
for candidate in firefox firefox-esr firefox-bin; do
ff_bin=$(command -v "$candidate" 2>/dev/null || true)
if [ -n "$ff_bin" ]; then
"$ff_bin" --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.?[0-9]*' | head -1
return 0
fi
done
# macOS application bundle
if [ -x "/Applications/Firefox.app/Contents/MacOS/firefox" ]; then
/Applications/Firefox.app/Contents/MacOS/firefox --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.?[0-9]*' | head -1
return 0
fi
return 1
}
VERSION=$(get_firefox_version 2>/dev/null || true)
if [ -z "$VERSION" ]; then
echo "UNKNOWN — Firefox not found on this host"
exit 2
fi
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
PATCH=${PATCH:-0}
echo "Detected Firefox version: $VERSION"
if [ "$MAJOR" -gt "$PATCHED_MAJOR" ]; then
echo "PATCHED — Firefox $VERSION is newer than 151.0.3"
exit 0
elif [ "$MAJOR" -eq "$PATCHED_MAJOR" ] && [ "$MINOR" -gt "$PATCHED_MINOR" ]; then
echo "PATCHED — Firefox $VERSION is newer than 151.0.3"
exit 0
elif [ "$MAJOR" -eq "$PATCHED_MAJOR" ] && [ "$MINOR" -eq "$PATCHED_MINOR" ] && [ "$PATCH" -ge "$PATCHED_PATCH" ]; then
echo "PATCHED — Firefox $VERSION >= 151.0.3"
exit 0
else
echo "VULNERABLE — Firefox $VERSION is older than 151.0.3 (CVE-2026-10702)"
exit 1
fiIf you remember one thing.
javascript.options.ion = false) as a compensating control. Per the noisgate mitigation SLA for HIGH severity, compensating controls should be in place within 30 days — but with a weaponized public PoC published 10 days ago, treat this with urgency and aim for days, not weeks. The noisgate remediation SLA gives you 180 days to fully patch, but the browser auto-update mechanism means most managed endpoints should be remediated well within that window. Verify coverage with the provided script and close any gaps in your Firefox ESR and Tor Browser populations.Sources
- Nebula Security — IonStack Part I: CVE-2026-10702 Technical Analysis
- NVD — CVE-2026-10702
- Rapid7 — MFSA-2026-54 / CVE-2026-10702
- Lookout — Firefox for Android JIT Type Confusion Vulnerability
- SentinelOne — CVE-2026-10702 Vulnerability Database
- The Hacker News — Tor Browser Compromise via Firefox JIT Flaw
- Cybersecurity News — Tor Browser Exploitation
- Mozilla Security Advisory MFSA-2026-54
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.