主要观点:对 Ladybird 浏览器引擎的 JavaScript 引擎 LibJS 进行研究和漏洞挖掘,发现了使用后释放(UAF)漏洞并实现了利用。
关键信息:
- Ladybird 源自 SerenityOS 项目,处于 pre-alpha 阶段,其 LibJS 有解释器层无编译层,有常见现代 JS 引擎优化且代码路径和数据结构有大量验证检查。
- 使用 Fuzzilli 进行模糊测试,发现 10 个独特崩溃,其中包括一些有趣的漏洞如正则表达式解析缓存 bug、TypedArray 整数溢出等,最终确定一个在解释器参数缓冲区的 UAF 漏洞。
- 该 UAF 漏洞通过使用代理函数对象作为构造函数及恶意的
[[Get]]
处理程序触发,可通过控制函数调用的参数缓冲区来实现。 - 利用 UAF 漏洞进行利用,包括泄露对象、创建假对象实现任意读写,最终通过覆盖返回指针实现代码执行,如通过一系列指针链找到栈并覆盖
__libc_start_call_main
为execve
`/calc`的 ROP 链,关闭标签触发。
重要细节: - LibJS 实现构造函数的相关代码及各步骤细节,如获取原型、创建新对象等。
- 利用 UAF 漏洞的具体代码示例,如通过
FinalizationRegistry
泄露对象指针、设置假对象等。 - 任意读写的代码路径及相关函数细节,如
get_by_value
函数及其索引到数组对象的过程。 - 代码执行的具体步骤和利用链,包括找到栈、构建 ROP 链等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。