WSL64 运行 32 位程序

WSL1 下执行 x86 程序较为困难,需要进行较多步骤,并且存在局限性;

WSL2 下可以直接执行 x86 程序,但需要从 WSL1 中升级上去。

两种操作均较为麻烦,因此这里记录了一点笔者走过的弯路。

阅读更多...

CVE-2018-16065 分析

一、前言

CVE-2018-16065 是 v8 中 EmitBigTypedArrayElementStore 函数内部的一个漏洞。该漏洞在检查相应 ArrayBuffer 是否被 Detach(即是否是neutered)之后,执行了一个带有副作用的(即可调用用户 JS callback 代码的) ToBigInt 函数。而用户可在对应回调函数中将原先通过上述检查的 BigIntArray (即不是 neutered 的 TypedArray)重新变成 neutered

这将使一部分数据被非法写入至一块已经 Detached 的 ArrayBuffer上。如果 GC 试图回收该 ArrayBuffer 的 backing store ,则会触发 CRASH。

阅读更多...

CVE-2019-5755 分析

一、前言

  • CVE-2019-5755 是一个位于 v8 turboFan 的类型信息缺失漏洞。该漏洞将导致 SpeculativeSafeIntegerSubtract 的计算结果缺失 MinusZero (即 -0)这种类型。这将允许 turboFan 计算出错误的 Range 并可进一步构造出越界读写原语,乃至执行 shellcode。

  • 复现用的 v8 版本为 7.1.302.28 (或者commit ID a62e9dd69957d9b1d0a56f825506408960a283fc 前的版本也可)

阅读更多...

CVE-2019-13764 分析

一、前言

  • CVE-2019-13764 是 v8 中的一个位于 JIT TyperPhase TypeInductionVariablePhi 函数的漏洞。我们可以通过这个例子简单学习一下 TyperPhase 中对 InductionVariablePhi 的处理方式,以及越界读取构造方式。

  • 复现用的 v8 版本为 7.8.279.23(chromium 78.0.3904.108) 。

阅读更多...

CVE-2020-6468 分析

一、前言

  • CVE-2020-6468 是 v8 中的一个位于 DeadCodeElimination::ReduceDeoptimizeOrReturnOrTerminateOrTailCall 函数的 JIT 漏洞。通过该漏洞攻击者可触发类型混淆修改数组的长度,这会导致任意越界读写并可进一步达到 RCE

    具体的说,就是可以在 CheckMaps 结点前向目标对象内部写入 -1,在被认出对象类型前成功修改数组长度。

  • 测试用的 v8 版本为 8.1.307

阅读更多...

CVE-2021-3156分析

一、前言

  • sudo是Linux中一个非常重要的管理权限的软件,它允许用户使用 root 权限来运行程序。而CVE-2021-3156是sudo中存在一个堆溢出漏洞。通过该漏洞,任何没有特权的用户均可使用默认的sudo配置获取root权限。

  • 该漏洞可以影响从1.8.2~1.8.31p2下的所有旧版本sudo,以及1.9.0~1.9.5p1的所有稳定版sudo。

    Qualys漏洞团队于2021-01-13联系 sudo 团队、2021-01-26正式披露。

  • 由于这个漏洞原理较为简单,同时又涉及到提权这种高危操作,并且其影响广泛(笔者一台虚拟机、一个WSL以及一台阿里云服务器均可被攻击),相当有趣。所以我们接下来就来简单分析一下这个漏洞。

阅读更多...

浅析 V8-turboFan

一、前言

  • v8 是一种 JS 引擎的实现,它由Google开发,使用C++编写。

    v8 被设计用于提高网页浏览器内部 JavaScript 代码执行的性能。为了提高性能,v8 将会把 JS 代码转换为更高效的机器码,而非传统的使用解释器执行。因此 v8 引入了 JIT (Just-In-Time) 机制,该机制将会在运行时动态编译 JS 代码为机器码,以提高运行速度。

  • TurboFan是 v8 的优化编译器之一,它使用了 sea of nodes 这个编译器概念。

    sea of nodes 不是单纯的指某个图的结点,它是一种特殊中间表示的图。

    它的表示形式与一般的CFG/DFG不同,其具体内容请查阅上面的连接。

    TurboFan的相关源码位于v8/compiler文件夹下。

阅读更多...

CodeQL初入

一、简介

CodeQL 是一个语义代码分析引擎,它可以扫描发现代码库中的漏洞。使用 CodeQL,可以像对待数据一样查询代码。编写查询条件以查找漏洞的所有变体并处理,同时可以分享个人查询条件。

阅读更多...

下拉&编译 chromium&v8 代码

一、背景

  • 由于chromium的多线程、多进程机制较为复杂,因此调试起来较为麻烦,通过源代码层面打log来调试显得十分必要,而且源码级调试可以大幅度降低调试难度。

  • 同时,倘若需要某个特定版本的chromium时,委托他人代为编译也较为不便,

  • 因此,手动编译chromium是十分必要的。在这篇文章中,笔者将自己下拉代码&编译代码的步骤列入其中,仅供参考。

阅读更多...
  • Copyrights © 2020-2021 Kiprey
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~