Glittering's blog Glittering's blog
Home
  • 学习手册

    • 《JavaScript教程》
    • 《TypeScript教程》
    • 《Git》
    • 《Vite》
    • 《Vue3》
    • 《React18》
    • 《CSS》
    • 《Tailwind CSS》
    • 《ES6 教程》
    • 《TypeScript 从零实现 axios》
  • 技术文档
  • 算法
  • 工作总结
  • 实用技巧
  • collect
About
  • Classification
  • Label
GitHub (opens new window)

Glitz Ma

前端开发工程师
Home
  • 学习手册

    • 《JavaScript教程》
    • 《TypeScript教程》
    • 《Git》
    • 《Vite》
    • 《Vue3》
    • 《React18》
    • 《CSS》
    • 《Tailwind CSS》
    • 《ES6 教程》
    • 《TypeScript 从零实现 axios》
  • 技术文档
  • 算法
  • 工作总结
  • 实用技巧
  • collect
About
  • Classification
  • Label
GitHub (opens new window)
  • 技术文档

  • 算法

  • 工作总结

    • 时区校正
    • 上传下载文件方式总结
    • web异常监控和分析
    • 前端优化指南
    • http缓存机制
    • 静态资源灰度发布
    • 浏览器原理及渲染机制
    • Chrome DevTools 渲染分析实战
    • Layout Thrashing(布局抖动)
    • Composite Layer(合成层)
    • 全局设置滚动条样式好吗?
    • 虚拟列表如何避免Layout和Paint
    • 前端安全知识
    • 安全(同源策略 / CSP / CORS)
    • 浏览器安全模型
    • 从chrome v8 讲安全
    • WebAssembly(Wasm)
    • XSS → JIT → 沙箱逃逸
      • XSS → JIT → 沙箱逃逸
        • 浏览器安全最极端的攻击链(架构级解析)
        • 一、先给你一张「攻击高度图」
      • 二、第一步:XSS —— 为什么它只是“起点”
        • 1️⃣ XSS 到底给了攻击者什么?
        • XSS 后你“仍然不能”:
        • 2️⃣ 那为什么 XSS 仍然危险?
      • 三、第二步:JIT —— 真正的“突破点”
        • 1️⃣ JIT 在干什么?
        • 2️⃣ JIT 漏洞的本质(非常重要)
        • 核心问题只有一个:
        • 3️⃣ 一旦 JIT 被击穿,会发生什么?
        • 攻击者能做到:
        • 4️⃣ 为什么这是“最难的一步”?
      • 四、第三步:Renderer 沙箱 —— 最后的“铁门”
        • 1️⃣ Renderer 沙箱限制了什么?
        • 2️⃣ 那沙箱怎么逃?
        • 3️⃣ 为什么这一步更难?
      • 五、为什么 Chrome 的防御是“分层失败安全”
        • Chrome 的真实防御策略
      • 六、为什么“前端工程师”也必须懂这条链?
      • 七、真实世界的结论(非常重要)
      • 八、面试 / 架构级总结
    • 微前端总结
    • websocket聊天
    • axios 与 promise
    • react高级特性
    • react基础知识总结
    • vue2常见原理总结
    • vue2基础知识总结
    • webpack优化实践
    • webpack基础应用知识总结
    • 小程序笔记
    • 小程序工程模板设计
    • 地图标绘--射线法来计算点在多边形内
  • 实用技巧

  • 收藏夹

  • 技术
  • 工作总结
mamingjuan
2023-05-25
目录

XSS → JIT → 沙箱逃逸

# XSS → JIT → 沙箱逃逸

# 浏览器安全最极端的攻击链(架构级解析)

  • 这是 国家级漏洞 / Pwn2Own / Chrome 0day 的典型路线
  • 不是普通黑客、也不是业务安全能做到的

# 一、先给你一张「攻击高度图」

Web 页面(JS / XSS)
 ├─ JS 执行权限(最低)
 │
 ↓ 利用引擎 Bug
 │
V8 JIT(内存破坏)
 ├─ 读写 Renderer 内存
 │
 ↓ 逃逸 JS 沙箱
 │
Renderer 进程
 ├─ OS 沙箱限制
 │
 ↓ 利用系统 / IPC Bug
 │
Browser / OS(完全失陷)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

👉 Chrome 的目标不是“绝对安全”,而是:

  • 让每一层都极难、极不稳定、极不通用

# 二、第一步:XSS —— 为什么它只是“起点”

# 1️⃣ XSS 到底给了攻击者什么?

只有这一点:

  • 👉 在某个站点的 Renderer 进程里执行 JS

# XSS 后你“仍然不能”:

  • 访问其他站点
  • 读浏览器内存
  • 调系统 API
  • 突破同源
  • 访问 OS

👉 XSS 本身 ≠ 沙箱逃逸


# 2️⃣ 那为什么 XSS 仍然危险?

因为:

  • JS 是 JIT 编译的
  • JIT = 复杂 + 高权限 + 历史漏洞多

# 三、第二步:JIT —— 真正的“突破点”

  • 所有现代浏览器高危漏洞的 80% 在 JIT

# 1️⃣ JIT 在干什么?

V8 为了性能,会做激进假设:

function add(a, b) {
  return a + b
}
1
2
3

JIT 可能假设:

  • a 永远是 number
  • b 永远是 number
  • 不需要类型检查

# 2️⃣ JIT 漏洞的本质(非常重要)

# 核心问题只有一个:

  • “引擎的假设 ≠ 实际运行情况”

典型漏洞类型:

  • Type Confusion(类型混淆)
  • Out-of-Bounds(越界)
  • Use-after-free

# 3️⃣ 一旦 JIT 被击穿,会发生什么?

⚠️ 这是质变点

JS 从:

受限语言
1

变成:

可控内存读写
1

# 攻击者能做到:

  • 读任意 Renderer 内存
  • 写任意 Renderer 内存
  • 构造假对象
  • 劫持执行流

👉 JS 安全模型到此为止


# 4️⃣ 为什么这是“最难的一步”?

因为:

  • JIT 非常复杂
  • 漏洞版本强相关
  • 利用极不稳定
  • Chrome 经常修

所以:

  • 这一步通常是 0day

# 四、第三步:Renderer 沙箱 —— 最后的“铁门”

即使你:

  • 能读写内存
  • 能执行任意代码

你仍然在:

Renderer Process(OS Sandbox)
1

# 1️⃣ Renderer 沙箱限制了什么?

即使是 native code:

  • ❌ 文件系统
  • ❌ 网络 socket
  • ❌ 系统调用
  • ❌ 进程操作

👉 你是“被关在监狱里的 root”


# 2️⃣ 那沙箱怎么逃?

只能通过:

  • Chrome IPC 接口
  • 内核漏洞
  • GPU / 驱动漏洞
  • Browser Process 逻辑漏洞
Renderer → Browser(IPC)
1

⚠️ Browser 进程是:

  • 高权限
  • 少量入口
  • 严格校验

# 3️⃣ 为什么这一步更难?

因为:

  • IPC 接口很少
  • 参数校验严格
  • 攻击面被极度压缩
  • OS 沙箱是系统级

👉 这一步通常是“内核级漏洞”


# 五、为什么 Chrome 的防御是“分层失败安全”

Chrome 并不假设:

  • XSS 不会发生
  • JIT 没漏洞
  • OS 没 bug

而是假设:

  • 每一层都会被突破,但不能一次全破

# Chrome 的真实防御策略

层 防御目标
XSS CSP / 框架转义
JS 语言限制
JIT Deopt / 审计
Renderer OS 沙箱
Site Isolation 进程隔离
OS 权限隔离

# 六、为什么“前端工程师”也必须懂这条链?

因为你在增加或减少攻击面:

行为 影响
eval 扩大 JIT 攻击面
动态 script 扩大执行面
第三方 SDK 引入未知 JS
关闭 CSP 拆第一道墙
Wasm 触及 JIT 边界

👉 安全不是“有没有漏洞”,而是“攻击面有多大”


# 七、真实世界的结论(非常重要)

  • ❌ XSS ≠ 浏览器被攻破

  • ❌ JS ≠ 本地代码

  • ❌ Wasm ≠ 高权限

  • ✅ Chrome 假设“攻击一定会发生”,并通过架构把影响压到最小


# 八、面试 / 架构级总结

XSS 只能获得站点内的 JavaScript 执行权限;真正的浏览器逃逸通常需要利用 JIT 编译器漏洞实现内存破坏,突破语言沙箱;即便如此仍需进一步绕过 Renderer 的操作系统级沙箱,才能影响浏览器或系统,这种多层防御使完整攻击链极其困难。

上次更新: 2026/01/07, 09:20:46
WebAssembly(Wasm)
微前端总结

← WebAssembly(Wasm) 微前端总结→

Copyright © 2015-2026 Glitz Ma
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式