DevTools raw context pointer freed by re-entrant JS
A DevTools/Inspector agent borrows a raw pointer to an InspectedContext, InjectedScript, V8DebuggerScript, session, or message storage and holds it across a call that synchronously re-enters attacker-controlled JavaScript. That re-entrant execution destroys the very object still referenced, leaving the agent to dereference freed memory. The lifetime bug is specific to the inspector’s synchronous callouts, not to ordinary async scheduling.
Mechanism
Fix shape
CVEs in this pattern
2 components · V8, DevTools| CVE | What | Component | Vendor | Severity | Month | |
|---|---|---|---|---|---|---|
| CVE-2026-87617 | UAF in DevTools | DevTools | chrome | Low | 2026-09 | 🔧 |
| CVE-2026-17807 | UAF in V8 | V8 | chrome | Medium | 2026-07 | 🔧 |
| CVE-2026-17836 | UAF in V8 | V8 | chrome | Medium | 2026-07 | 🔧 |
| CVE-2026-10991 | UAF in V8 | V8 | chrome | Medium | 2026-06 | 🔧 |
| CVE-2026-11185 | UAF in V8 | V8 | chrome | Medium | 2026-06 | 🔧 |
| CVE-2026-14393 | UAF in V8 | V8 | chrome | Medium | 2026-06 | 🔧 |
| CVE-2026-14426 | UAF in V8 | V8 | chrome | High | 2026-06 | 🔧 |
| CVE-2026-7940 | UAF in V8 | V8 | chrome | Medium | 2026-05 | 🔧 |
| CVE-2026-5861 | UAF in V8 | V8 | chrome | High | 2026-04 | 🔧 |
Hunt for siblings
Auditor/scanner signal: a raw InspectedContext*/InjectedScript*/V8DebuggerScript* or session pointer that outlives a call known to run user JS (addBinding(s), setBreakpoint, forEachSession, serialize, nested message loop) with no stack shared_ptr guarding it.
Mitigations that would catch this class
- Return owning shared_ptr from context/script accessors and pin on the stack across callouts
- Re-validate objects by stable id after each re-entrant step and bail if destroyed
- Snapshot ids and re-fetch under DisallowGarbageCollection instead of holding live iterators