攻克瓢虫浏览器 | 杰斯的咖啡馆

主要观点:对 Ladybird 浏览器引擎的 JavaScript 引擎 LibJS 进行研究和漏洞挖掘,发现了使用后释放(UAF)漏洞并实现了利用。
关键信息

  • Ladybird 源自 SerenityOS 项目,处于 pre-alpha 阶段,其 LibJS 有解释器层无编译层,有常见现代 JS 引擎优化且代码路径和数据结构有大量验证检查。
  • 使用 Fuzzilli 进行模糊测试,发现 10 个独特崩溃,其中包括一些有趣的漏洞如正则表达式解析缓存 bug、TypedArray 整数溢出等,最终确定一个在解释器参数缓冲区的 UAF 漏洞。
  • 该 UAF 漏洞通过使用代理函数对象作为构造函数及恶意的[[Get]]处理程序触发,可通过控制函数调用的参数缓冲区来实现。
  • 利用 UAF 漏洞进行利用,包括泄露对象、创建假对象实现任意读写,最终通过覆盖返回指针实现代码执行,如通过一系列指针链找到栈并覆盖__libc_start_call_mainexecve`/calc`的 ROP 链,关闭标签触发。
    重要细节
  • LibJS 实现构造函数的相关代码及各步骤细节,如获取原型、创建新对象等。
  • 利用 UAF 漏洞的具体代码示例,如通过FinalizationRegistry泄露对象指针、设置假对象等。
  • 任意读写的代码路径及相关函数细节,如get_by_value函数及其索引到数组对象的过程。
  • 代码执行的具体步骤和利用链,包括找到栈、构建 ROP 链等。
阅读 4
0 条评论